diff --git a/api/current.xml b/api/current.xml
index 9ccb8f7..671ae21 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -2836,6 +2836,17 @@
  visibility="public"
 >
 </field>
+<field name="dropDownAnchor"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843363"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="dropDownHintAppearance"
  type="int"
  transient="false"
@@ -2880,6 +2891,17 @@
  visibility="public"
 >
 </field>
+<field name="dropDownWidth"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843362"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="duplicateParentState"
  type="int"
  transient="false"
@@ -2946,17 +2968,6 @@
  visibility="public"
 >
 </field>
-<field name="editorPrivateContentType"
- type="int"
- transient="false"
- volatile="false"
- value="16843299"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="ellipsize"
  type="int"
  transient="false"
@@ -3738,6 +3749,39 @@
  visibility="public"
 >
 </field>
+<field name="imeActionId"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843366"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="imeActionLabel"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843365"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="imeOptions"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843364"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="inAnimation"
  type="int"
  transient="false"
@@ -5619,6 +5663,17 @@
  visibility="public"
 >
 </field>
+<field name="privateImeOptions"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843299"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="process"
  type="int"
  transient="false"
@@ -18551,6 +18606,51 @@
 >
 </method>
 </class>
+<class name="IntentService"
+ extends="android.app.Service"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="IntentService"
+ type="android.app.IntentService"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="name" type="java.lang.String">
+</parameter>
+</constructor>
+<method name="onBind"
+ return="android.os.IBinder"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="intent" type="android.content.Intent">
+</parameter>
+</method>
+<method name="onHandleIntent"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="intent" type="android.content.Intent">
+</parameter>
+</method>
+</class>
 <class name="KeyguardManager"
  extends="java.lang.Object"
  abstract="false"
@@ -21827,6 +21927,23 @@
  visibility="public"
 >
 </method>
+<method name="openAssetFile"
+ return="android.content.res.AssetFileDescriptor"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uri" type="android.net.Uri">
+</parameter>
+<parameter name="mode" type="java.lang.String">
+</parameter>
+<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
+</exception>
+</method>
 <method name="openFile"
  return="android.os.ParcelFileDescriptor"
  abstract="false"
@@ -22135,6 +22252,23 @@
 <parameter name="syncToNetwork" type="boolean">
 </parameter>
 </method>
+<method name="openAssetFileDescriptor"
+ return="android.content.res.AssetFileDescriptor"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uri" type="android.net.Uri">
+</parameter>
+<parameter name="mode" type="java.lang.String">
+</parameter>
+<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
+</exception>
+</method>
 <method name="openFileDescriptor"
  return="android.os.ParcelFileDescriptor"
  abstract="false"
@@ -22182,6 +22316,23 @@
 <exception name="FileNotFoundException" type="java.io.FileNotFoundException">
 </exception>
 </method>
+<method name="openOutputStream"
+ return="java.io.OutputStream"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uri" type="android.net.Uri">
+</parameter>
+<parameter name="mode" type="java.lang.String">
+</parameter>
+<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
+</exception>
+</method>
 <method name="query"
  return="android.database.Cursor"
  abstract="false"
@@ -27731,6 +27882,17 @@
  visibility="public"
 >
 </field>
+<field name="CATEGORY_INFO"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.category.INFO&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="CATEGORY_LAUNCHER"
  type="java.lang.String"
  transient="false"
@@ -31897,6 +32059,21 @@
 <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
 </exception>
 </method>
+<method name="getLaunchIntentForPackage"
+ return="android.content.Intent"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="packageName" type="java.lang.String">
+</parameter>
+<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
+</exception>
+</method>
 <method name="getNameForUid"
  return="java.lang.String"
  abstract="true"
@@ -33978,6 +34155,8 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<implements name="android.os.Parcelable">
+</implements>
 <constructor name="AssetFileDescriptor"
  type="android.content.res.AssetFileDescriptor"
  static="false"
@@ -34005,6 +34184,54 @@
 <exception name="IOException" type="java.io.IOException">
 </exception>
 </method>
+<method name="createInputStream"
+ return="java.io.FileInputStream"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="createOutputStream"
+ return="java.io.FileOutputStream"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="describeContents"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeclaredLength"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getFileDescriptor"
  return="java.io.FileDescriptor"
  abstract="false"
@@ -34049,6 +34276,84 @@
  visibility="public"
 >
 </method>
+<method name="writeToParcel"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="out" type="android.os.Parcel">
+</parameter>
+<parameter name="flags" type="int">
+</parameter>
+</method>
+<field name="CREATOR"
+ type="android.os.Parcelable.Creator"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="UNKNOWN_LENGTH"
+ type="long"
+ transient="false"
+ volatile="false"
+ value="-1L"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="AssetFileDescriptor.AutoCloseInputStream"
+ extends="android.os.ParcelFileDescriptor.AutoCloseInputStream"
+ abstract="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="AssetFileDescriptor.AutoCloseInputStream"
+ type="android.content.res.AssetFileDescriptor.AutoCloseInputStream"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fd" type="android.content.res.AssetFileDescriptor">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</constructor>
+</class>
+<class name="AssetFileDescriptor.AutoCloseOutputStream"
+ extends="android.os.ParcelFileDescriptor.AutoCloseOutputStream"
+ abstract="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="AssetFileDescriptor.AutoCloseOutputStream"
+ type="android.content.res.AssetFileDescriptor.AutoCloseOutputStream"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fd" type="android.content.res.AssetFileDescriptor">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</constructor>
 </class>
 <class name="AssetManager"
  extends="java.lang.Object"
@@ -36079,6 +36384,21 @@
 <parameter name="name" type="java.lang.String">
 </parameter>
 </method>
+<method name="getLayoutDimension"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="index" type="int">
+</parameter>
+<parameter name="defValue" type="int">
+</parameter>
+</method>
 <method name="getNonResourceString"
  return="java.lang.String"
  abstract="false"
@@ -42127,15 +42447,13 @@
 </method>
 </class>
 <class name="GadgetHostView"
- extends="android.widget.ViewAnimator"
+ extends="android.widget.FrameLayout"
  abstract="false"
  static="false"
  final="false"
  deprecated="not deprecated"
  visibility="public"
 >
-<implements name="android.view.animation.Animation.AnimationListener">
-</implements>
 <constructor name="GadgetHostView"
  type="android.gadget.GadgetHostView"
  static="false"
@@ -42204,45 +42522,6 @@
  visibility="public"
 >
 </method>
-<method name="onAnimationEnd"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="animation" type="android.view.animation.Animation">
-</parameter>
-</method>
-<method name="onAnimationRepeat"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="animation" type="android.view.animation.Animation">
-</parameter>
-</method>
-<method name="onAnimationStart"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="animation" type="android.view.animation.Animation">
-</parameter>
-</method>
 <method name="prepareView"
  return="void"
  abstract="false"
@@ -42308,6 +42587,19 @@
 <parameter name="provider" type="android.content.ComponentName">
 </parameter>
 </method>
+<method name="getGadgetIds"
+ return="int[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="provider" type="android.content.ComponentName">
+</parameter>
+</method>
 <method name="getGadgetInfo"
  return="android.gadget.GadgetProviderInfo"
  abstract="false"
@@ -58245,6 +58537,17 @@
  visibility="public"
 >
 </method>
+<method name="hasVerticalScrollBar"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="startInternalChanges"
  return="void"
  abstract="false"
@@ -58363,6 +58666,19 @@
  visibility="public"
 >
 </method>
+<method name="getTextForImeAction"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="imeOptions" type="int">
+</parameter>
+</method>
 <method name="getWindow"
  return="android.app.Dialog"
  abstract="false"
@@ -58599,6 +58915,21 @@
 <parameter name="id" type="int">
 </parameter>
 </method>
+<method name="onExtractedCursorMovement"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="dx" type="int">
+</parameter>
+<parameter name="dy" type="int">
+</parameter>
+</method>
 <method name="onExtractedSelectionChanged"
  return="void"
  abstract="false"
@@ -58625,6 +58956,19 @@
  visibility="public"
 >
 </method>
+<method name="onExtractingInputChanged"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="ei" type="android.view.inputmethod.EditorInfo">
+</parameter>
+</method>
 <method name="onFinishCandidatesView"
  return="void"
  abstract="false"
@@ -58819,6 +59163,19 @@
 <parameter name="text" type="android.view.inputmethod.ExtractedText">
 </parameter>
 </method>
+<method name="onUpdateExtractingAccessories"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="ei" type="android.view.inputmethod.EditorInfo">
+</parameter>
+</method>
 <method name="onUpdateSelection"
  return="void"
  abstract="false"
@@ -58864,6 +59221,45 @@
  visibility="public"
 >
 </method>
+<method name="sendDefaultEditorAction"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fromEnterKey" type="boolean">
+</parameter>
+</method>
+<method name="sendDownUpKeyEvents"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyEventCode" type="int">
+</parameter>
+</method>
+<method name="sendKeyChar"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="charCode" type="char">
+</parameter>
+</method>
 <method name="setCandidatesView"
  return="void"
  abstract="false"
@@ -60365,6 +60761,45 @@
 <parameter name="keyCodes" type="int[]">
 </parameter>
 </method>
+<method name="onPress"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="primaryCode" type="int">
+</parameter>
+</method>
+<method name="onRelease"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="primaryCode" type="int">
+</parameter>
+</method>
+<method name="onText"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="text" type="java.lang.CharSequence">
+</parameter>
+</method>
 <method name="swipeDown"
  return="void"
  abstract="true"
@@ -64237,6 +64672,8 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<parameter name="streamType" type="int">
+</parameter>
 </method>
 <method name="getNotificationMarkerPosition"
  return="int"
@@ -65846,7 +66283,7 @@
 <method name="reset"
  return="void"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -65897,6 +66334,19 @@
 <parameter name="c" type="android.hardware.Camera">
 </parameter>
 </method>
+<method name="setOnErrorListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="l" type="android.media.MediaRecorder.OnErrorListener">
+</parameter>
+</method>
 <method name="setOutputFile"
  return="void"
  abstract="false"
@@ -66043,6 +66493,17 @@
 <exception name="IllegalStateException" type="java.lang.IllegalStateException">
 </exception>
 </method>
+<field name="MEDIA_RECORDER_ERROR_UNKNOWN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="MediaRecorder.AudioEncoder"
  extends="java.lang.Object"
@@ -66106,6 +66567,31 @@
 >
 </field>
 </class>
+<interface name="MediaRecorder.OnErrorListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onError"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mr" type="android.media.MediaRecorder">
+</parameter>
+<parameter name="what" type="int">
+</parameter>
+<parameter name="extra" type="int">
+</parameter>
+</method>
+</interface>
 <class name="MediaRecorder.OutputFormat"
  extends="java.lang.Object"
  abstract="false"
@@ -73195,6 +73681,96 @@
 </parameter>
 </method>
 </class>
+<class name="Visibility"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="Visibility"
+ type="android.opengl.Visibility"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="computeBoundingSphere"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="positions" type="float[]">
+</parameter>
+<parameter name="positionsOffset" type="int">
+</parameter>
+<parameter name="positionsCount" type="int">
+</parameter>
+<parameter name="sphere" type="float[]">
+</parameter>
+<parameter name="sphereOffset" type="int">
+</parameter>
+</method>
+<method name="frustumCullSpheres"
+ return="int"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mvp" type="float[]">
+</parameter>
+<parameter name="mvpOffset" type="int">
+</parameter>
+<parameter name="spheres" type="float[]">
+</parameter>
+<parameter name="spheresOffset" type="int">
+</parameter>
+<parameter name="spheresCount" type="int">
+</parameter>
+<parameter name="results" type="int[]">
+</parameter>
+<parameter name="resultsOffset" type="int">
+</parameter>
+<parameter name="resultsCapacity" type="int">
+</parameter>
+</method>
+<method name="visibilityTest"
+ return="int"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="ws" type="float[]">
+</parameter>
+<parameter name="wsOffset" type="int">
+</parameter>
+<parameter name="positions" type="float[]">
+</parameter>
+<parameter name="positionsOffset" type="int">
+</parameter>
+<parameter name="indices" type="char[]">
+</parameter>
+<parameter name="indicesOffset" type="int">
+</parameter>
+<parameter name="indexCount" type="int">
+</parameter>
+</method>
+</class>
 </package>
 <package name="android.os"
 >
@@ -79460,6 +80036,17 @@
  visibility="public"
 >
 </method>
+<method name="getStatSize"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="open"
  return="android.os.ParcelFileDescriptor"
  abstract="false"
@@ -79502,6 +80089,17 @@
  visibility="public"
 >
 </field>
+<field name="MODE_APPEND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33554432"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="MODE_CREATE"
  type="int"
  transient="false"
@@ -92379,486 +92977,6 @@
 </field>
 </class>
 </package>
-<package name="android.speech.srec"
->
-<class name="MicrophoneInputStream"
- extends="java.io.InputStream"
- abstract="false"
- static="false"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="MicrophoneInputStream"
- type="android.speech.srec.MicrophoneInputStream"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="sampleRate" type="int">
-</parameter>
-<parameter name="fifoDepth" type="int">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</constructor>
-<method name="read"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-</class>
-<class name="Recognizer"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="Recognizer"
- type="android.speech.srec.Recognizer"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="configFile" type="java.lang.String">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</constructor>
-<method name="advance"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="destroy"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="eventToString"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="event" type="int">
-</parameter>
-</method>
-<method name="getConfigDir"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="locale" type="java.util.Locale">
-</parameter>
-</method>
-<method name="getResult"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-<parameter name="key" type="java.lang.String">
-</parameter>
-</method>
-<method name="getResultCount"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getResultKeys"
- return="java.lang.String[]"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-</method>
-<method name="putAudio"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="buf" type="byte[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-<parameter name="length" type="int">
-</parameter>
-<parameter name="isLast" type="boolean">
-</parameter>
-</method>
-<method name="putAudio"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="audio" type="java.io.InputStream">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="start"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="stop"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<field name="EVENT_END_OF_VOICING"
- type="int"
- transient="false"
- volatile="false"
- value="6"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_INCOMPLETE"
- type="int"
- transient="false"
- volatile="false"
- value="2"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_INVALID"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_MAX_SPEECH"
- type="int"
- transient="false"
- volatile="false"
- value="12"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_NEED_MORE_AUDIO"
- type="int"
- transient="false"
- volatile="false"
- value="11"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_NO_MATCH"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_RECOGNITION_RESULT"
- type="int"
- transient="false"
- volatile="false"
- value="8"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_RECOGNITION_TIMEOUT"
- type="int"
- transient="false"
- volatile="false"
- value="10"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_SPOKE_TOO_SOON"
- type="int"
- transient="false"
- volatile="false"
- value="7"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_STARTED"
- type="int"
- transient="false"
- volatile="false"
- value="3"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_START_OF_UTTERANCE_TIMEOUT"
- type="int"
- transient="false"
- volatile="false"
- value="9"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_START_OF_VOICING"
- type="int"
- transient="false"
- volatile="false"
- value="5"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="EVENT_STOPPED"
- type="int"
- transient="false"
- volatile="false"
- value="4"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="KEY_CONFIDENCE"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;conf&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="KEY_LITERAL"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;literal&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="KEY_MEANING"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;meaning&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-</class>
-<class name="Recognizer.Grammar"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="Recognizer.Grammar"
- type="android.speech.srec.Recognizer.Grammar"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="g2gFileName" type="java.lang.String">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</constructor>
-<method name="addWordToSlot"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="slot" type="java.lang.String">
-</parameter>
-<parameter name="word" type="java.lang.String">
-</parameter>
-<parameter name="pron" type="java.lang.String">
-</parameter>
-<parameter name="weight" type="int">
-</parameter>
-<parameter name="tag" type="java.lang.String">
-</parameter>
-</method>
-<method name="compile"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="destroy"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="resetAllSlots"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="save"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="g2gFileName" type="java.lang.String">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="setupRecognizer"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-</class>
-</package>
 <package name="android.telephony"
 >
 <class name="CellLocation"
@@ -94946,6 +95064,21 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<parameter name="messageBody" type="java.lang.CharSequence">
+</parameter>
+<parameter name="use7bitOnly" type="boolean">
+</parameter>
+</method>
+<method name="calculateLength"
+ return="int[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
 <parameter name="messageBody" type="java.lang.String">
 </parameter>
 <parameter name="use7bitOnly" type="boolean">
@@ -99848,6 +99981,21 @@
 <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
 </exception>
 </method>
+<method name="getLaunchIntentForPackage"
+ return="android.content.Intent"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="packageName" type="java.lang.String">
+</parameter>
+<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
+</exception>
+</method>
 <method name="getNameForUid"
  return="java.lang.String"
  abstract="false"
@@ -102319,17 +102467,6 @@
  visibility="public"
 >
 </field>
-<field name="TYPE_TEXT_FLAG_SEARCH"
- type="int"
- transient="false"
- volatile="false"
- value="524288"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="TYPE_TEXT_VARIATION_EMAIL_ADDRESS"
  type="int"
  transient="false"
@@ -106329,6 +106466,21 @@
 <parameter name="elapsedSeconds" type="long">
 </parameter>
 </method>
+<method name="formatElapsedTime"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="recycle" type="java.lang.StringBuilder">
+</parameter>
+<parameter name="elapsedSeconds" type="long">
+</parameter>
+</method>
 <method name="formatSameDayTime"
  return="java.lang.CharSequence"
  abstract="false"
@@ -116851,7 +117003,67 @@
 <parameter name="isLongpressEnabled" type="boolean">
 </parameter>
 </method>
+<method name="setOnDoubleTapListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="onDoubleTapListener" type="android.view.GestureDetector.OnDoubleTapListener">
+</parameter>
+</method>
 </class>
+<interface name="GestureDetector.OnDoubleTapListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onDoubleTap"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="e" type="android.view.MotionEvent">
+</parameter>
+</method>
+<method name="onDoubleTapEvent"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="e" type="android.view.MotionEvent">
+</parameter>
+</method>
+<method name="onSingleTapConfirmed"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="e" type="android.view.MotionEvent">
+</parameter>
+</method>
+</interface>
 <interface name="GestureDetector.OnGestureListener"
  abstract="true"
  static="true"
@@ -116958,6 +117170,8 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<implements name="android.view.GestureDetector.OnDoubleTapListener">
+</implements>
 <implements name="android.view.GestureDetector.OnGestureListener">
 </implements>
 <constructor name="GestureDetector.SimpleOnGestureListener"
@@ -116968,6 +117182,32 @@
  visibility="public"
 >
 </constructor>
+<method name="onDoubleTap"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="e" type="android.view.MotionEvent">
+</parameter>
+</method>
+<method name="onDoubleTapEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="e" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="onDown"
  return="boolean"
  abstract="false"
@@ -117045,6 +117285,19 @@
 <parameter name="e" type="android.view.MotionEvent">
 </parameter>
 </method>
+<method name="onSingleTapConfirmed"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="e" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="onSingleTapUp"
  return="boolean"
  abstract="false"
@@ -118369,6 +118622,17 @@
  visibility="public"
 >
 </field>
+<field name="FLAG_KEEP_TOUCH_MODE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="FLAG_SOFT_KEYBOARD"
  type="int"
  transient="false"
@@ -134461,6 +134725,19 @@
 <parameter name="id" type="int">
 </parameter>
 </method>
+<method name="performEditorAction"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="actionCode" type="int">
+</parameter>
+</method>
 <method name="performPrivateCommand"
  return="boolean"
  abstract="false"
@@ -134751,6 +135028,125 @@
  visibility="public"
 >
 </field>
+<field name="IME_ACTION_GO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_ACTION_NEXT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_ACTION_NONE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_ACTION_SEARCH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_ACTION_SEND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_FLAG_NO_ENTER_ACTION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1073741824"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_MASK_ACTION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="255"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_NORMAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="IME_UNDEFINED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-2147483648"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="actionId"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="actionLabel"
+ type="java.lang.CharSequence"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="extras"
  type="android.os.Bundle"
  transient="false"
@@ -134791,6 +135187,16 @@
  visibility="public"
 >
 </field>
+<field name="imeOptions"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="initialCapsMode"
  type="int"
  transient="false"
@@ -134851,7 +135257,7 @@
  visibility="public"
 >
 </field>
-<field name="privateContentType"
+<field name="privateImeOptions"
  type="java.lang.String"
  transient="false"
  volatile="false"
@@ -135379,6 +135785,19 @@
 <parameter name="id" type="int">
 </parameter>
 </method>
+<method name="performEditorAction"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="editorAction" type="int">
+</parameter>
+</method>
 <method name="performPrivateCommand"
  return="boolean"
  abstract="true"
@@ -141978,6 +142397,17 @@
 <parameter name="defStyle" type="int">
 </parameter>
 </constructor>
+<method name="getKeyProgressIncrement"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getThumbOffset"
  return="int"
  abstract="false"
@@ -141989,6 +142419,19 @@
  visibility="public"
 >
 </method>
+<method name="setKeyProgressIncrement"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="increment" type="int">
+</parameter>
+</method>
 <method name="setThumb"
  return="void"
  abstract="false"
@@ -143419,6 +143862,28 @@
  visibility="public"
 >
 </method>
+<method name="getDropDownAnchor"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDropDownWidth"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getFilter"
  return="android.widget.Filter"
  abstract="false"
@@ -143618,6 +144083,32 @@
 <parameter name="hint" type="java.lang.CharSequence">
 </parameter>
 </method>
+<method name="setDropDownAnchor"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="id" type="int">
+</parameter>
+</method>
+<method name="setDropDownWidth"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="width" type="int">
+</parameter>
+</method>
 <method name="setListSelection"
  return="void"
  abstract="false"
@@ -155206,6 +155697,39 @@
  visibility="public"
 >
 </method>
+<method name="getImeActionId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getImeActionLabel"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getImeOptions"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getInputExtras"
  return="android.os.Bundle"
  abstract="false"
@@ -155344,7 +155868,7 @@
  visibility="public"
 >
 </method>
-<method name="getPrivateContentType"
+<method name="getPrivateImeOptions"
  return="java.lang.String"
  abstract="false"
  native="false"
@@ -155587,6 +156111,19 @@
 <parameter name="text" type="android.view.inputmethod.CompletionInfo">
 </parameter>
 </method>
+<method name="onEditorAction"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="actionCode" type="int">
+</parameter>
+</method>
 <method name="onEndBatchEdit"
  return="void"
  abstract="false"
@@ -156033,6 +156570,34 @@
 <parameter name="whether" type="boolean">
 </parameter>
 </method>
+<method name="setImeActionLabel"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="label" type="java.lang.CharSequence">
+</parameter>
+<parameter name="actionId" type="int">
+</parameter>
+</method>
+<method name="setImeOptions"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="imeOptions" type="int">
+</parameter>
+</method>
 <method name="setIncludeFontPadding"
  return="void"
  abstract="false"
@@ -156286,6 +156851,19 @@
 <parameter name="movement" type="android.text.method.MovementMethod">
 </parameter>
 </method>
+<method name="setOnEditorActionListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="l" type="android.widget.TextView.OnEditorActionListener">
+</parameter>
+</method>
 <method name="setPaintFlags"
  return="void"
  abstract="false"
@@ -156299,7 +156877,7 @@
 <parameter name="flags" type="int">
 </parameter>
 </method>
-<method name="setPrivateContentType"
+<method name="setPrivateImeOptions"
  return="void"
  abstract="false"
  native="false"
@@ -156644,6 +157222,17 @@
 <parameter name="pixels" type="int">
 </parameter>
 </method>
+<method name="shouldAdvanceFocusOnEnter"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</method>
 </class>
 <class name="TextView.BufferType"
  extends="java.lang.Enum"
@@ -156678,6 +157267,31 @@
 >
 </method>
 </class>
+<interface name="TextView.OnEditorActionListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onEditorAction"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="v" type="android.widget.TextView">
+</parameter>
+<parameter name="actionId" type="int">
+</parameter>
+<parameter name="event" type="android.view.KeyEvent">
+</parameter>
+</method>
+</interface>
 <class name="TextView.SavedState"
  extends="android.view.View.BaseSavedState"
  abstract="false"
diff --git a/camera/libcameraservice/CameraHardwareStub.cpp b/camera/libcameraservice/CameraHardwareStub.cpp
index 9a47705..0f1ae8e 100644
--- a/camera/libcameraservice/CameraHardwareStub.cpp
+++ b/camera/libcameraservice/CameraHardwareStub.cpp
@@ -29,7 +29,8 @@
 
 CameraHardwareStub::CameraHardwareStub()
                   : mParameters(),
-                    mHeap(0),
+                    mPreviewHeap(0),
+                    mRawHeap(0),
                     mFakeCamera(0),
                     mPreviewFrameSize(0),
                     mRawPictureCallback(0),
@@ -62,13 +63,17 @@
 
 void CameraHardwareStub::initHeapLocked()
 {
-    int width, height;
-    mParameters.getPreviewSize(&width, &height);
+    // Create raw heap.
+    int picture_width, picture_height;
+    mParameters.getPictureSize(&picture_width, &picture_height);
+    mRawHeap = new MemoryHeapBase(picture_width * 2 * picture_height);
 
-    LOGD("initHeapLocked: preview size=%dx%d", width, height);
+    int preview_width, preview_height;
+    mParameters.getPreviewSize(&preview_width, &preview_height);
+    LOGD("initHeapLocked: preview size=%dx%d", preview_width, preview_height);
 
     // Note that we enforce yuv422 in setParameters().
-    int how_big = width * height * 2;
+    int how_big = preview_width * preview_height * 2;
 
     // If we are being reinitialized to the same size as before, no
     // work needs to be done.
@@ -79,15 +84,15 @@
 
     // Make a new mmap'ed heap that can be shared across processes. 
     // use code below to test with pmem
-    mHeap = new MemoryHeapBase(mPreviewFrameSize * kBufferCount);
+    mPreviewHeap = new MemoryHeapBase(mPreviewFrameSize * kBufferCount);
     // Make an IMemory for each frame so that we can reuse them in callbacks.
     for (int i = 0; i < kBufferCount; i++) {
-        mBuffers[i] = new MemoryBase(mHeap, i * mPreviewFrameSize, mPreviewFrameSize);
+        mBuffers[i] = new MemoryBase(mPreviewHeap, i * mPreviewFrameSize, mPreviewFrameSize);
     }
-
+    
     // Recreate the fake camera to reflect the current size.
     delete mFakeCamera;
-    mFakeCamera = new FakeCamera(width, height);
+    mFakeCamera = new FakeCamera(preview_width, preview_height);
 }
 
 CameraHardwareStub::~CameraHardwareStub()
@@ -99,7 +104,12 @@
 
 sp<IMemoryHeap> CameraHardwareStub::getPreviewHeap() const
 {
-    return mHeap;
+    return mPreviewHeap;
+}
+
+sp<IMemoryHeap> CameraHardwareStub::getRawHeap() const
+{
+    return mRawHeap;
 }
 
 // ---------------------------------------------------------------------------
@@ -114,7 +124,7 @@
         // Find the offset within the heap of the current buffer.
         ssize_t offset = mCurrentPreviewFrame * mPreviewFrameSize;
 
-        sp<MemoryHeapBase> heap = mHeap;
+        sp<MemoryHeapBase> heap = mPreviewHeap;
     
         // this assumes the internal state of fake camera doesn't change
         // (or is thread safe)
@@ -255,10 +265,9 @@
         // In the meantime just make another fake camera picture.
         int w, h;
         mParameters.getPictureSize(&w, &h);
-        sp<MemoryHeapBase> heap = new MemoryHeapBase(w * 2 * h);
-        sp<MemoryBase> mem = new MemoryBase(heap, 0, w * 2 * h);
+        sp<MemoryBase> mem = new MemoryBase(mRawHeap, 0, w * 2 * h);
         FakeCamera cam(w, h);
-        cam.getNextFrameAsYuv422((uint8_t *)heap->base());
+        cam.getNextFrameAsYuv422((uint8_t *)mRawHeap->base());
         if (mRawPictureCallback)
             mRawPictureCallback(mem, mPictureCallbackCookie);
     }
diff --git a/camera/libcameraservice/CameraHardwareStub.h b/camera/libcameraservice/CameraHardwareStub.h
index cdd6011..0d26d47 100644
--- a/camera/libcameraservice/CameraHardwareStub.h
+++ b/camera/libcameraservice/CameraHardwareStub.h
@@ -30,6 +30,7 @@
 class CameraHardwareStub : public CameraHardwareInterface {
 public:
     virtual sp<IMemoryHeap> getPreviewHeap() const;
+    virtual sp<IMemoryHeap> getRawHeap() const;
 
     virtual status_t    startPreview(preview_callback cb, void* user);
     virtual void        stopPreview();
@@ -93,7 +94,8 @@
 
     CameraParameters    mParameters;
 
-    sp<MemoryHeapBase>  mHeap;
+    sp<MemoryHeapBase>  mPreviewHeap;
+    sp<MemoryHeapBase>  mRawHeap;
     sp<MemoryBase>      mBuffers[kBufferCount];
 
     FakeCamera          *mFakeCamera;
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp
index e5d4220..953e637 100644
--- a/camera/libcameraservice/CameraService.cpp
+++ b/camera/libcameraservice/CameraService.cpp
@@ -152,7 +152,7 @@
 }
 
 CameraService::Client::Client(const sp<CameraService>& cameraService,
-        const sp<ICameraClient>& cameraClient, pid_t clientPid) 
+        const sp<ICameraClient>& cameraClient, pid_t clientPid)
 {
     LOGD("Client E constructor");
     mCameraService = cameraService;
@@ -429,7 +429,7 @@
         ret = mHardware->startPreview(NULL, mCameraService.get());
         if (ret != NO_ERROR)
             LOGE("mHardware->startPreview() failed with status %d\n", ret);
- 
+
     } else {
         ret = mHardware->startPreview(previewCallback,
                                       mCameraService.get());
@@ -684,13 +684,33 @@
         return INVALID_OPERATION;
     }
 
-    if (mSurface != NULL && !mUseOverlay)
-        mSurface->unregisterBuffers();
 
-    return mHardware->takePicture(shutterCallback,
+    Mutex::Autolock buffer_lock(mBufferLock);
+    result = mHardware->takePicture(shutterCallback,
                                   yuvPictureCallback,
                                   jpegPictureCallback,
                                   mCameraService.get());
+
+    // It takes quite some time before yuvPicture callback to be called. 
+    // Register the buffer for raw image here to reduce latency.  
+    // But yuvPictureCallback is called from libcamera. So do not call into a
+    // libcamera function here that gets another lock, which may cause deadlock.
+    if (mSurface != 0 && !mUseOverlay) {
+        int w, h;
+        CameraParameters params(mHardware->getParameters());
+        params.getPictureSize(&w, &h);
+        mSurface->unregisterBuffers();
+        uint32_t transform = 0;
+        if (params.getOrientation() == CameraParameters::CAMERA_ORIENTATION_PORTRAIT) {
+            LOGV("portrait mode");
+            transform = ISurface::BufferHeap::ROT_90;
+        }
+        ISurface::BufferHeap buffers(w, h, w, h,
+            PIXEL_FORMAT_YCbCr_420_SP, transform, 0, mHardware->getRawHeap());
+        mSurface->registerBuffers(buffers);
+    }
+
+    return result;
 }
 
 // picture callback - snapshot taken
@@ -732,23 +752,9 @@
 #endif
 
     // Put the YUV version of the snapshot in the preview display.
-    int w, h;
-    CameraParameters params(client->mHardware->getParameters());
-    params.getPictureSize(&w, &h);
-
-//  Mutex::Autolock clientLock(client->mLock);
+    // Use lock to make sure buffer has been registered.
+    Mutex::Autolock clientLock(client->mBufferLock);
     if (client->mSurface != 0 && !client->mUseOverlay) {
-        client->mSurface->unregisterBuffers();
-        
-        uint32_t transform = 0;
-        if (params.getOrientation() == CameraParameters::CAMERA_ORIENTATION_PORTRAIT) {
-            LOGV("portrait mode");
-            transform = ISurface::BufferHeap::ROT_90;
-        }
-        ISurface::BufferHeap buffers(w, h, w, h,
-                PIXEL_FORMAT_YCbCr_420_SP, transform, 0, heap);
-        
-        client->mSurface->registerBuffers(buffers);
         client->mSurface->postBuffer(offset);
     }
 
diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h
index d9b7927..812b928 100644
--- a/camera/libcameraservice/CameraService.h
+++ b/camera/libcameraservice/CameraService.h
@@ -172,6 +172,9 @@
         // for a callback from CameraHardwareInterface.  If this
         // happens, it will cause a deadlock.
         mutable     Mutex                       mSurfaceLock;
+        // mBufferLock synchronizes buffer registration between takePicture() 
+        // and yuvPictureCallback().
+        mutable     Mutex                       mBufferLock;
         mutable     Condition                   mReady;
                     sp<CameraService>           mCameraService;
                     sp<ISurface>                mSurface;
diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java
index 394b8e3..3b5ad86 100644
--- a/core/java/android/app/ApplicationContext.java
+++ b/core/java/android/app/ApplicationContext.java
@@ -1487,7 +1487,7 @@
     static final class ApplicationPackageManager extends PackageManager {
         @Override
         public PackageInfo getPackageInfo(String packageName, int flags)
-            throws NameNotFoundException {
+                throws NameNotFoundException {
             try {
                 PackageInfo pi = mPM.getPackageInfo(packageName, flags);
                 if (pi != null) {
@@ -1500,6 +1500,43 @@
             throw new NameNotFoundException(packageName);
         }
 
+        public Intent getLaunchIntentForPackage(String packageName)
+                throws NameNotFoundException {
+            // First see if the package has an INFO activity; the existence of
+            // such an activity is implied to be the desired front-door for the
+            // overall package (such as if it has multiple launcher entries).
+            Intent intent = getLaunchIntentForPackageCategory(this, packageName,
+                    Intent.CATEGORY_INFO);
+            if (intent != null) {
+                return intent;
+            }
+            
+            // Otherwise, try to find a main launcher activity.
+            return getLaunchIntentForPackageCategory(this, packageName,
+                    Intent.CATEGORY_LAUNCHER);
+        }
+        
+        // XXX This should be implemented as a call to the package manager,
+        // to reduce the work needed.
+        static Intent getLaunchIntentForPackageCategory(PackageManager pm,
+                String packageName, String category) {
+            Intent intent = new Intent(Intent.ACTION_MAIN);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            Intent intentToResolve = new Intent(Intent.ACTION_MAIN, null);
+            intentToResolve.addCategory(category);
+            final List<ResolveInfo> apps =
+                    pm.queryIntentActivities(intentToResolve, 0);
+            // I wish there were a way to directly get the "main" activity of a
+            // package but ...
+            for (ResolveInfo app : apps) {
+                if (app.activityInfo.packageName.equals(packageName)) {
+                    intent.setClassName(packageName, app.activityInfo.name);
+                    return intent;
+                }
+            }
+            return null;
+        }
+        
         @Override
         public int[] getPackageGids(String packageName)
             throws NameNotFoundException {
diff --git a/core/java/android/app/ExpandableListActivity.java b/core/java/android/app/ExpandableListActivity.java
index 75dfcae..a2e048f 100644
--- a/core/java/android/app/ExpandableListActivity.java
+++ b/core/java/android/app/ExpandableListActivity.java
@@ -63,21 +63,21 @@
  * 
  * <pre>
  * &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
- * &lt;LinearLayout
+ * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  *         android:orientation=&quot;vertical&quot;
  *         android:layout_width=&quot;fill_parent&quot; 
  *         android:layout_height=&quot;fill_parent&quot;
- *         android:paddingLeft=&quot;8&quot;
- *         android:paddingRight=&quot;8&quot;&gt;
+ *         android:paddingLeft=&quot;8dp&quot;
+ *         android:paddingRight=&quot;8dp&quot;&gt;
  * 
- *     &lt;ExpandableListView id=&quot;android:list&quot;
+ *     &lt;ExpandableListView android:id=&quot;@id/android:list&quot;
  *               android:layout_width=&quot;fill_parent&quot; 
  *               android:layout_height=&quot;fill_parent&quot;
  *               android:background=&quot;#00FF00&quot;
  *               android:layout_weight=&quot;1&quot;
  *               android:drawSelectorOnTop=&quot;false&quot;/&gt;
  * 
- *     &lt;TextView id=&quot;android:empty&quot;
+ *     &lt;TextView android:id=&quot;@id/android:empty&quot;
  *               android:layout_width=&quot;fill_parent&quot; 
  *               android:layout_height=&quot;fill_parent&quot;
  *               android:background=&quot;#FF0000&quot;
@@ -113,19 +113,19 @@
  * 
  * <pre>
  * &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
- * &lt;LinearLayout
+ * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  *     android:layout_width=&quot;fill_parent&quot;
  *     android:layout_height=&quot;wrap_content&quot;
  *     android:orientation=&quot;vertical&quot;&gt;
  * 
- *     &lt;TextView id=&quot;text1&quot;
- *         android:textSize=&quot;16&quot;
+ *     &lt;TextView android:id=&quot;@+id/text1&quot;
+ *         android:textSize=&quot;16sp&quot;
  *         android:textStyle=&quot;bold&quot;
  *         android:layout_width=&quot;fill_parent&quot;
  *         android:layout_height=&quot;wrap_content&quot;/&gt;
  * 
- *     &lt;TextView id=&quot;text2&quot;
- *         android:textSize=&quot;16&quot;
+ *     &lt;TextView android:id=&quot;@+id/text2&quot;
+ *         android:textSize=&quot;16sp&quot;
  *         android:layout_width=&quot;fill_parent&quot;
  *         android:layout_height=&quot;wrap_content&quot;/&gt;
  * &lt;/LinearLayout&gt;
@@ -162,7 +162,8 @@
 
     /**
      * Override this to populate the context menu when an item is long pressed. menuInfo
-     * will contain a {@link AdapterContextMenuInfo} whose position is a packed position
+     * will contain an {@link android.widget.ExpandableListView.ExpandableListContextMenuInfo}
+     * whose packedPosition is a packed position
      * that should be used with {@link ExpandableListView#getPackedPositionType(long)} and
      * the other similar methods.
      * <p>
diff --git a/core/java/android/app/IntentService.java b/core/java/android/app/IntentService.java
new file mode 100644
index 0000000..2b12a2a
--- /dev/null
+++ b/core/java/android/app/IntentService.java
@@ -0,0 +1,74 @@
+package android.app;
+
+import android.content.Intent;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+
+/**
+ * An abstract {@link Service} that serializes the handling of the Intents passed upon service
+ * start and handles them on a handler thread.
+ *
+ * <p>To use this class extend it and implement {@link #onHandleIntent}. The {@link Service} will
+ * automatically be stopped when the last enqueued {@link Intent} is handled.
+ */
+public abstract class IntentService extends Service {
+    private volatile Looper mServiceLooper;
+    private volatile ServiceHandler mServiceHandler;
+    private String mName;
+
+    private final class ServiceHandler extends Handler {
+        public ServiceHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            onHandleIntent((Intent)msg.obj);
+            stopSelf(msg.arg1);
+        }
+    }
+
+    public IntentService(String name) {
+        super();
+        mName = name;
+    }
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
+        thread.start();
+
+        mServiceLooper = thread.getLooper();
+        mServiceHandler = new ServiceHandler(mServiceLooper);
+    }
+
+    @Override
+    public void onStart(Intent intent, int startId) {
+        super.onStart(intent, startId);
+        Message msg = mServiceHandler.obtainMessage();
+        msg.arg1 = startId;
+        msg.obj = intent;
+        mServiceHandler.sendMessage(msg);
+    }
+
+    @Override
+    public void onDestroy() {
+        mServiceLooper.quit();
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    /**
+     * Invoked on the Handler thread with the {@link Intent} that is passed to {@link #onStart}.
+     * Note that this will be invoked from a different thread than the one that handles the
+     * {@link #onStart} call.
+     */
+    protected abstract void onHandleIntent(Intent intent);
+}
diff --git a/core/java/android/app/ListActivity.java b/core/java/android/app/ListActivity.java
index 2818937..5523c18 100644
--- a/core/java/android/app/ListActivity.java
+++ b/core/java/android/app/ListActivity.java
@@ -53,22 +53,22 @@
  * </p>
  * 
  * <pre>
- * &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
- * &lt;LinearLayout
+ * &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+ * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  *         android:orientation=&quot;vertical&quot;
  *         android:layout_width=&quot;fill_parent&quot; 
  *         android:layout_height=&quot;fill_parent&quot;
- *         android:paddingLeft=&quot;8&quot;
- *         android:paddingRight=&quot;8&quot;&gt;
+ *         android:paddingLeft=&quot;8dp&quot;
+ *         android:paddingRight=&quot;8dp&quot;&gt;
  * 
- *     &lt;ListView id=&quot;android:list&quot;
+ *     &lt;ListView android:id=&quot;@id/android:list&quot;
  *               android:layout_width=&quot;fill_parent&quot; 
  *               android:layout_height=&quot;fill_parent&quot;
  *               android:background=&quot;#00FF00&quot;
  *               android:layout_weight=&quot;1&quot;
  *               android:drawSelectorOnTop=&quot;false&quot;/&gt;
  * 
- *     &lt;TextView id=&quot;android:empty&quot;
+ *     &lt;TextView id=&quot;@id/android:empty&quot;
  *               android:layout_width=&quot;fill_parent&quot; 
  *               android:layout_height=&quot;fill_parent&quot;
  *               android:background=&quot;#FF0000&quot;
@@ -99,19 +99,19 @@
  * 
  * <pre>
  * &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
- * &lt;LinearLayout
+ * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  *     android:layout_width=&quot;fill_parent&quot;
  *     android:layout_height=&quot;wrap_content&quot;
  *     android:orientation=&quot;vertical&quot;&gt;
  * 
- *     &lt;TextView id=&quot;text1&quot;
- *         android:textSize=&quot;16&quot;
+ *     &lt;TextView android:id=&quot;@+id/text1&quot;
+ *         android:textSize=&quot;16sp&quot;
  *         android:textStyle=&quot;bold&quot;
  *         android:layout_width=&quot;fill_parent&quot;
  *         android:layout_height=&quot;wrap_content&quot;/&gt;
  * 
- *     &lt;TextView id=&quot;text2&quot;
- *         android:textSize=&quot;16&quot;
+ *     &lt;TextView android:id=&quot;@+id/text2&quot;
+ *         android:textSize=&quot;16sp&quot;
  *         android:layout_width=&quot;fill_parent&quot;
  *         android:layout_height=&quot;wrap_content&quot;/&gt;
  * &lt;/LinearLayout&gt;
@@ -142,8 +142,8 @@
  * public class MyListAdapter extends ListActivity {
  * 
  *     &#064;Override
- *     protected void onCreate(Bundle icicle){
- *         super.onCreate(icicle);
+ *     protected void onCreate(Bundle savedInstanceState){
+ *         super.onCreate(savedInstanceState);
  * 
  *         // We'll define a custom screen layout here (the one shown above), but
  *         // typically, you could just use the standard ListActivity layout.
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index afb3827..39edab7 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -82,9 +82,7 @@
      * @param id An identifier for this notification unique within your
      *        application.
      * @param notification A {@link Notification} object describing how to
-     *        notify the user, other than the view you're providing.  If you
-     *        pass null, there will be no persistent notification and no
-     *        flashing, vibration, etc.
+     *        notify the user, other than the view you're providing. Must not be null.
      */
     public void notify(int id, Notification notification)
     {
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 7b8256c..d447eb2 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -448,6 +448,7 @@
                 }
             }
             mSearchTextField.setInputType(inputType);
+            mSearchTextField.setImeOptions(mSearchable.getImeOptions());
         }
     }
 
@@ -793,7 +794,6 @@
                 // otherwise, dispatch an "edit view" key
                 switch (keyCode) {
                 case KeyEvent.KEYCODE_ENTER:
-                case KeyEvent.KEYCODE_DPAD_CENTER:
                     if (event.getAction() == KeyEvent.ACTION_UP) {
                         v.cancelLongPress();
                         launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null);                    
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 2cc6de9..c1d66f4 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -747,6 +747,14 @@
  *             <a href="../R.attr.html#inputType">inputType</a> attribute.</td>
  *         <td align="center">No</td>
  *     </tr>
+ *     <tr><th>android:imeOptions</th>
+ *         <td>If provided, supplies additional options for the input method.
+ *             For most searches, in which free form text is expected, this attribute
+ *             need not be provided, and will default to "actionSearch".
+ *             Suitable values for this attribute are described in the
+ *             <a href="../R.attr.html#imeOptions">imeOptions</a> attribute.</td>
+ *         <td align="center">No</td>
+ *     </tr>
  *     
  *     </tbody>
  * </table>
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 56b231f..1ba1c1e 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -63,8 +63,10 @@
     public static final int UNBOND_REASON_AUTH_CANCELED = 3;
     /** A bond attempt failed because we could not contact the remote device */
     public static final int UNBOND_REASON_REMOTE_DEVICE_DOWN = 4;
+    /** A bond attempt failed because a discovery is in progress */
+    public static final int UNBOND_REASON_DISCOVERY_IN_PROGRESS = 5;
     /** An existing bond was explicitly revoked */
-    public static final int UNBOND_REASON_REMOVED = 5;
+    public static final int UNBOND_REASON_REMOVED = 6;
 
     private static final String TAG = "BluetoothDevice";
     
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 3a64cee..25544de 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -18,6 +18,7 @@
 
 import android.content.pm.PackageManager;
 import android.content.pm.ProviderInfo;
+import android.content.res.AssetFileDescriptor;
 import android.content.res.Configuration;
 import android.database.Cursor;
 import android.database.CursorToBulkCursorAdaptor;
@@ -162,6 +163,13 @@
             return ContentProvider.this.openFile(uri, mode);
         }
 
+        public AssetFileDescriptor openAssetFile(Uri uri, String mode)
+                throws FileNotFoundException {
+            if (mode != null && mode.startsWith("rw")) checkWritePermission(uri);
+            else checkReadPermission(uri);
+            return ContentProvider.this.openAssetFile(uri, mode);
+        }
+
         public ISyncAdapter getSyncAdapter() {
             checkWritePermission(null);
             return ContentProvider.this.getSyncAdapter().getISyncAdapter();
@@ -438,8 +446,9 @@
      * of this method should create a new ParcelFileDescriptor for each call.
      *
      * @param uri The URI whose file is to be opened.
-     * @param mode Access mode for the file.  May be "r" for read-only access
-     * or "rw" for read and write access.
+     * @param mode Access mode for the file.  May be "r" for read-only access,
+     * "rw" for read and write access, or "rwt" for read and write access
+     * that truncates any existing file.
      *
      * @return Returns a new ParcelFileDescriptor which you can use to access
      * the file.
@@ -448,19 +457,66 @@
      * no file associated with the given URI or the mode is invalid.
      * @throws SecurityException Throws SecurityException if the caller does
      * not have permission to access the file.
-     */
+     * 
+     * @see #openAssetFile(Uri, String)
+     * @see #openFileHelper(Uri, String)
+     */    
     public ParcelFileDescriptor openFile(Uri uri, String mode)
             throws FileNotFoundException {
         throw new FileNotFoundException("No files supported by provider at "
                 + uri);
     }
+    
+    /**
+     * This is like {@link #openFile}, but can be implemented by providers
+     * that need to be able to return sub-sections of files, often assets
+     * inside of their .apk.  Note that when implementing this your clients
+     * must be able to deal with such files, either directly with
+     * {@link ContentResolver#openAssetFileDescriptor
+     * ContentResolver.openAssetFileDescriptor}, or by using the higher-level
+     * {@link ContentResolver#openInputStream ContentResolver.openInputStream}
+     * or {@link ContentResolver#openOutputStream ContentResolver.openOutputStream}
+     * methods.
+     * 
+     * <p><em>Note: if you are implementing this to return a full file, you
+     * should create the AssetFileDescriptor with
+     * {@link AssetFileDescriptor#UNKNOWN_LENGTH} to be compatible with
+     * applications that can not handle sub-sections of files.</em></p>
+     *
+     * @param uri The URI whose file is to be opened.
+     * @param mode Access mode for the file.  May be "r" for read-only access,
+     * "w" for write-only access (erasing whatever data is currently in
+     * the file), "wa" for write-only access to append to any existing data,
+     * "rw" for read and write access on any existing data, and "rwt" for read
+     * and write access that truncates any existing file.
+     *
+     * @return Returns a new AssetFileDescriptor which you can use to access
+     * the file.
+     *
+     * @throws FileNotFoundException Throws FileNotFoundException if there is
+     * no file associated with the given URI or the mode is invalid.
+     * @throws SecurityException Throws SecurityException if the caller does
+     * not have permission to access the file.
+     * 
+     * @see #openFile(Uri, String)
+     * @see #openFileHelper(Uri, String)
+     */
+    public AssetFileDescriptor openAssetFile(Uri uri, String mode)
+            throws FileNotFoundException {
+        ParcelFileDescriptor fd = openFile(uri, mode);
+        return fd != null ? new AssetFileDescriptor(fd, 0, -1) : null;
+    }
 
     /**
      * Convenience for subclasses that wish to implement {@link #openFile}
      * by looking up a column named "_data" at the given URI.
      *
      * @param uri The URI to be opened.
-     * @param mode The file mode.
+     * @param mode The file mode.  May be "r" for read-only access,
+     * "w" for write-only access (erasing whatever data is currently in
+     * the file), "wa" for write-only access to append to any existing data,
+     * "rw" for read and write access on any existing data, and "rwt" for read
+     * and write access that truncates any existing file.
      *
      * @return Returns a new ParcelFileDescriptor that can be used by the
      * client to access the file.
@@ -489,16 +545,7 @@
             throw new FileNotFoundException("Column _data not found.");
         }
 
-        int modeBits;
-        if ("r".equals(mode)) {
-            modeBits = ParcelFileDescriptor.MODE_READ_ONLY;
-        } else if ("rw".equals(mode)) {
-            modeBits = ParcelFileDescriptor.MODE_READ_WRITE
-                    | ParcelFileDescriptor.MODE_CREATE;
-        } else {
-            throw new FileNotFoundException("Bad mode for " + uri + ": "
-                    + mode);
-        }
+        int modeBits = ContentResolver.modeToMode(uri, mode);
         return ParcelFileDescriptor.open(new File(path), modeBits);
     }
 
diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java
index ede2c9b..e5e3f74 100644
--- a/core/java/android/content/ContentProviderNative.java
+++ b/core/java/android/content/ContentProviderNative.java
@@ -16,6 +16,7 @@
 
 package android.content;
 
+import android.content.res.AssetFileDescriptor;
 import android.database.BulkCursorNative;
 import android.database.BulkCursorToCursorAdaptor;
 import android.database.Cursor;
@@ -187,6 +188,25 @@
                     return true;
                 }
 
+                case OPEN_ASSET_FILE_TRANSACTION:
+                {
+                    data.enforceInterface(IContentProvider.descriptor);
+                    Uri url = Uri.CREATOR.createFromParcel(data);
+                    String mode = data.readString();
+
+                    AssetFileDescriptor fd;
+                    fd = openAssetFile(url, mode);
+                    reply.writeNoException();
+                    if (fd != null) {
+                        reply.writeInt(1);
+                        fd.writeToParcel(reply,
+                                Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+                    } else {
+                        reply.writeInt(0);
+                    }
+                    return true;
+                }
+
                 case GET_SYNC_ADAPTER_TRANSACTION:
                 {
                     data.enforceInterface(IContentProvider.descriptor);
@@ -413,6 +433,29 @@
         return fd;
     }
 
+    public AssetFileDescriptor openAssetFile(Uri url, String mode)
+            throws RemoteException, FileNotFoundException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+
+        data.writeInterfaceToken(IContentProvider.descriptor);
+
+        url.writeToParcel(data, 0);
+        data.writeString(mode);
+
+        mRemote.transact(IContentProvider.OPEN_ASSET_FILE_TRANSACTION, data, reply, 0);
+
+        DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
+        int has = reply.readInt();
+        AssetFileDescriptor fd = has != 0
+                ? AssetFileDescriptor.CREATOR.createFromParcel(reply) : null;
+
+        data.recycle();
+        reply.recycle();
+
+        return fd;
+    }
+
     public ISyncAdapter getSyncAdapter() throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 52f55b6..0d886ee 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -17,6 +17,7 @@
 package android.content;
 
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.AssetFileDescriptor;
 import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.database.Cursor;
@@ -28,6 +29,7 @@
 import android.os.RemoteException;
 import android.text.TextUtils;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -170,6 +172,143 @@
      * <li>android.resource ({@link #SCHEME_ANDROID_RESOURCE})</li>
      * <li>file ({@link #SCHEME_FILE})</li>
      * </ul>
+     * 
+     * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
+     * on these schemes.
+     * 
+     * @param uri The desired URI.
+     * @return InputStream
+     * @throws FileNotFoundException if the provided URI could not be opened.
+     * @see #openAssetFileDescriptor(Uri, String)
+     */
+    public final InputStream openInputStream(Uri uri)
+            throws FileNotFoundException {
+        String scheme = uri.getScheme();
+        if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
+            // Note: left here to avoid breaking compatibility.  May be removed
+            // with sufficient testing.
+            OpenResourceIdResult r = getResourceId(uri);
+            try {
+                InputStream stream = r.r.openRawResource(r.id);
+                return stream;
+            } catch (Resources.NotFoundException ex) {
+                throw new FileNotFoundException("Resource does not exist: " + uri);
+            }
+        } else if (SCHEME_FILE.equals(scheme)) {
+            // Note: left here to avoid breaking compatibility.  May be removed
+            // with sufficient testing.
+            return new FileInputStream(uri.getPath());
+        } else {
+            AssetFileDescriptor fd = openAssetFileDescriptor(uri, "r");
+            try {
+                return fd != null ? fd.createInputStream() : null;
+            } catch (IOException e) {
+                throw new FileNotFoundException("Unable to create stream");
+            }
+        }
+    }
+
+    /**
+     * Synonym for {@link #openOutputStream(Uri, String)
+     * openOutputStream(uri, "w")}.
+     * @throws FileNotFoundException if the provided URI could not be opened.
+     */
+    public final OutputStream openOutputStream(Uri uri)
+            throws FileNotFoundException {
+        return openOutputStream(uri, "w");
+    }
+
+    /**
+     * Open a stream on to the content associated with a content URI.  If there
+     * is no data associated with the URI, FileNotFoundException is thrown.
+     *
+     * <h5>Accepts the following URI schemes:</h5>
+     * <ul>
+     * <li>content ({@link #SCHEME_CONTENT})</li>
+     * <li>file ({@link #SCHEME_FILE})</li>
+     * </ul>
+     *
+     * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
+     * on these schemes.
+     * 
+     * @param uri The desired URI.
+     * @param mode May be "w", "wa", "rw", or "rwt".
+     * @return OutputStream
+     * @throws FileNotFoundException if the provided URI could not be opened.
+     * @see #openAssetFileDescriptor(Uri, String)
+     */
+    public final OutputStream openOutputStream(Uri uri, String mode)
+            throws FileNotFoundException {
+        AssetFileDescriptor fd = openAssetFileDescriptor(uri, mode);
+        try {
+            return fd != null ? fd.createOutputStream() : null;
+        } catch (IOException e) {
+            throw new FileNotFoundException("Unable to create stream");
+        }
+    }
+
+    /**
+     * Open a raw file descriptor to access data under a "content:" URI.  This
+     * is like {@link #openAssetFileDescriptor(Uri, String)}, but uses the
+     * underlying {@link ContentProvider#openFile}
+     * ContentProvider.openFile()} method, so will <em>not</em> work with
+     * providers that return sub-sections of files.  If at all possible,
+     * you should use {@link #openAssetFileDescriptor(Uri, String)}.  You
+     * will receive a FileNotFoundException exception if the provider returns a
+     * sub-section of a file.
+     *
+     * <h5>Accepts the following URI schemes:</h5>
+     * <ul>
+     * <li>content ({@link #SCHEME_CONTENT})</li>
+     * <li>file ({@link #SCHEME_FILE})</li>
+     * </ul>
+     *
+     * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
+     * on these schemes.
+     * 
+     * @param uri The desired URI to open.
+     * @param mode The file mode to use, as per {@link ContentProvider#openFile
+     * ContentProvider.openFile}.
+     * @return Returns a new ParcelFileDescriptor pointing to the file.  You
+     * own this descriptor and are responsible for closing it when done.
+     * @throws FileNotFoundException Throws FileNotFoundException of no
+     * file exists under the URI or the mode is invalid.
+     * @see #openAssetFileDescriptor(Uri, String)
+     */
+    public final ParcelFileDescriptor openFileDescriptor(Uri uri,
+            String mode) throws FileNotFoundException {
+        AssetFileDescriptor afd = openAssetFileDescriptor(uri, mode);
+        if (afd == null) {
+            return null;
+        }
+        
+        if (afd.getDeclaredLength() < 0) {
+            // This is a full file!
+            return afd.getParcelFileDescriptor();
+        }
+        
+        // Client can't handle a sub-section of a file, so close what
+        // we got and bail with an exception.
+        try {
+            afd.close();
+        } catch (IOException e) {
+        }
+        
+        throw new FileNotFoundException("Not a whole file");
+    }
+
+    /**
+     * Open a raw file descriptor to access data under a "content:" URI.  This
+     * interacts with the underlying {@link ContentProvider#openAssetFile}
+     * ContentProvider.openAssetFile()} method of the provider associated with the
+     * given URI, to retrieve any file stored there.
+     *
+     * <h5>Accepts the following URI schemes:</h5>
+     * <ul>
+     * <li>content ({@link #SCHEME_CONTENT})</li>
+     * <li>android.resource ({@link #SCHEME_ANDROID_RESOURCE})</li>
+     * <li>file ({@link #SCHEME_FILE})</li>
+     * </ul>
      * <h5>The android.resource ({@link #SCHEME_ANDROID_RESOURCE}) Scheme</h5>
      * <p>
      * A Uri object can be used to reference a resource in an APK file.  The
@@ -193,129 +332,130 @@
      * <pre>Uri uri = Uri.parse("android.resource://com.example.myapp/raw/my_resource");</pre>
      * </li>
      * </ul>
-     * @param uri The desired "content:" URI.
-     * @return InputStream
-     * @throws FileNotFoundException if the provided URI could not be opened.
-     */
-    public final InputStream openInputStream(Uri uri)
-            throws FileNotFoundException {
-        String scheme = uri.getScheme();
-        if (SCHEME_CONTENT.equals(scheme)) {
-            ParcelFileDescriptor fd = openFileDescriptor(uri, "r");
-            return fd != null ? new ParcelFileDescriptor.AutoCloseInputStream(fd) : null;
-        } else if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
-            String authority = uri.getAuthority();
-            Resources r;
-            if (TextUtils.isEmpty(authority)) {
-                throw new FileNotFoundException("No authority: " + uri);
-            } else {
-                try {
-                    r = mContext.getPackageManager().getResourcesForApplication(authority);
-                } catch (NameNotFoundException ex) {
-                    throw new FileNotFoundException("No package found for authority: " + uri);
-                }
-            }
-            List<String> path = uri.getPathSegments();
-            if (path == null) {
-                throw new FileNotFoundException("No path: " + uri);
-            }
-            int len = path.size();
-            int id;
-            if (len == 1) {
-                try {
-                    id = Integer.parseInt(path.get(0));
-                } catch (NumberFormatException e) {
-                    throw new FileNotFoundException("Single path segment is not a resource ID: " + uri);
-                }
-            } else if (len == 2) {
-                id = r.getIdentifier(path.get(1), path.get(0), authority);
-            } else {
-                throw new FileNotFoundException("More than two path segments: " + uri);
-            }
-            if (id == 0) {
-                throw new FileNotFoundException("No resource found for: " + uri);
-            }
-            try {
-                InputStream stream = r.openRawResource(id);
-                return stream;
-            } catch (Resources.NotFoundException ex) {
-                throw new FileNotFoundException("Resource ID does not exist: " + uri);
-            }
-        } else if (SCHEME_FILE.equals(scheme)) {
-            return new FileInputStream(uri.getPath());
-        } else {
-            throw new FileNotFoundException("Unknown scheme: " + uri);
-        }
-    }
-
-    /**
-     * Open a stream on to the content associated with a content URI.  If there
-     * is no data associated with the URI, FileNotFoundException is thrown.
-     *
-     * <h5>Accepts the following URI schemes:</h5>
-     * <ul>
-     * <li>content ({@link #SCHEME_CONTENT})</li>
-     * </ul>
-     *
-     * @param uri The desired "content:" URI.
-     * @return OutputStream
-     */
-    public final OutputStream openOutputStream(Uri uri)
-            throws FileNotFoundException {
-        String scheme = uri.getScheme();
-        if (SCHEME_CONTENT.equals(scheme)) {
-            ParcelFileDescriptor fd = openFileDescriptor(uri, "rw");
-            return fd != null
-                    ? new ParcelFileDescriptor.AutoCloseOutputStream(fd) : null;
-        } else {
-            throw new FileNotFoundException("Unknown scheme: " + uri);
-        }
-    }
-
-    /**
-     * Open a raw file descriptor to access data under a "content:" URI.  This
-     * interacts with the underlying {@link ContentProvider#openFile}
-     * ContentProvider.openFile()} method of the provider associated with the
-     * given URI, to retrieve any file stored there.
-     *
-     * <h5>Accepts the following URI schemes:</h5>
-     * <ul>
-     * <li>content ({@link #SCHEME_CONTENT})</li>
-     * </ul>
      *
      * @param uri The desired URI to open.
-     * @param mode The file mode to use, as per {@link ContentProvider#openFile
-     * ContentProvider.openFile}.
+     * @param mode The file mode to use, as per {@link ContentProvider#openAssetFile
+     * ContentProvider.openAssetFile}.
      * @return Returns a new ParcelFileDescriptor pointing to the file.  You
      * own this descriptor and are responsible for closing it when done.
      * @throws FileNotFoundException Throws FileNotFoundException of no
      * file exists under the URI or the mode is invalid.
      */
-    public final ParcelFileDescriptor openFileDescriptor(Uri uri,
+    public final AssetFileDescriptor openAssetFileDescriptor(Uri uri,
             String mode) throws FileNotFoundException {
-        IContentProvider provider = acquireProvider(uri);
-        if (provider == null) {
-            throw new FileNotFoundException("No content provider: " + uri);
-        }
-        try {
-            ParcelFileDescriptor fd = provider.openFile(uri, mode);
-            if(fd == null) {
-                releaseProvider(provider);
-                return null;
+        String scheme = uri.getScheme();
+        if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
+            if (!"r".equals(mode)) {
+                throw new FileNotFoundException("Can't write resources: " + uri);
             }
-            return new ParcelFileDescriptorInner(fd, provider);
-        } catch (RemoteException e) {
-            releaseProvider(provider);
-            throw new FileNotFoundException("Dead content provider: " + uri);
-        } catch (FileNotFoundException e) {
-            releaseProvider(provider);
-            throw e;
-        } catch (RuntimeException e) {
-            releaseProvider(provider);
-            throw e;
+            OpenResourceIdResult r = getResourceId(uri);
+            try {
+                return r.r.openRawResourceFd(r.id);
+            } catch (Resources.NotFoundException ex) {
+                throw new FileNotFoundException("Resource does not exist: " + uri);
+            }
+        } else if (SCHEME_FILE.equals(scheme)) {
+            ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
+                    new File(uri.getPath()), modeToMode(uri, mode));
+            return new AssetFileDescriptor(pfd, 0, -1);
+        } else {
+            IContentProvider provider = acquireProvider(uri);
+            if (provider == null) {
+                throw new FileNotFoundException("No content provider: " + uri);
+            }
+            try {
+                AssetFileDescriptor fd = provider.openAssetFile(uri, mode);
+                if(fd == null) {
+                    releaseProvider(provider);
+                    return null;
+                }
+                ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
+                        fd.getParcelFileDescriptor(), provider);
+                return new AssetFileDescriptor(pfd, fd.getStartOffset(),
+                        fd.getDeclaredLength());
+            } catch (RemoteException e) {
+                releaseProvider(provider);
+                throw new FileNotFoundException("Dead content provider: " + uri);
+            } catch (FileNotFoundException e) {
+                releaseProvider(provider);
+                throw e;
+            } catch (RuntimeException e) {
+                releaseProvider(provider);
+                throw e;
+            }
         }
     }
 
+    class OpenResourceIdResult {
+        Resources r;
+        int id;
+    }
+    
+    OpenResourceIdResult getResourceId(Uri uri) throws FileNotFoundException {
+        String authority = uri.getAuthority();
+        Resources r;
+        if (TextUtils.isEmpty(authority)) {
+            throw new FileNotFoundException("No authority: " + uri);
+        } else {
+            try {
+                r = mContext.getPackageManager().getResourcesForApplication(authority);
+            } catch (NameNotFoundException ex) {
+                throw new FileNotFoundException("No package found for authority: " + uri);
+            }
+        }
+        List<String> path = uri.getPathSegments();
+        if (path == null) {
+            throw new FileNotFoundException("No path: " + uri);
+        }
+        int len = path.size();
+        int id;
+        if (len == 1) {
+            try {
+                id = Integer.parseInt(path.get(0));
+            } catch (NumberFormatException e) {
+                throw new FileNotFoundException("Single path segment is not a resource ID: " + uri);
+            }
+        } else if (len == 2) {
+            id = r.getIdentifier(path.get(1), path.get(0), authority);
+        } else {
+            throw new FileNotFoundException("More than two path segments: " + uri);
+        }
+        if (id == 0) {
+            throw new FileNotFoundException("No resource found for: " + uri);
+        }
+        OpenResourceIdResult res = new OpenResourceIdResult();
+        res.r = r;
+        res.id = id;
+        return res;
+    }
+    
+    /** @hide */
+    static public int modeToMode(Uri uri, String mode) throws FileNotFoundException {
+        int modeBits;
+        if ("r".equals(mode)) {
+            modeBits = ParcelFileDescriptor.MODE_READ_ONLY;
+        } else if ("w".equals(mode) || "wt".equals(mode)) {
+            modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY
+                    | ParcelFileDescriptor.MODE_CREATE
+                    | ParcelFileDescriptor.MODE_TRUNCATE;
+        } else if ("wa".equals(mode)) {
+            modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY
+                    | ParcelFileDescriptor.MODE_CREATE
+                    | ParcelFileDescriptor.MODE_APPEND;
+        } else if ("rw".equals(mode)) {
+            modeBits = ParcelFileDescriptor.MODE_READ_WRITE
+                    | ParcelFileDescriptor.MODE_CREATE;
+        } else if ("rwt".equals(mode)) {
+            modeBits = ParcelFileDescriptor.MODE_READ_WRITE
+                    | ParcelFileDescriptor.MODE_CREATE
+                    | ParcelFileDescriptor.MODE_TRUNCATE;
+        } else {
+            throw new FileNotFoundException("Bad mode for " + uri + ": "
+                    + mode);
+        }
+        return modeBits;
+    }
+    
     /**
      * Inserts a row into a table at the given URL.
      *
diff --git a/core/java/android/content/ContentServiceNative.java b/core/java/android/content/ContentServiceNative.java
index f050501..364f9ee 100644
--- a/core/java/android/content/ContentServiceNative.java
+++ b/core/java/android/content/ContentServiceNative.java
@@ -75,6 +75,13 @@
     {
         try {
         switch (code) {
+            case 5038: {
+                data.readString(); // ignore the interface token that service generated
+                Uri uri = Uri.parse(data.readString());
+                notifyChange(uri, null, false, false);
+                return true;
+            }
+            
             case REGISTER_CONTENT_OBSERVER_TRANSACTION: {
                 Uri uri = Uri.CREATOR.createFromParcel(data);
                 boolean notifyForDescendents = data.readInt() != 0;
diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java
index a6ef46f..0606956 100644
--- a/core/java/android/content/IContentProvider.java
+++ b/core/java/android/content/IContentProvider.java
@@ -16,6 +16,7 @@
 
 package android.content;
 
+import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
 import android.database.CursorWindow;
 import android.database.IBulkCursor;
@@ -52,6 +53,8 @@
             String[] selectionArgs) throws RemoteException;
     public ParcelFileDescriptor openFile(Uri url, String mode)
             throws RemoteException, FileNotFoundException;
+    public AssetFileDescriptor openAssetFile(Uri url, String mode)
+            throws RemoteException, FileNotFoundException;
     public ISyncAdapter getSyncAdapter() throws RemoteException;
 
     /* IPC constants */
@@ -65,4 +68,5 @@
     static final int GET_SYNC_ADAPTER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 10;
     static final int BULK_INSERT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 12;
     static final int OPEN_FILE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 13;
+    static final int OPEN_ASSET_FILE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 14;
 }
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index c1c3b49..e1c1f64 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -522,6 +522,7 @@
  *     <li> {@link #CATEGORY_ALTERNATIVE}
  *     <li> {@link #CATEGORY_SELECTED_ALTERNATIVE}
  *     <li> {@link #CATEGORY_LAUNCHER}
+ *     <li> {@link #CATEGORY_INFO}
  *     <li> {@link #CATEGORY_HOME}
  *     <li> {@link #CATEGORY_PREFERENCE}
  *     <li> {@link #CATEGORY_GADGET}
@@ -1546,6 +1547,13 @@
     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
     public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";
     /**
+     * Provides information about the package it is in; typically used if
+     * a package does not contain a {@link #CATEGORY_LAUNCHER} to provide
+     * a front-door to the user without having to be shown in the all apps list.
+     */
+    @SdkConstant(SdkConstantType.INTENT_CATEGORY)
+    public static final String CATEGORY_INFO = "android.intent.category.INFO";
+    /**
      * This is the home activity, that is the first activity that is displayed
      * when the device boots.
      */
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 698f27f..7287d9c 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -480,6 +480,26 @@
             throws NameNotFoundException;
 
     /**
+     * Return a "good" intent to launch a front-door activity in a package,
+     * for use for example to implement an "open" button when browsing through
+     * packages.  The current implementation will look first for a main
+     * activity in the category {@link Intent#CATEGORY_INFO}, next for a
+     * main activity in the category {@link Intent#CATEGORY_LAUNCHER}, or return
+     * null if neither are found.
+     * 
+     * <p>Throws {@link NameNotFoundException} if a package with the given
+     * name can not be found on the system.
+     *
+     * @param packageName The name of the package to inspect.
+     * 
+     * @return Returns either a fully-qualified Intent that can be used to
+     * launch the main activity in the package, or null if the package does
+     * not contain such an activity.
+     */
+    public abstract Intent getLaunchIntentForPackage(String packageName)
+            throws NameNotFoundException;
+    
+    /**
      * Return an array of all of the secondary group-ids that have been
      * assigned to a package.
      *
diff --git a/core/java/android/content/res/AssetFileDescriptor.java b/core/java/android/content/res/AssetFileDescriptor.java
index 4a073f7..231e3e2 100644
--- a/core/java/android/content/res/AssetFileDescriptor.java
+++ b/core/java/android/content/res/AssetFileDescriptor.java
@@ -16,9 +16,13 @@
 
 package android.content.res;
 
+import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
+import android.os.Parcelable;
 
 import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 
 /**
@@ -26,16 +30,32 @@
  * opened FileDescriptor that can be used to read the data, as well as the
  * offset and length of that entry's data in the file.
  */
-public class AssetFileDescriptor {
+public class AssetFileDescriptor implements Parcelable {
+    /**
+     * Length used with {@link #AssetFileDescriptor(ParcelFileDescriptor, long, long)}
+     * and {@link #getDeclaredLength} when a length has not been declared.  This means
+     * the data extends to the end of the file.
+     */
+    public static final long UNKNOWN_LENGTH = -1;
+    
     private final ParcelFileDescriptor mFd;
     private final long mStartOffset;
     private final long mLength;
     
     /**
      * Create a new AssetFileDescriptor from the given values.
+     * @param fd The underlying file descriptor.
+     * @param startOffset The location within the file that the asset starts.
+     * This must be 0 if length is UNKNOWN_LENGTH.
+     * @param length The number of bytes of the asset, or
+     * {@link #UNKNOWN_LENGTH if it extends to the end of the file.
      */
     public AssetFileDescriptor(ParcelFileDescriptor fd, long startOffset,
             long length) {
+        if (length < 0 && startOffset != 0) {
+            throw new IllegalArgumentException(
+                    "startOffset must be 0 when using UNKNOWN_LENGTH");
+        }
         mFd = fd;
         mStartOffset = startOffset;
         mLength = length;
@@ -66,9 +86,33 @@
     }
     
     /**
-     * Returns the total number of bytes of this asset entry's data.
+     * Returns the total number of bytes of this asset entry's data.  May be
+     * {@link #UNKNOWN_LENGTH} if the asset extends to the end of the file.
+     * If the AssetFileDescriptor was constructed with {@link #UNKNOWN_LENGTH},
+     * this will use {@link ParcelFileDescriptor#getStatSize()
+     * ParcelFileDescriptor.getStatSize()} to find the total size of the file,
+     * returning that number if found or {@link #UNKNOWN_LENGTH} if it could
+     * not be determined.
+     * 
+     * @see #getDeclaredLength()
      */
     public long getLength() {
+        if (mLength >= 0) {
+            return mLength;
+        }
+        long len = mFd.getStatSize();
+        return len >= 0 ? len : UNKNOWN_LENGTH;
+    }
+    
+    /**
+     * Return the actual number of bytes that were declared when the
+     * AssetFileDescriptor was constructed.  Will be
+     * {@link #UNKNOWN_LENGTH} if the length was not declared, meaning data
+     * should be read to the end of the file.
+     * 
+     * @see #getDeclaredLength()
+     */
+    public long getDeclaredLength() {
         return mLength;
     }
     
@@ -78,4 +122,227 @@
     public void close() throws IOException {
         mFd.close();
     }
+    
+    /**
+     * Create and return a new auto-close input stream for this asset.  This
+     * will either return a full asset {@link AutoCloseInputStream}, or
+     * an underlying {@link ParcelFileDescriptor.AutoCloseInputStream
+     * ParcelFileDescriptor.AutoCloseInputStream} depending on whether the
+     * the object represents a complete file or sub-section of a file.  You
+     * should only call this once for a particular asset.
+     */
+    public FileInputStream createInputStream() throws IOException {
+        if (mLength < 0) {
+            return new ParcelFileDescriptor.AutoCloseInputStream(mFd);
+        }
+        return new AutoCloseInputStream(this);
+    }
+    
+    /**
+     * Create and return a new auto-close output stream for this asset.  This
+     * will either return a full asset {@link AutoCloseOutputStream}, or
+     * an underlying {@link ParcelFileDescriptor.AutoCloseOutputStream
+     * ParcelFileDescriptor.AutoCloseOutputStream} depending on whether the
+     * the object represents a complete file or sub-section of a file.  You
+     * should only call this once for a particular asset.
+     */
+    public FileOutputStream createOutputStream() throws IOException {
+        if (mLength < 0) {
+            return new ParcelFileDescriptor.AutoCloseOutputStream(mFd);
+        }
+        return new AutoCloseOutputStream(this);
+    }
+    
+    @Override
+    public String toString() {
+        return "{AssetFileDescriptor: " + mFd
+                + " start=" + mStartOffset + " len=" + mLength + "}";
+    }
+    
+    /**
+     * An InputStream you can create on a ParcelFileDescriptor, which will
+     * take care of calling {@link ParcelFileDescriptor#close
+     * ParcelFileDescritor.close()} for you when the stream is closed.
+     */
+    public static class AutoCloseInputStream
+            extends ParcelFileDescriptor.AutoCloseInputStream {
+        private long mRemaining;
+        
+        public AutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
+            super(fd.getParcelFileDescriptor());
+            super.skip(fd.getStartOffset());
+            mRemaining = (int)fd.getLength();
+        }
+
+        @Override
+        public int available() throws IOException {
+            return mRemaining >= 0
+                    ? (mRemaining < 0x7fffffff ? (int)mRemaining : 0x7fffffff)
+                    : super.available();
+        }
+
+        @Override
+        public int read() throws IOException {
+            if (mRemaining >= 0) {
+                if (mRemaining == 0) return -1;
+                int res = super.read();
+                if (res >= 0) mRemaining--;
+                return res;
+            }
+            
+            return super.read();
+        }
+
+        @Override
+        public int read(byte[] buffer, int offset, int count) throws IOException {
+            if (mRemaining >= 0) {
+                if (mRemaining == 0) return -1;
+                if (count > mRemaining) count = (int)mRemaining;
+                int res = super.read(buffer, offset, count);
+                if (res >= 0) mRemaining -= res;
+                return res;
+            }
+            
+            return super.read(buffer, offset, count);
+        }
+
+        @Override
+        public int read(byte[] buffer) throws IOException {
+            if (mRemaining >= 0) {
+                if (mRemaining == 0) return -1;
+                int count = buffer.length;
+                if (count > mRemaining) count = (int)mRemaining;
+                int res = super.read(buffer, 0, count);
+                if (res >= 0) mRemaining -= res;
+                return res;
+            }
+            
+            return super.read(buffer);
+        }
+
+        @Override
+        public long skip(long count) throws IOException {
+            if (mRemaining >= 0) {
+                if (mRemaining == 0) return -1;
+                if (count > mRemaining) count = mRemaining;
+                long res = super.skip(count);
+                if (res >= 0) mRemaining -= res;
+                return res;
+            }
+            
+            // TODO Auto-generated method stub
+            return super.skip(count);
+        }
+
+        @Override
+        public void mark(int readlimit) {
+            if (mRemaining >= 0) {
+                // Not supported.
+                return;
+            }
+            super.mark(readlimit);
+        }
+
+        @Override
+        public boolean markSupported() {
+            if (mRemaining >= 0) {
+                return false;
+            }
+            return super.markSupported();
+        }
+
+        @Override
+        public synchronized void reset() throws IOException {
+            if (mRemaining >= 0) {
+                // Not supported.
+                return;
+            }
+            super.reset();
+        }
+    }
+    
+    /**
+     * An OutputStream you can create on a ParcelFileDescriptor, which will
+     * take care of calling {@link ParcelFileDescriptor#close
+     * ParcelFileDescritor.close()} for you when the stream is closed.
+     */
+    public static class AutoCloseOutputStream
+            extends ParcelFileDescriptor.AutoCloseOutputStream {
+        private long mRemaining;
+        
+        public AutoCloseOutputStream(AssetFileDescriptor fd) throws IOException {
+            super(fd.getParcelFileDescriptor());
+            if (fd.getParcelFileDescriptor().seekTo(fd.getStartOffset()) < 0) {
+                throw new IOException("Unable to seek");
+            }
+            mRemaining = (int)fd.getLength();
+        }
+
+        @Override
+        public void write(byte[] buffer, int offset, int count) throws IOException {
+            if (mRemaining >= 0) {
+                if (mRemaining == 0) return;
+                if (count > mRemaining) count = (int)mRemaining;
+                super.write(buffer, offset, count);
+                mRemaining -= count;
+                return;
+            }
+            
+            super.write(buffer, offset, count);
+        }
+
+        @Override
+        public void write(byte[] buffer) throws IOException {
+            if (mRemaining >= 0) {
+                if (mRemaining == 0) return;
+                int count = buffer.length;
+                if (count > mRemaining) count = (int)mRemaining;
+                super.write(buffer);
+                mRemaining -= count;
+                return;
+            }
+            
+            super.write(buffer);
+        }
+
+        @Override
+        public void write(int oneByte) throws IOException {
+            if (mRemaining >= 0) {
+                if (mRemaining == 0) return;
+                super.write(oneByte);
+                mRemaining--;
+                return;
+            }
+            
+            super.write(oneByte);
+        }
+    }
+    
+    
+    /* Parcelable interface */
+    public int describeContents() {
+        return mFd.describeContents();
+    }
+
+    public void writeToParcel(Parcel out, int flags) {
+        mFd.writeToParcel(out, flags);
+        out.writeLong(mStartOffset);
+        out.writeLong(mLength);
+    }
+
+    AssetFileDescriptor(Parcel src) {
+        mFd = ParcelFileDescriptor.CREATOR.createFromParcel(src);
+        mStartOffset = src.readLong();
+        mLength = src.readLong();
+    }
+    
+    public static final Parcelable.Creator<AssetFileDescriptor> CREATOR
+            = new Parcelable.Creator<AssetFileDescriptor>() {
+        public AssetFileDescriptor createFromParcel(Parcel in) {
+            return new AssetFileDescriptor(in);
+        }
+        public AssetFileDescriptor[] newArray(int size) {
+            return new AssetFileDescriptor[size];
+        }
+    };
 }
diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java
index 17cb687..0f3f270 100644
--- a/core/java/android/content/res/ColorStateList.java
+++ b/core/java/android/content/res/ColorStateList.java
@@ -16,8 +16,6 @@
 
 package android.content.res;
 
-import com.google.android.collect.Lists;
-
 import com.android.internal.util.ArrayUtils;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -113,7 +111,8 @@
      * Create a ColorStateList from an XML document, given a set of {@link Resources}.
      */
     public static ColorStateList createFromXml(Resources r, XmlPullParser parser)
-    throws XmlPullParserException, IOException {
+            throws XmlPullParserException, IOException {
+
         AttributeSet attrs = Xml.asAttributeSet(parser);
 
         int type;
@@ -125,19 +124,16 @@
             throw new XmlPullParserException("No start tag found");
         }
 
-        final ColorStateList colorStateList = createFromXmlInner(r, parser, attrs);
-
-        return colorStateList;
+        return createFromXmlInner(r, parser, attrs);
     }
 
     /* Create from inside an XML document.  Called on a parser positioned at
      * a tag in an XML document, tries to create a ColorStateList from that tag.
      * Returns null if the tag is not a valid ColorStateList.
      */
-    private static ColorStateList createFromXmlInner(Resources r,
-                                                     XmlPullParser parser,
-                                                     AttributeSet attrs)
-            throws XmlPullParserException, IOException {
+    private static ColorStateList createFromXmlInner(Resources r, XmlPullParser parser,
+            AttributeSet attrs) throws XmlPullParserException, IOException {
+
         ColorStateList colorStateList;
 
         final String name = parser.getName();
@@ -146,8 +142,7 @@
             colorStateList = new ColorStateList();
         } else {
             throw new XmlPullParserException(
-                parser.getPositionDescription() + ": invalid drawable tag "
-                + name);
+                parser.getPositionDescription() + ": invalid drawable tag " + name);
         }
 
         colorStateList.inflate(r, parser, attrs);
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 5a0daea..1a963f6 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -46,6 +46,7 @@
     static final String TAG = "Resources";
     private static final boolean DEBUG_LOAD = false;
     private static final boolean DEBUG_CONFIG = false;
+    private static final boolean TRACE_FOR_PRELOAD = false;
 
     private static final int sSdkVersion = SystemProperties.getInt(
             "ro.build.version.sdk", 0);
@@ -57,6 +58,8 @@
     // single-threaded, and after that these are immutable.
     private static final SparseArray<Drawable.ConstantState> mPreloadedDrawables
             = new SparseArray<Drawable.ConstantState>();
+    private static final SparseArray<ColorStateList> mPreloadedColorStateLists
+            = new SparseArray<ColorStateList>();
     private static boolean mPreloaded;
 
     /*package*/ final TypedValue mTmpValue = new TypedValue();
@@ -78,7 +81,7 @@
     private final Configuration mConfiguration = new Configuration();
     /*package*/ final DisplayMetrics mMetrics = new DisplayMetrics();
     PluralRules mPluralRule;
-    
+
     /**
      * This exception is thrown by the resource APIs when a requested resource
      * can not be found.
@@ -90,7 +93,7 @@
         public NotFoundException(String name) {
             super(name);
         }
-    };
+    }
 
     /**
      * Create a new Resources object on top of an existing set of assets in an
@@ -1229,7 +1232,9 @@
                 width = mMetrics.widthPixels;
                 height = mMetrics.heightPixels;
             } else {
+                //noinspection SuspiciousNameCombination
                 width = mMetrics.heightPixels;
+                //noinspection SuspiciousNameCombination
                 height = mMetrics.widthPixels;
             }
             int keyboardHidden = mConfiguration.keyboardHidden;
@@ -1342,6 +1347,7 @@
         try {
             return Integer.parseInt(name);
         } catch (Exception e) {
+            // Ignore
         }
         return mAssets.getResourceIdentifier(name, defType, defPackage);
     }
@@ -1575,21 +1581,18 @@
     
     /*package*/ Drawable loadDrawable(TypedValue value, int id)
             throws NotFoundException {
-        if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
-            && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
-            // Should we be caching these?  If we use constant colors much
-            // at all, most likely...
-            //System.out.println("Creating drawable for color: #" +
-            //                   Integer.toHexString(value.data));
-            Drawable dr = new ColorDrawable(value.data);
-            dr.setChangingConfigurations(value.changingConfigurations);
-            return dr;
+
+        if (TRACE_FOR_PRELOAD) {
+            // Log only framework resources
+            if ((id >>> 24) == 0x1) {
+                final String name = getResourceName(id);
+                if (name != null) android.util.Log.d("PreloadDrawable", name);
+            }
         }
 
-        final int key = (value.assetCookie<<24)|value.data;
+        final int key = (value.assetCookie << 24) | value.data;
         Drawable dr = getCachedDrawable(key);
-        //System.out.println("Cached drawable @ #" +
-        //                   Integer.toHexString(key.intValue()) + ": " + dr);
+
         if (dr != null) {
             return dr;
         }
@@ -1597,46 +1600,52 @@
         Drawable.ConstantState cs = mPreloadedDrawables.get(key);
         if (cs != null) {
             dr = cs.newDrawable();
-            
         } else {
-            if (value.string == null) {
-                throw new NotFoundException(
-                        "Resource is not a Drawable (color or path): " + value);
+            if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT &&
+                    value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+                dr = new ColorDrawable(value.data);
             }
-            
-            String file = value.string.toString();
-    
-            if (DEBUG_LOAD) Log.v(TAG, "Loading drawable for cookie "
-                    + value.assetCookie + ": " + file);
-            
-            if (file.endsWith(".xml")) {
-                try {
-                    XmlResourceParser rp = loadXmlResourceParser(
-                            file, id, value.assetCookie, "drawable"); 
-                    dr = Drawable.createFromXml(this, rp);
-                    rp.close();
-                } catch (Exception e) {
-                    NotFoundException rnf = new NotFoundException(
-                        "File " + file + " from drawable resource ID #0x"
-                        + Integer.toHexString(id));
-                    rnf.initCause(e);
-                    throw rnf;
+
+            if (dr == null) {
+                if (value.string == null) {
+                    throw new NotFoundException(
+                            "Resource is not a Drawable (color or path): " + value);
                 }
-    
-            } else {
-                try {
-                    InputStream is = mAssets.openNonAsset(
-                            value.assetCookie, file, AssetManager.ACCESS_BUFFER);
-    //                System.out.println("Opened file " + file + ": " + is);
-                    dr = Drawable.createFromResourceStream(this, value, is, file);
-                    is.close();
-    //                System.out.println("Created stream: " + dr);
-                } catch (Exception e) {
-                    NotFoundException rnf = new NotFoundException(
-                        "File " + file + " from drawable resource ID #0x"
-                        + Integer.toHexString(id));
-                    rnf.initCause(e);
-                    throw rnf;
+
+                String file = value.string.toString();
+
+                if (DEBUG_LOAD) Log.v(TAG, "Loading drawable for cookie "
+                        + value.assetCookie + ": " + file);
+
+                if (file.endsWith(".xml")) {
+                    try {
+                        XmlResourceParser rp = loadXmlResourceParser(
+                                file, id, value.assetCookie, "drawable");
+                        dr = Drawable.createFromXml(this, rp);
+                        rp.close();
+                    } catch (Exception e) {
+                        NotFoundException rnf = new NotFoundException(
+                            "File " + file + " from drawable resource ID #0x"
+                            + Integer.toHexString(id));
+                        rnf.initCause(e);
+                        throw rnf;
+                    }
+
+                } else {
+                    try {
+                        InputStream is = mAssets.openNonAsset(
+                                value.assetCookie, file, AssetManager.ACCESS_BUFFER);
+        //                System.out.println("Opened file " + file + ": " + is);
+                        dr = Drawable.createFromResourceStream(this, value, is, file);
+                        is.close();
+        //                System.out.println("Created stream: " + dr);
+                    } catch (Exception e) {
+                        NotFoundException rnf = new NotFoundException(
+                            "File " + file + " from drawable resource ID #0x"
+                            + Integer.toHexString(id));
+                        rnf.initCause(e);
+                        throw rnf;
+                    }
                 }
             }
         }
@@ -1647,13 +1656,13 @@
             if (cs != null) {
                 if (mPreloading) {
                     mPreloadedDrawables.put(key, cs);
-                }
-                synchronized (mTmpValue) {
-                    //Log.i(TAG, "Saving cached drawable @ #" +
-                    //        Integer.toHexString(key.intValue())
-                    //        + " in " + this + ": " + cs);
-                    mDrawableCache.put(
-                        key, new WeakReference<Drawable.ConstantState>(cs));
+                } else {
+                    synchronized (mTmpValue) {
+                        //Log.i(TAG, "Saving cached drawable @ #" +
+                        //        Integer.toHexString(key.intValue())
+                        //        + " in " + this + ": " + cs);
+                        mDrawableCache.put(key, new WeakReference<Drawable.ConstantState>(cs));
+                    }
                 }
             }
         }
@@ -1661,7 +1670,7 @@
         return dr;
     }
 
-    private final Drawable getCachedDrawable(int key) {
+    private Drawable getCachedDrawable(int key) {
         synchronized (mTmpValue) {
             WeakReference<Drawable.ConstantState> wr = mDrawableCache.get(key);
             if (wr != null) {   // we have the key
@@ -1682,13 +1691,40 @@
 
     /*package*/ ColorStateList loadColorStateList(TypedValue value, int id)
             throws NotFoundException {
-        if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
-            && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
-            return ColorStateList.valueOf(value.data);
+        if (TRACE_FOR_PRELOAD) {
+            // Log only framework resources
+            if ((id >>> 24) == 0x1) {
+                final String name = getResourceName(id);
+                if (name != null) android.util.Log.d("PreloadColorStateList", name);
+            }
         }
 
-        final int key = (value.assetCookie<<24)|value.data;
-        ColorStateList csl = getCachedColorStateList(key);
+        final int key = (value.assetCookie << 24) | value.data;
+
+        ColorStateList csl;
+
+        if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT &&
+                value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+
+            csl = mPreloadedColorStateLists.get(key);
+            if (csl != null) {
+                return csl;
+            }
+
+            csl = ColorStateList.valueOf(value.data);
+            if (mPreloading) {
+                mPreloadedColorStateLists.put(key, csl);
+            }
+
+            return csl;
+        }
+
+        csl = getCachedColorStateList(key);
+        if (csl != null) {
+            return csl;
+        }
+
+        csl = mPreloadedColorStateLists.get(key);
         if (csl != null) {
             return csl;
         }
@@ -1720,12 +1756,16 @@
         }
 
         if (csl != null) {
-            synchronized (mTmpValue) {
-                //Log.i(TAG, "Saving cached color state list @ #" +
-                //        Integer.toHexString(key.intValue())
-                //        + " in " + this + ": " + csl);
-                mColorStateListCache.put(
-                    key, new WeakReference<ColorStateList>(csl));
+            if (mPreloading) {
+                mPreloadedColorStateLists.put(key, csl);
+            } else {
+                synchronized (mTmpValue) {
+                    //Log.i(TAG, "Saving cached color state list @ #" +
+                    //        Integer.toHexString(key.intValue())
+                    //        + " in " + this + ": " + csl);
+                    mColorStateListCache.put(
+                        key, new WeakReference<ColorStateList>(csl));
+                }
             }
         }
 
diff --git a/core/java/android/content/res/StringBlock.java b/core/java/android/content/res/StringBlock.java
index 3df7708..e684cb8 100644
--- a/core/java/android/content/res/StringBlock.java
+++ b/core/java/android/content/res/StringBlock.java
@@ -141,6 +141,8 @@
             int type = style[i];
             if (localLOGV) Log.v(TAG, "Applying style span id=" + type
                     + ", start=" + style[i+1] + ", end=" + style[i+2]);
+
+
             if (type == ids.boldId) {
                 buffer.setSpan(new StyleSpan(Typeface.BOLD),
                                style[i+1], style[i+2]+1,
@@ -178,9 +180,8 @@
                                style[i+1], style[i+2]+1,
                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
             } else if (type == ids.listItemId) {
-                buffer.setSpan(new BulletSpan(10),
-                               style[i+1], style[i+2]+1,
-                               Spannable.SPAN_PARAGRAPH);
+                addParagraphSpan(buffer, new BulletSpan(10),
+                                style[i+1], style[i+2]+1);
             } else if (type == ids.marqueeId) {
                 buffer.setSpan(TextUtils.TruncateAt.MARQUEE,
                                style[i+1], style[i+2]+1,
@@ -194,9 +195,8 @@
                     sub = subtag(tag, ";height=");
                     if (sub != null) {
                         int size = Integer.parseInt(sub);
-                        buffer.setSpan(new Height(size),
-                                       style[i+1], style[i+2]+1,
-                                       Spannable.SPAN_PARAGRAPH);
+                        addParagraphSpan(buffer, new Height(size),
+                                       style[i+1], style[i+2]+1);
                     }
 
                     sub = subtag(tag, ";size=");
@@ -231,6 +231,28 @@
                                        style[i+1], style[i+2]+1,
                                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                     }
+                } else if (tag.startsWith("annotation;")) {
+                    int len = tag.length();
+                    int next;
+
+                    for (int t = tag.indexOf(';'); t < len; t = next) {
+                        int eq = tag.indexOf('=', t);
+                        if (eq < 0) {
+                            break;
+                        }
+
+                        next = tag.indexOf(';', eq);
+                        if (next < 0) {
+                            next = len;
+                        }
+
+                        String key = tag.substring(t + 1, eq);
+                        String value = tag.substring(eq + 1, next);
+
+                        buffer.setSpan(new Annotation(key, value),
+                                       style[i+1], style[i+2]+1,
+                                       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+                    }
                 }
             }
 
@@ -239,6 +261,34 @@
         return new SpannedString(buffer);
     }
 
+    /**
+     * If a translator has messed up the edges of paragraph-level markup,
+     * fix it to actually cover the entire paragraph that it is attached to
+     * instead of just whatever range they put it on.
+     */
+    private static void addParagraphSpan(Spannable buffer, Object what,
+                                         int start, int end) {
+        int len = buffer.length();
+
+        if (start != 0 && start != len && buffer.charAt(start - 1) != '\n') {
+            for (start--; start > 0; start--) {
+                if (buffer.charAt(start - 1) == '\n') {
+                    break;
+                }
+            }
+        }
+
+        if (end != 0 && end != len && buffer.charAt(end - 1) != '\n') {
+            for (end++; end < len; end++) {
+                if (buffer.charAt(end - 1) == '\n') {
+                    break;
+                }
+            }
+        }
+
+        buffer.setSpan(what, start, end, Spannable.SPAN_PARAGRAPH);
+    }
+
     private static String subtag(String full, String attribute) {
         int start = full.indexOf(attribute);
         if (start < 0) {
diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java
index 82a57dd..3a32c03 100644
--- a/core/java/android/content/res/TypedArray.java
+++ b/core/java/android/content/res/TypedArray.java
@@ -438,6 +438,34 @@
         throw new RuntimeException(getPositionDescription()
                 + ": You must supply a " + name + " attribute.");
     }
+    
+    /**
+     * Special version of {@link #getDimensionPixelSize} for retrieving
+     * {@link android.view.ViewGroup}'s layout_width and layout_height
+     * attributes.  This is only here for performance reasons; applications
+     * should use {@link #getDimensionPixelSize}.
+     * 
+     * @param index Index of the attribute to retrieve.
+     * @param defValue The default value to return if this attribute is not
+     * default or contains the wrong type of data.
+     * 
+     * @return Attribute dimension value multiplied by the appropriate 
+     * metric and truncated to integer pixels.
+     */
+    public int getLayoutDimension(int index, int defValue) {
+        index *= AssetManager.STYLE_NUM_ENTRIES;
+        final int[] data = mData;
+        final int type = data[index+AssetManager.STYLE_TYPE];
+        if (type >= TypedValue.TYPE_FIRST_INT
+                && type <= TypedValue.TYPE_LAST_INT) {
+            return data[index+AssetManager.STYLE_DATA];
+        } else if (type == TypedValue.TYPE_DIMENSION) {
+            return TypedValue.complexToDimensionPixelSize(
+                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
+        }
+
+        return defValue;
+    }
 
     /**
      * Retrieve a fractional unit attribute at <var>index</var>.
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 87bb277..2af080a 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -778,9 +778,9 @@
     }
 
     /**
-     * Returns the maximum size the database may grow to.
+     * Returns the current database page size, in bytes.
      *
-     * @return the new maximum database size
+     * @return the database page size, in bytes
      */
     public long getPageSize() {
         SQLiteStatement prog = null;
diff --git a/core/java/android/database/sqlite/SQLiteStatement.java b/core/java/android/database/sqlite/SQLiteStatement.java
index d169259..5889ad9 100644
--- a/core/java/android/database/sqlite/SQLiteStatement.java
+++ b/core/java/android/database/sqlite/SQLiteStatement.java
@@ -17,6 +17,7 @@
 package android.database.sqlite;
 
 import android.os.SystemClock;
+import android.util.Log;
 
 /**
  * A pre-compiled statement against a {@link SQLiteDatabase} that can be reused.
@@ -26,6 +27,10 @@
  */
 public class SQLiteStatement extends SQLiteProgram
 {
+    private static final String TAG = "SQLiteStatement";
+
+    private final String mSql;
+
     /**
      * Don't use SQLiteStatement constructor directly, please use
      * {@link SQLiteDatabase#compileStatement(String)}
@@ -34,6 +39,11 @@
      */
     /* package */ SQLiteStatement(SQLiteDatabase db, String sql) {
         super(db, sql);
+        if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
+            mSql = sql;
+        } else {
+            mSql = null;
+        }
     }
 
     /**
@@ -50,6 +60,9 @@
 
         acquireReference();
         try {
+            if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
+                Log.v(TAG, "execute() for [" + mSql + "]");
+            }
             native_execute();
             if (logStats) {
                 mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
@@ -77,6 +90,9 @@
 
         acquireReference();
         try {
+            if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
+                Log.v(TAG, "executeInsert() for [" + mSql + "]");
+            }
             native_execute();
             if (logStats) {
                 mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
@@ -103,6 +119,9 @@
 
         acquireReference();
         try {
+            if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
+                Log.v(TAG, "simpleQueryForLong() for [" + mSql + "]");
+            }
             long retValue = native_1x1_long();
             if (logStats) {
                 mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
@@ -129,6 +148,9 @@
 
         acquireReference();
         try {
+            if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
+                Log.v(TAG, "simpleQueryForString() for [" + mSql + "]");
+            }
             String retValue = native_1x1_string();
             if (logStats) {
                 mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
diff --git a/core/java/android/gadget/GadgetHost.java b/core/java/android/gadget/GadgetHost.java
index 31aed32..3d88b58 100644
--- a/core/java/android/gadget/GadgetHost.java
+++ b/core/java/android/gadget/GadgetHost.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -62,7 +63,11 @@
         }
     }
 
-    Handler mHandler = new Handler() {
+    class UpdateHandler extends Handler {
+        public UpdateHandler(Looper looper) {
+            super(looper);
+        }
+        
         public void handleMessage(Message msg) {
             switch (msg.what) {
                 case HANDLE_UPDATE: {
@@ -75,7 +80,9 @@
                 }
             }
         }
-    };
+    }
+    
+    Handler mHandler;
 
     int mHostId;
     Callbacks mCallbacks = new Callbacks();
@@ -84,6 +91,7 @@
     public GadgetHost(Context context, int hostId) {
         mContext = context;
         mHostId = hostId;
+        mHandler = new UpdateHandler(context.getMainLooper());
         synchronized (sServiceLock) {
             if (sService == null) {
                 IBinder b = ServiceManager.getService(Context.GADGET_SERVICE);
diff --git a/core/java/android/gadget/GadgetHostView.java b/core/java/android/gadget/GadgetHostView.java
index a985bd4..5cbd988 100644
--- a/core/java/android/gadget/GadgetHostView.java
+++ b/core/java/android/gadget/GadgetHostView.java
@@ -18,7 +18,13 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.Paint;
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemClock;
 import android.util.Config;
 import android.util.Log;
 import android.view.Gravity;
@@ -29,16 +35,23 @@
 import android.widget.FrameLayout;
 import android.widget.RemoteViews;
 import android.widget.TextView;
-import android.widget.ViewAnimator;
 
 /**
  * Provides the glue to show gadget views. This class offers automatic animation
  * between updates, and will try recycling old views for each incoming
  * {@link RemoteViews}.
  */
-public class GadgetHostView extends ViewAnimator implements Animation.AnimationListener {
+public class GadgetHostView extends FrameLayout {
     static final String TAG = "GadgetHostView";
-    static final boolean LOGD = Config.LOGD || true;
+    static final boolean LOGD = false;
+    static final boolean CROSSFADE = false;
+
+    static final int VIEW_MODE_NOINIT = 0;
+    static final int VIEW_MODE_CONTENT = 1;
+    static final int VIEW_MODE_ERROR = 2;
+    static final int VIEW_MODE_DEFAULT = 3;
+
+    static final int FADE_DURATION = 1000;
 
     // When we're inflating the initialLayout for a gadget, we only allow
     // views that are allowed in RemoteViews.
@@ -47,28 +60,17 @@
             return clazz.isAnnotationPresent(RemoteViews.RemoteView.class);
         }
     };
-    
-    Context mLocalContext;
+
+    Context mContext;
     
     int mGadgetId;
     GadgetProviderInfo mInfo;
-    
-    View mActiveView = null;
-    View mStaleView = null;
-    
-    int mActiveLayoutId = -1;
-    int mStaleLayoutId = -1;
-    
-    /**
-     * Last set of {@link RemoteViews} applied to {@link #mActiveView}
-     */
-    RemoteViews mActiveActions = null;
-    
-    /**
-     * Flag indicating that {@link #mActiveActions} has been applied to
-     * {@link #mStaleView}, meaning it's readyto recycle.
-     */
-    boolean mStalePrepared = false;
+    View mView;
+    int mViewMode = VIEW_MODE_NOINIT;
+    int mLayoutId = -1;
+    long mFadeStartTime = -1;
+    Bitmap mOld;
+    Paint mOldPaint = new Paint();
     
     /**
      * Create a host view.  Uses default fade animations.
@@ -86,27 +88,13 @@
      */
     public GadgetHostView(Context context, int animationIn, int animationOut) {
         super(context);
-        mLocalContext = context;
-        
-        // Prepare our default transition animations
-        setAnimateFirstView(true);
-        setInAnimation(context, animationIn);
-        setOutAnimation(context, animationOut);
-
-        // Watch for animation events to prepare recycling
-        Animation inAnimation = getInAnimation();
-        if (inAnimation != null) {
-            inAnimation.setAnimationListener(this);
-        }
+        mContext = context;
     }
     
     /**
      * Set the gadget that will be displayed by this view.
      */
     public void setGadget(int gadgetId, GadgetProviderInfo info) {
-        if (mInfo != null) {
-            // TODO: remove the old view, or whatever
-        }
         mGadgetId = gadgetId;
         mInfo = info;
     }
@@ -119,92 +107,141 @@
         return mInfo;
     }
 
-    public void onAnimationEnd(Animation animation) {
-        // When our transition animation finishes, we should try bringing our
-        // newly-stale view up to the current view.
-        if (mActiveActions != null &&
-                mStaleLayoutId == mActiveActions.getLayoutId()) {
-            if (LOGD) Log.d(TAG, "after animation, layoutId matched so we're recycling old view");
-            mActiveActions.reapply(mLocalContext, mStaleView);
-            mStalePrepared = true;
-        }
-    }
-
-    public void onAnimationRepeat(Animation animation) {
-    }
-
-    public void onAnimationStart(Animation animation) {
-    }
-
     /**
      * Process a set of {@link RemoteViews} coming in as an update from the
      * gadget provider. Will animate into these new views as needed.
      */
     public void updateGadget(RemoteViews remoteViews) {
-        if (LOGD) Log.d(TAG, "updateGadget called");
+        if (LOGD) Log.d(TAG, "updateGadget called mOld=" + mOld);
         
         boolean recycled = false;
-        View newContent = null;
+        View content = null;
         Exception exception = null;
         
+        // Capture the old view into a bitmap so we can do the crossfade.
+        if (CROSSFADE) {
+            if (mFadeStartTime < 0) {
+                if (mView != null) {
+                    final int width = mView.getWidth();
+                    final int height = mView.getHeight();
+                    try {
+                        mOld = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+                    } catch (OutOfMemoryError e) {
+                        // we just won't do the fade
+                        mOld = null;
+                    }
+                    if (mOld != null) {
+                        //mView.drawIntoBitmap(mOld);
+                    }
+                }
+            }
+        }
+        
         if (remoteViews == null) {
-            newContent = getDefaultView();
-        }
-        
-        // If our stale view has been prepared to match active, and the new
-        // layout matches, try recycling it
-        if (newContent == null && mStalePrepared &&
-                remoteViews.getLayoutId() == mStaleLayoutId) {
-            try {
-                remoteViews.reapply(mLocalContext, mStaleView);
-                newContent = mStaleView;
-                recycled = true;
-                if (LOGD) Log.d(TAG, "was able to recycled existing layout");
-            } catch (RuntimeException e) {
-                exception = e;
+            if (mViewMode == VIEW_MODE_DEFAULT) {
+                // We've already done this -- nothing to do.
+                return;
             }
-        }
-        
-        // Try normal RemoteView inflation
-        if (newContent == null) {
-            try {
-                newContent = remoteViews.apply(mLocalContext, this);
-                if (LOGD) Log.d(TAG, "had to inflate new layout");
-            } catch (RuntimeException e) {
-                exception = e;
+            content = getDefaultView();
+            mLayoutId = -1;
+            mViewMode = VIEW_MODE_DEFAULT;
+        } else {
+            int layoutId = remoteViews.getLayoutId();
+
+            // If our stale view has been prepared to match active, and the new
+            // layout matches, try recycling it
+            if (content == null && layoutId == mLayoutId) {
+                try {
+                    remoteViews.reapply(mContext, mView);
+                    content = mView;
+                    recycled = true;
+                    if (LOGD) Log.d(TAG, "was able to recycled existing layout");
+                } catch (RuntimeException e) {
+                    exception = e;
+                }
             }
+            
+            // Try normal RemoteView inflation
+            if (content == null) {
+                try {
+                    content = remoteViews.apply(mContext, this);
+                    if (LOGD) Log.d(TAG, "had to inflate new layout");
+                } catch (RuntimeException e) {
+                    exception = e;
+                }
+            }
+
+            mLayoutId = layoutId;
+            mViewMode = VIEW_MODE_CONTENT;
         }
         
-        if (exception != null && LOGD) {
-            Log.w(TAG, "Error inflating gadget " + getGadgetInfo(), exception);
-        }
-        
-        if (newContent == null) {
-            // TODO: Should we throw an exception here for the host activity to catch?
-            // Maybe we should show a generic error widget.
-            if (LOGD) Log.d(TAG, "updateGadget couldn't find any view, so inflating error");
-            newContent = getErrorView();
+        if (content == null) {
+            if (mViewMode == VIEW_MODE_ERROR) {
+                // We've already done this -- nothing to do.
+                return ;
+            }
+            Log.w(TAG, "updateGadget couldn't find any view, using error view", exception);
+            content = getErrorView();
+            mViewMode = VIEW_MODE_ERROR;
         }
         
         if (!recycled) {
-            prepareView(newContent);
-            addView(newContent);
+            prepareView(content);
+            addView(content);
         }
-        
-        showNext();
-        
-        if (!recycled) {
-            removeView(mStaleView);
+
+        if (mView != content) {
+            removeView(mView);
+            mView = content;
         }
-        
-        mStalePrepared = false;
-        mActiveActions = remoteViews;
-        
-        mStaleView = mActiveView;
-        mActiveView = newContent;
-        
-        mStaleLayoutId = mActiveLayoutId;
-        mActiveLayoutId = (remoteViews == null) ? -1 : remoteViews.getLayoutId();
+
+        if (CROSSFADE) {
+            if (mFadeStartTime < 0) {
+                // if there is already an animation in progress, don't do anything --
+                // the new view will pop in on top of the old one during the cross fade,
+                // and that looks okay.
+                mFadeStartTime = SystemClock.uptimeMillis();
+                invalidate();
+            }
+        }
+    }
+
+    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
+        if (CROSSFADE) {
+            int alpha;
+            int l = child.getLeft();
+            int t = child.getTop();
+            if (mFadeStartTime > 0) {
+                alpha = (int)(((drawingTime-mFadeStartTime)*255)/FADE_DURATION);
+                if (alpha > 255) {
+                    alpha = 255;
+                }
+                Log.d(TAG, "drawChild alpha=" + alpha + " l=" + l + " t=" + t
+                        + " w=" + child.getWidth());
+                if (alpha != 255 && mOld != null) {
+                    mOldPaint.setAlpha(255-alpha);
+                    //canvas.drawBitmap(mOld, l, t, mOldPaint);
+                }
+            } else {
+                alpha = 255;
+            }
+            int restoreTo = canvas.saveLayerAlpha(l, t, child.getWidth(), child.getHeight(), alpha,
+                    Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
+            boolean rv = super.drawChild(canvas, child, drawingTime);
+            canvas.restoreToCount(restoreTo);
+            if (alpha < 255) {
+                invalidate();
+            } else {
+                mFadeStartTime = -1;
+                if (mOld != null) {
+                    mOld.recycle();
+                    mOld = null;
+                }
+            }
+            return rv;
+        } else {
+            return super.drawChild(canvas, child, drawingTime);
+        }
     }
     
     /**
@@ -234,7 +271,7 @@
         
         try {
             if (mInfo != null) {
-                Context theirContext = mLocalContext.createPackageContext(
+                Context theirContext = mContext.createPackageContext(
                         mInfo.provider.getPackageName(), 0 /* no flags */);
                 LayoutInflater inflater = (LayoutInflater)
                         theirContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -266,9 +303,9 @@
      * Inflate and return a view that represents an error state.
      */
     protected View getErrorView() {
-        TextView tv = new TextView(mLocalContext);
-        // TODO: move this error string and background color into resources
-        tv.setText("Error inflating gadget");
+        TextView tv = new TextView(mContext);
+        tv.setText(com.android.internal.R.string.gadget_host_error_inflating);
+        // TODO: get this color from somewhere.
         tv.setBackgroundColor(Color.argb(127, 0, 0, 0));
         return tv;
     }
diff --git a/core/java/android/gadget/GadgetManager.java b/core/java/android/gadget/GadgetManager.java
index a9a2c80..d2c4055 100644
--- a/core/java/android/gadget/GadgetManager.java
+++ b/core/java/android/gadget/GadgetManager.java
@@ -300,5 +300,21 @@
             throw new RuntimeException("system server dead?", e);
         }
     }
+
+    /**
+     * Get the list of gadgetIds that have been bound to the given gadget
+     * provider.
+     * 
+     * @param provider The {@link android.content.BroadcastReceiver} that is the
+     *            gadget provider to find gadgetIds for.
+     */
+    public int[] getGadgetIds(ComponentName provider) {
+        try {
+            return sService.getGadgetIds(provider);
+        }
+        catch (RemoteException e) {
+            throw new RuntimeException("system server dead?", e);
+        }
+    }
 }
 
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 40a5b47..106c920 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -48,7 +48,6 @@
     private static final int ERROR_CALLBACK = 5;
 
     private int mNativeContext; // accessed by native methods
-    private int mListenerContext;
     private EventHandler mEventHandler;
     private ShutterCallback mShutterCallback;
     private PictureCallback mRawImageCallback;
diff --git a/core/java/android/inputmethodservice/ExtractEditText.java b/core/java/android/inputmethodservice/ExtractEditText.java
index 52f8209..0295f69 100644
--- a/core/java/android/inputmethodservice/ExtractEditText.java
+++ b/core/java/android/inputmethodservice/ExtractEditText.java
@@ -98,6 +98,13 @@
     }
     
     /**
+     * Return true if the edit text is currently showing a scroll bar.
+     */
+    public boolean hasVerticalScrollBar() {
+        return computeVerticalScrollRange() > computeVerticalScrollExtent();
+    }
+    
+    /**
      * Pretend like the window this view is in always has focus, so its
      * highlight and cursor will be displayed.
      */
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 4be1fc7..1e2e2f3 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -26,7 +26,9 @@
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.os.SystemClock;
 import android.provider.Settings;
+import android.text.InputType;
 import android.text.Layout;
 import android.text.Spannable;
 import android.text.method.MovementMethod;
@@ -49,6 +51,7 @@
 import android.view.inputmethod.InputMethod;
 import android.view.inputmethod.InputMethodManager;
 import android.view.inputmethod.EditorInfo;
+import android.widget.Button;
 import android.widget.FrameLayout;
 
 import java.io.FileDescriptor;
@@ -241,6 +244,8 @@
     boolean mIsFullscreen;
     View mExtractView;
     ExtractEditText mExtractEditText;
+    ViewGroup mExtractAccessories;
+    Button mExtractAction;
     ExtractedText mExtractedText;
     int mExtractedToken;
     
@@ -271,6 +276,21 @@
         }
     };
 
+    final View.OnClickListener mActionClickListener = new View.OnClickListener() {
+        public void onClick(View v) {
+            final EditorInfo ei = getCurrentInputEditorInfo();
+            final InputConnection ic = getCurrentInputConnection();
+            if (ei != null && ic != null) {
+                if (ei.actionId != 0) {
+                    ic.performEditorAction(ei.actionId);
+                } else if ((ei.imeOptions&EditorInfo.IME_MASK_ACTION)
+                        != EditorInfo.IME_ACTION_NONE) {
+                    ic.performEditorAction(ei.imeOptions&EditorInfo.IME_MASK_ACTION);
+                }
+            }
+        }
+    };
+    
     /**
      * Concrete implementation of
      * {@link AbstractInputMethodService.AbstractInputMethodImpl} that provides
@@ -522,6 +542,8 @@
         mExtractFrame = (FrameLayout)mRootView.findViewById(android.R.id.extractArea);
         mExtractView = null;
         mExtractEditText = null;
+        mExtractAccessories = null;
+        mExtractAction = null;
         mFullscreenApplied = false;
         
         mCandidatesFrame = (FrameLayout)mRootView.findViewById(android.R.id.candidatesArea);
@@ -703,7 +725,7 @@
                         setExtractView(v);
                     }
                 }
-                startExtractingText();
+                startExtractingText(false);
             }
         }
         
@@ -907,9 +929,17 @@
             mExtractEditText = (ExtractEditText)view.findViewById(
                     com.android.internal.R.id.inputExtractEditText);
             mExtractEditText.setIME(this);
-            startExtractingText();
+            mExtractAction = (Button)view.findViewById(
+                    com.android.internal.R.id.inputExtractAction);
+            if (mExtractAction != null) {
+                mExtractAccessories = (ViewGroup)view.findViewById(
+                        com.android.internal.R.id.inputExtractAccessories);
+            }
+            startExtractingText(false);
         } else {
             mExtractEditText = null;
+            mExtractAccessories = null;
+            mExtractAction = null;
         }
     }
     
@@ -1166,7 +1196,7 @@
         }
         
         if (doShowInput) {
-            startExtractingText();
+            startExtractingText(false);
         }
         
         if (!wasVisible) {
@@ -1276,7 +1306,7 @@
                 if (DEBUG) Log.v(TAG, "CALL: onStartInputView");
                 mInputViewStarted = true;
                 onStartInputView(mInputEditorInfo, restarting);
-                startExtractingText();
+                startExtractingText(true);
             } else if (mCandidatesVisibility == View.VISIBLE) {
                 if (DEBUG) Log.v(TAG, "CALL: onStartCandidatesView");
                 mCandidatesViewStarted = true;
@@ -1453,6 +1483,25 @@
     static final int MOVEMENT_DOWN = -1;
     static final int MOVEMENT_UP = -2;
     
+    void reportExtractedMovement(int keyCode, int count) {
+        int dx = 0, dy = 0;
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+                dx = -count;
+                break;
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+                dx = count;
+                break;
+            case KeyEvent.KEYCODE_DPAD_UP:
+                dy = -count;
+                break;
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+                dy = count;
+                break;
+        }
+        onExtractedCursorMovement(dx, dy);       
+    }
+    
     boolean doMovementKey(int keyCode, KeyEvent event, int count) {
         final ExtractEditText eet = mExtractEditText;
         if (isFullscreenMode() && isInputViewShown() && eet != null) {
@@ -1467,6 +1516,7 @@
                 if (count == MOVEMENT_DOWN) {
                     if (movement.onKeyDown(eet,
                             (Spannable)eet.getText(), keyCode, event)) {
+                        reportExtractedMovement(keyCode, 1);
                         return true;
                     }
                 } else if (count == MOVEMENT_UP) {
@@ -1475,7 +1525,9 @@
                         return true;
                     }
                 } else {
-                    if (!movement.onKeyOther(eet, (Spannable)eet.getText(), event)) {
+                    if (movement.onKeyOther(eet, (Spannable)eet.getText(), event)) {
+                        reportExtractedMovement(keyCode, count);
+                    } else {
                         KeyEvent down = new KeyEvent(event, KeyEvent.ACTION_DOWN);
                         if (movement.onKeyDown(eet,
                                 (Spannable)eet.getText(), keyCode, down)) {
@@ -1488,6 +1540,7 @@
                                 movement.onKeyUp(eet,
                                         (Spannable)eet.getText(), keyCode, up);
                             }
+                            reportExtractedMovement(keyCode, count);
                         }
                     }
                 }
@@ -1507,6 +1560,97 @@
     }
     
     /**
+     * Send the given key event code (as defined by {@link KeyEvent}) to the
+     * current input connection is a key down + key up event pair.  The sent
+     * events have {@link KeyEvent#FLAG_SOFT_KEYBOARD KeyEvent.FLAG_SOFT_KEYBOARD}
+     * set, so that the recipient can identify them as coming from a software
+     * input method, and
+     * {@link KeyEvent#FLAG_KEEP_TOUCH_MODE KeyEvent.FLAG_KEEP_TOUCH_MODE}, so
+     * that they don't impact the current touch mode of the UI.
+     *
+     * @param keyEventCode The raw key code to send, as defined by
+     * {@link KeyEvent}.
+     */
+    public void sendDownUpKeyEvents(int keyEventCode) {
+        InputConnection ic = getCurrentInputConnection();
+        if (ic == null) return;
+        long eventTime = SystemClock.uptimeMillis();
+        ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,
+                KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,
+                KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
+        ic.sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime,
+                KeyEvent.ACTION_UP, keyEventCode, 0, 0, 0, 0,
+                KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
+    }
+    
+    /**
+     * Ask the input target to execute its default action via
+     * {@link InputConnection#performEditorAction
+     * InputConnection.performEditorAction()}.
+     * 
+     * @param fromEnterKey If true, this will be executed as if the user had
+     * pressed an enter key on the keyboard, that is it will <em>not</em>
+     * be done if the editor has set {@link EditorInfo#IME_FLAG_NO_ENTER_ACTION
+     * EditorInfo.IME_FLAG_NO_ENTER_ACTION}.  If false, the action will be
+     * sent regardless of how the editor has set that flag.
+     * 
+     * @return Returns a boolean indicating whether an action has been sent.
+     * If false, either the editor did not specify a default action or it
+     * does not want an action from the enter key.  If true, the action was
+     * sent (or there was no input connection at all).
+     */
+    public boolean sendDefaultEditorAction(boolean fromEnterKey) {
+        EditorInfo ei = getCurrentInputEditorInfo();
+        if (ei != null &&
+                (!fromEnterKey || (ei.imeOptions &
+                        EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0) &&
+                (ei.imeOptions & EditorInfo.IME_MASK_ACTION) !=
+                    EditorInfo.IME_ACTION_NONE) {
+            // If the enter key was pressed, and the editor has a default
+            // action associated with pressing enter, then send it that
+            // explicit action instead of the key event.
+            InputConnection ic = getCurrentInputConnection();
+            if (ic != null) {
+                ic.performEditorAction(ei.imeOptions&EditorInfo.IME_MASK_ACTION);
+            }
+            return true;
+        }
+        
+        return false;
+    }
+    
+    /**
+     * Send the given UTF-16 character to the current input connection.  Most
+     * characters will be delivered simply by calling
+     * {@link InputConnection#commitText InputConnection.commitText()} with
+     * the character; some, however, may be handled different.  In particular,
+     * the enter character ('\n') will either be delivered as an action code
+     * or a raw key event, as appropriate.
+     * 
+     * @param charCode The UTF-16 character code to send.
+     */
+    public void sendKeyChar(char charCode) {
+        switch (charCode) {
+            case '\n': // Apps may be listening to an enter key to perform an action
+                if (!sendDefaultEditorAction(true)) {
+                    sendDownUpKeyEvents(KeyEvent.KEYCODE_ENTER);
+                }
+                break;
+            default:
+                // Make sure that digits go through any text watcher on the client side.
+                if (charCode >= '0' && charCode <= '9') {
+                    sendDownUpKeyEvents(charCode - '0' + KeyEvent.KEYCODE_0);
+                } else {
+                    InputConnection ic = getCurrentInputConnection();
+                    if (ic != null) {
+                        ic.commitText(String.valueOf((char) charCode), 1);
+                    }
+                }
+                break;
+        }
+    }
+    
+    /**
      * This is called when the user has moved the cursor in the extracted
      * text view, when running in fullsreen mode.  The default implementation
      * performs the corresponding selection change on the underlying text
@@ -1522,11 +1666,36 @@
     /**
      * This is called when the user has clicked on the extracted text view,
      * when running in fullscreen mode.  The default implementation hides
-     * the candidates view when this happens.  Re-implement this to provide
-     * whatever behavior you want.
+     * the candidates view when this happens, but only if the extracted text
+     * editor has a vertical scroll bar because its text doesn't fit.
+     * Re-implement this to provide whatever behavior you want.
      */
     public void onExtractedTextClicked() {
-        setCandidatesViewShown(false);
+        if (mExtractEditText == null) {
+            return;
+        }
+        if (mExtractEditText.hasVerticalScrollBar()) {
+            setCandidatesViewShown(false);
+        }
+    }
+    
+    /**
+     * This is called when the user has performed a cursor movement in the
+     * extracted text view, when it is running in fullscreen mode.  The default
+     * implementation hides the candidates view when a vertical movement
+     * happens, but only if the extracted text editor has a vertical scroll bar
+     * because its text doesn't fit.
+     * Re-implement this to provide whatever behavior you want.
+     * @param dx The amount of cursor movement in the x dimension.
+     * @param dy The amount of cursor movement in the y dimension.
+     */
+    public void onExtractedCursorMovement(int dx, int dy) {
+        if (mExtractEditText == null || dy == 0) {
+            return;
+        }
+        if (mExtractEditText.hasVerticalScrollBar()) {
+            setCandidatesViewShown(false);
+        }
     }
     
     /**
@@ -1545,7 +1714,74 @@
         return true;
     }
     
-    void startExtractingText() {
+    /**
+     * Return text that can be used as a button label for the given
+     * {@link EditorInfo#imeOptions EditorInfo.imeOptions}.  Returns null
+     * if there is no action requested.  Note that there is no guarantee that
+     * the returned text will be relatively short, so you probably do not
+     * want to use it as text on a soft keyboard key label.
+     * 
+     * @param imeOptions The value from @link EditorInfo#imeOptions EditorInfo.imeOptions}.
+     * 
+     * @return Returns a label to use, or null if there is no action.
+     */
+    public CharSequence getTextForImeAction(int imeOptions) {
+        switch (imeOptions&EditorInfo.IME_MASK_ACTION) {
+            case EditorInfo.IME_ACTION_NONE:
+                return null;
+            case EditorInfo.IME_ACTION_GO:
+                return getText(com.android.internal.R.string.ime_action_go);
+            case EditorInfo.IME_ACTION_SEARCH:
+                return getText(com.android.internal.R.string.ime_action_search);
+            case EditorInfo.IME_ACTION_SEND:
+                return getText(com.android.internal.R.string.ime_action_send);
+            case EditorInfo.IME_ACTION_NEXT:
+                return getText(com.android.internal.R.string.ime_action_next);
+            default:
+                return getText(com.android.internal.R.string.ime_action_default);
+        }
+    }
+    
+    /**
+     * Called when it is time to update the actions available from a full-screen
+     * IME.  You do not need to deal with this if you are using the standard
+     * full screen extract UI.  If replacing it, you will need to re-implement
+     * this to put the action in your own UI and handle it.
+     */
+    public void onUpdateExtractingAccessories(EditorInfo ei) {
+        if (mExtractAccessories == null) {
+            return;
+        }
+        final boolean hasAction = ei.actionLabel != null || (
+                (ei.imeOptions&EditorInfo.IME_MASK_ACTION) != EditorInfo.IME_ACTION_NONE &&
+                (ei.imeOptions&EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0);
+        if (hasAction) {
+            mExtractAccessories.setVisibility(View.VISIBLE);
+            if (ei.actionLabel != null) {
+                mExtractAction.setText(ei.actionLabel);
+            } else {
+                mExtractAction.setText(getTextForImeAction(ei.imeOptions));
+            }
+            mExtractAction.setOnClickListener(mActionClickListener);
+        } else {
+            mExtractAccessories.setVisibility(View.GONE);
+            mExtractAction.setOnClickListener(null);
+        }
+    }
+    
+    /**
+     * This is called when, while currently displayed in extract mode, the
+     * current input target changes.  The default implementation will
+     * auto-hide the IME if the new target is not a full editor, since this
+     * can be an confusing experience for the user.
+     */
+    public void onExtractingInputChanged(EditorInfo ei) {
+        if (ei.inputType == InputType.TYPE_NULL) {
+            dismissSoftInput(InputMethodManager.HIDE_NOT_ALWAYS);
+        }
+    }
+    
+    void startExtractingText(boolean inputChanged) {
         final ExtractEditText eet = mExtractEditText;
         if (eet != null && getCurrentInputStarted()
                 && isFullscreenMode()) {
@@ -1557,9 +1793,13 @@
             req.hintMaxChars = 10000;
             mExtractedText = getCurrentInputConnection().getExtractedText(req,
                     InputConnection.GET_EXTRACTED_TEXT_MONITOR);
+            
+            final EditorInfo ei = getCurrentInputEditorInfo();
+            
             try {
                 eet.startInternalChanges();
-                int inputType = getCurrentInputEditorInfo().inputType;
+                onUpdateExtractingAccessories(ei);
+                int inputType = ei.inputType;
                 if ((inputType&EditorInfo.TYPE_MASK_CLASS)
                         == EditorInfo.TYPE_CLASS_TEXT) {
                     if ((inputType&EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE) != 0) {
@@ -1567,7 +1807,7 @@
                     }
                 }
                 eet.setInputType(inputType);
-                eet.setHint(mInputEditorInfo.hintText);
+                eet.setHint(ei.hintText);
                 if (mExtractedText != null) {
                     eet.setEnabled(true);
                     eet.setExtractedText(mExtractedText);
@@ -1578,6 +1818,10 @@
             } finally {
                 eet.finishInternalChanges();
             }
+            
+            if (inputChanged) {
+                onExtractingInputChanged(ei);
+            }
         }
     }
     
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index 886e688..c838779 100755
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -74,7 +74,6 @@
          * For keys that repeat, this is only called once.
          * @param primaryCode the unicode of the key being pressed. If the touch is not on a valid
          * key, the value will be zero.
-         * @hide Pending API Council approval
          */
         void onPress(int primaryCode);
         
@@ -82,7 +81,6 @@
          * Called when the user releases a key. This is sent after the {@link #onKey} is called.
          * For keys that repeat, this is only called once.
          * @param primaryCode the code of the key that was released
-         * @hide Pending API Council approval
          */
         void onRelease(int primaryCode);
 
@@ -99,6 +97,12 @@
         void onKey(int primaryCode, int[] keyCodes);
 
         /**
+         * Sends a sequence of characters to the listener.
+         * @param text the sequence of characters to be displayed.
+         */
+        void onText(CharSequence text);
+        
+        /**
          * Called when the user quickly moves the finger from right to left.
          */
         void swipeLeft();
@@ -394,6 +398,7 @@
         requestLayout();
         invalidate();
         computeProximityThreshold(keyboard);
+        mMiniKeyboardCache.clear(); // Not really necessary to do every time, but will free up views
     }
 
     /**
@@ -699,9 +704,7 @@
         if (index != NOT_A_KEY && index < mKeys.length) {
             final Key key = mKeys[index];
             if (key.text != null) {
-                for (int i = 0; i < key.text.length(); i++) {
-                    mKeyboardActionListener.onKey(key.text.charAt(i), key.codes);
-                }
+                mKeyboardActionListener.onText(key.text);
                 mKeyboardActionListener.onRelease(NOT_A_KEY);
             } else {
                 int code = key.codes[0];
@@ -792,7 +795,7 @@
             mPreviewText.setCompoundDrawables(null, null, null, null);
             mPreviewText.setText(getPreviewText(key));
             if (key.label.length() > 1 && key.codes.length < 2) {
-                mPreviewText.setTextSize(mLabelTextSize);
+                mPreviewText.setTextSize(mKeyTextSize);
                 mPreviewText.setTypeface(Typeface.DEFAULT_BOLD);
             } else {
                 mPreviewText.setTextSize(mPreviewTextSizeLarge);
@@ -896,6 +899,11 @@
                         dismissPopupKeyboard();
                     }
                     
+                    public void onText(CharSequence text) {
+                        mKeyboardActionListener.onText(text);
+                        dismissPopupKeyboard();
+                    }
+                    
                     public void swipeLeft() { }
                     public void swipeRight() { }
                     public void swipeUp() { }
@@ -1102,6 +1110,8 @@
         mHandler.removeMessages(MSG_SHOW_PREVIEW);
         
         dismissPopupKeyboard();
+        
+        mMiniKeyboardCache.clear();
     }
     
     @Override
diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java
index f816caa..ccef97e 100644
--- a/core/java/android/net/SSLCertificateSocketFactory.java
+++ b/core/java/android/net/SSLCertificateSocketFactory.java
@@ -16,39 +16,46 @@
 
 package android.net;
 
-import android.util.Log;
-import android.util.Config;
+import android.content.Context;
 import android.net.http.DomainNameChecker;
 import android.os.SystemProperties;
+import android.util.Config;
+import android.util.Log;
+
+import com.android.internal.net.SSLSessionCache;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.security.GeneralSecurityException;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
 
 import javax.net.SocketFactory;
-import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 import javax.net.ssl.X509TrustManager;
 
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.security.NoSuchAlgorithmException;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.GeneralSecurityException;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-
+/**
+ * SSLSocketFactory that allows skipping the certificate chain validation
+ * based on system setting (socket.relaxsslcheck=yes, ro.secure=1 - for 
+ * testing only).
+ * 
+ * It also adds a readTimeout that will be set on each created socket. 
+ * The factory will use SSL session persistence if enabled by config.
+ */
 public class SSLCertificateSocketFactory extends SSLSocketFactory {
 
-    private static final boolean DBG = true;
     private static final String LOG_TAG = "SSLCertificateSocketFactory";
     
     private static X509TrustManager sDefaultTrustManager;
 
-    private final int socketReadTimeoutForSslHandshake;
-
     static {
         try {
             TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
@@ -83,14 +90,36 @@
         }
     };
 
-    private SSLSocketFactory factory;
+    private static SSLSocketFactory factory;
+    
+    /** 
+     * Initialize a single default factory to be used for all returned 
+     * sockets. 
+     *
+     * Because of the signature of getDefault(int timeout) it needs to create 
+     * a new instance which encapsulates the timeout on each call. We want
+     * to share a single SSLContext and SSLSessionCache.
+     * 
+     * Can be called multiple times - but only the first will initialize the factory.
+     *  
+     * @param androidContext will be used for SSL session persistence. Null for backward
+     * compatibility, no SSL persistence.
+     * @hide
+     */
+    public static synchronized void setupDefaultFactory(Context androidContext) {
+        if ( factory != null) {
+            // Can only be initialized once, to avoid having multiple caches.
+            return;
+        }
+        factory = SSLSessionCache.getSocketFactory(androidContext, TRUST_MANAGER);
+    }
+
+    private final int socketReadTimeoutForSslHandshake;
 
     public SSLCertificateSocketFactory(int socketReadTimeoutForSslHandshake)
             throws NoSuchAlgorithmException, KeyManagementException {  
-        SSLContext context = SSLContext.getInstance("TLS");
-        context.init(null, TRUST_MANAGER, new java.security.SecureRandom());
-        factory = (SSLSocketFactory) context.getSocketFactory();
-        this.socketReadTimeoutForSslHandshake = socketReadTimeoutForSslHandshake;
+        this.socketReadTimeoutForSslHandshake
+                = socketReadTimeoutForSslHandshake;
     }
 
     /**
@@ -103,6 +132,11 @@
      */
     public static SocketFactory getDefault(int socketReadTimeoutForSslHandshake) {
         try {
+            if (factory == null) {
+                // The delegated factory was not initialized explicitely with a context.
+                // Use a default one.
+                setupDefaultFactory(null);
+            }
             return new SSLCertificateSocketFactory(socketReadTimeoutForSslHandshake);
         } catch (NoSuchAlgorithmException e) {
             Log.e(LOG_TAG, 
diff --git a/core/java/android/net/http/AndroidHttpClient.java b/core/java/android/net/http/AndroidHttpClient.java
index 4fb1499..0c4fcda 100644
--- a/core/java/android/net/http/AndroidHttpClient.java
+++ b/core/java/android/net/http/AndroidHttpClient.java
@@ -47,6 +47,8 @@
 import org.apache.http.protocol.BasicHttpProcessor;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.protocol.BasicHttpContext;
+import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
+import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -55,6 +57,7 @@
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 import java.net.URI;
+import java.security.KeyManagementException;
 
 import android.util.Log;
 import android.content.ContentResolver;
@@ -98,10 +101,13 @@
 
     /**
      * Create a new HttpClient with reasonable defaults (which you can update).
+     *
      * @param userAgent to report in your HTTP requests.
+     * @param sessionCache persistent session cache
      * @return AndroidHttpClient for you to use for all your requests.
      */
-    public static AndroidHttpClient newInstance(String userAgent) {
+    public static AndroidHttpClient newInstance(String userAgent,
+            SSLClientSessionCache sessionCache) {
         HttpParams params = new BasicHttpParams();
 
         // Turn off stale checking.  Our connections break all the time anyway,
@@ -123,7 +129,8 @@
         schemeRegistry.register(new Scheme("http",
                 PlainSocketFactory.getSocketFactory(), 80));
         schemeRegistry.register(new Scheme("https",
-                SSLSocketFactory.getSocketFactory(), 443));
+                socketFactoryWithCache(sessionCache), 443));
+
         ClientConnectionManager manager =
                 new ThreadSafeClientConnManager(params, schemeRegistry);
 
@@ -132,6 +139,41 @@
         return new AndroidHttpClient(manager, params);
     }
 
+    /**
+     * Returns a socket factory backed by the given persistent session cache.
+     *
+     * @param sessionCache to retrieve sessions from, null for no cache
+     */
+    private static SSLSocketFactory socketFactoryWithCache(
+            SSLClientSessionCache sessionCache) {
+        if (sessionCache == null) {
+            // Use the default factory which doesn't support persistent
+            // caching.
+            return SSLSocketFactory.getSocketFactory();
+        }
+
+        // Create a new SSL context backed by the cache.
+        // TODO: Keep a weak *identity* hash map of caches to engines. In the
+        // mean time, if we have two engines for the same cache, they'll still
+        // share sessions but will have to do so through the persistent cache.
+        SSLContextImpl sslContext = new SSLContextImpl();
+        try {
+            sslContext.engineInit(null, null, null, sessionCache, null);
+        } catch (KeyManagementException e) {
+            throw new AssertionError(e);
+        }
+        return new SSLSocketFactory(sslContext.engineGetSocketFactory());
+    }
+
+    /**
+     * Create a new HttpClient with reasonable defaults (which you can update).
+     * @param userAgent to report in your HTTP requests.
+     * @return AndroidHttpClient for you to use for all your requests.
+     */
+    public static AndroidHttpClient newInstance(String userAgent) {
+        return newInstance(userAgent, null /* session cache */);
+    }
+
     private final HttpClient delegate;
 
     private RuntimeException mLeakedException = new IllegalStateException(
diff --git a/core/java/android/net/http/CertificateChainValidator.java b/core/java/android/net/http/CertificateChainValidator.java
index b7f7368..0edbe5b 100644
--- a/core/java/android/net/http/CertificateChainValidator.java
+++ b/core/java/android/net/http/CertificateChainValidator.java
@@ -16,8 +16,6 @@
 
 package android.net.http;
 
-import android.os.SystemClock;
-
 import java.io.IOException;
 
 import java.security.cert.Certificate;
@@ -28,23 +26,13 @@
 import java.security.GeneralSecurityException;
 import java.security.KeyStore;
 
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Enumeration;
-
-import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLHandshakeException;
-import javax.net.ssl.SSLPeerUnverifiedException;
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 import javax.net.ssl.X509TrustManager;
 
-import org.apache.http.HttpHost;
-
-import org.bouncycastle.asn1.x509.X509Name;
-
 /**
  * Class responsible for all server certificate validation functionality
  * 
@@ -52,9 +40,6 @@
  */
 class CertificateChainValidator {
 
-    private static long sTotal = 0;
-    private static long sTotalReused = 0;
-
     /**
      * The singleton instance of the certificate chain validator
      */
@@ -110,91 +95,42 @@
      * @return An SSL error object if there is an error and null otherwise
      */
     public SslError doHandshakeAndValidateServerCertificates(
-        HttpsConnection connection, SSLSocket sslSocket, String domain)
-        throws SSLHandshakeException, IOException {
-
-        ++sTotal;
-
-        SSLContext sslContext = HttpsConnection.getContext();
-        if (sslContext == null) {
-            closeSocketThrowException(sslSocket, "SSL context is null");
-        }
-
+            HttpsConnection connection, SSLSocket sslSocket, String domain)
+            throws IOException {
         X509Certificate[] serverCertificates = null;
 
-        long sessionBeforeHandshakeLastAccessedTime = 0;
-        byte[] sessionBeforeHandshakeId = null;
-
-        SSLSession sessionAfterHandshake = null;
-
-        synchronized(sslContext) {
-            // get SSL session before the handshake
-            SSLSession sessionBeforeHandshake =
-                getSSLSession(sslContext, connection.getHost());
-            if (sessionBeforeHandshake != null) {
-                sessionBeforeHandshakeLastAccessedTime =
-                    sessionBeforeHandshake.getLastAccessedTime();
-
-                sessionBeforeHandshakeId =
-                    sessionBeforeHandshake.getId();
-            }
-
-            // start handshake, close the socket if we fail
-            try {
-                sslSocket.setUseClientMode(true);
-                sslSocket.startHandshake();
-            } catch (IOException e) {
-                closeSocketThrowException(
-                    sslSocket, e.getMessage(),
-                    "failed to perform SSL handshake");
-            }
-
-            // retrieve the chain of the server peer certificates
-            Certificate[] peerCertificates =
-                sslSocket.getSession().getPeerCertificates();
-
-            if (peerCertificates == null || peerCertificates.length <= 0) {
-                closeSocketThrowException(
-                    sslSocket, "failed to retrieve peer certificates");
-            } else {
-                serverCertificates =
-                    new X509Certificate[peerCertificates.length];
-                for (int i = 0; i < peerCertificates.length; ++i) {
-                    serverCertificates[i] =
-                        (X509Certificate)(peerCertificates[i]);
-                }
-
-                // update the SSL certificate associated with the connection
-                if (connection != null) {
-                    if (serverCertificates[0] != null) {
-                        connection.setCertificate(
-                            new SslCertificate(serverCertificates[0]));
-                    }
-                }
-            }
-
-            // get SSL session after the handshake
-            sessionAfterHandshake =
-                getSSLSession(sslContext, connection.getHost());
+        // start handshake, close the socket if we fail
+        try {
+            sslSocket.setUseClientMode(true);
+            sslSocket.startHandshake();
+        } catch (IOException e) {
+            closeSocketThrowException(
+                sslSocket, e.getMessage(),
+                "failed to perform SSL handshake");
         }
 
-        if (sessionBeforeHandshakeLastAccessedTime != 0 &&
-            sessionAfterHandshake != null &&
-            Arrays.equals(
-                sessionBeforeHandshakeId, sessionAfterHandshake.getId()) &&
-            sessionBeforeHandshakeLastAccessedTime <
-            sessionAfterHandshake.getLastAccessedTime()) {
+        // retrieve the chain of the server peer certificates
+        Certificate[] peerCertificates =
+            sslSocket.getSession().getPeerCertificates();
 
-            if (HttpLog.LOGV) {
-                HttpLog.v("SSL session was reused: total reused: "
-                          + sTotalReused
-                          + " out of total of: " + sTotal);
-
-                ++sTotalReused;
+        if (peerCertificates == null || peerCertificates.length <= 0) {
+            closeSocketThrowException(
+                sslSocket, "failed to retrieve peer certificates");
+        } else {
+            serverCertificates =
+                new X509Certificate[peerCertificates.length];
+            for (int i = 0; i < peerCertificates.length; ++i) {
+                serverCertificates[i] =
+                    (X509Certificate)(peerCertificates[i]);
             }
 
-            // no errors!!!
-            return null;
+            // update the SSL certificate associated with the connection
+            if (connection != null) {
+                if (serverCertificates[0] != null) {
+                    connection.setCertificate(
+                        new SslCertificate(serverCertificates[0]));
+                }
+            }
         }
 
         // check if the first certificate in the chain is for this site
@@ -216,7 +152,6 @@
             }
         }
 
-        //
         // first, we validate the chain using the standard validation
         // solution; if we do not find any errors, we are done; if we
         // fail the standard validation, we re-validate again below,
@@ -393,14 +328,14 @@
     }
 
     private void closeSocketThrowException(
-        SSLSocket socket, String errorMessage, String defaultErrorMessage)
-        throws SSLHandshakeException, IOException {
+            SSLSocket socket, String errorMessage, String defaultErrorMessage)
+            throws IOException {
         closeSocketThrowException(
             socket, errorMessage != null ? errorMessage : defaultErrorMessage);
     }
 
-    private void closeSocketThrowException(SSLSocket socket, String errorMessage)
-        throws SSLHandshakeException, IOException {
+    private void closeSocketThrowException(SSLSocket socket,
+            String errorMessage) throws IOException {
         if (HttpLog.LOGV) {
             HttpLog.v("validation error: " + errorMessage);
         }
@@ -416,29 +351,4 @@
 
         throw new SSLHandshakeException(errorMessage);
     }
-
-    /**
-     * @param sslContext The SSL context shared accross all the SSL sessions
-     * @param host The host associated with the session
-     * @return A suitable SSL session from the SSL context
-     */
-    private SSLSession getSSLSession(SSLContext sslContext, HttpHost host) {
-        if (sslContext != null && host != null) {
-            Enumeration en = sslContext.getClientSessionContext().getIds();
-            while (en.hasMoreElements()) {
-                byte[] id = (byte[]) en.nextElement();
-                if (id != null) {
-                    SSLSession session =
-                        sslContext.getClientSessionContext().getSession(id);
-                    if (session.isValid() &&
-                        host.getHostName().equals(session.getPeerHost()) &&
-                        host.getPort() == session.getPeerPort()) {
-                        return session;
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
 }
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 6f9d6c6..7590bfe 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -16,6 +16,8 @@
  */
 public abstract class BatteryStats implements Parcelable {
 
+    private static final boolean LOCAL_LOGV = false;
+    
     /**
      * A constant indicating a partial wake lock timer.
      */
@@ -72,6 +74,7 @@
     private static final String WAKELOCK_DATA = "wakelock";
     private static final String NETWORK_DATA = "network";
     private static final String BATTERY_DATA = "battery";
+    private static final String MISC_DATA = "misc";
 
     private final StringBuilder mFormatBuilder = new StringBuilder(8);
     private final Formatter mFormatter = new Formatter(mFormatBuilder);
@@ -93,11 +96,11 @@
          * Returns the total time in microseconds associated with this Timer for the
          * selected type of statistics.
          *
-         * @param now system uptime time in microseconds
+         * @param batteryRealtime system realtime on  battery in microseconds
          * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT
          * @return a time in microseconds
          */
-        public abstract long getTotalTime(long now, int which);
+        public abstract long getTotalTime(long batteryRealtime, int which);
         
         /**
          * Temporary for debugging.
@@ -222,11 +225,11 @@
                 /**
                  * Returns the amount of time spent started.
                  *
-                 * @param now elapsed realtime in microseconds.
+                 * @param batteryUptime elapsed uptime on battery in microseconds.
                  * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
                  * @return
                  */
-                public abstract long getStartTime(long now, int which);
+                public abstract long getStartTime(long batteryUptime, int which);
 
                 /**
                  * Returns the total number of times startService() has been called.
@@ -256,16 +259,16 @@
      * 
      * {@hide}
      */
-    public abstract long getBatteryScreenOnTime();
+    public abstract long getScreenOnTime(long batteryRealtime, int which);
     
     /**
-     * Returns the time in milliseconds that the screen has been on while the device was
-     * plugged in.
+     * Returns the time in milliseconds that the phone has been on while the device was
+     * running on battery.
      * 
      * {@hide}
      */
-    public abstract long getPluggedScreenOnTime();
-
+    public abstract long getPhoneOnTime(long batteryRealtime, int which);
+    
     /**
      * Return whether we are currently running on battery.
      */
@@ -382,18 +385,18 @@
      *
      * @param sb a StringBuilder object.
      * @param timer a Timer object contining the wakelock times.
-     * @param now the current time in microseconds.
+     * @param batteryRealtime the current on-battery time in microseconds.
      * @param name the name of the wakelock.
      * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
      * @param linePrefix a String to be prepended to each line of output.
      * @return the line prefix
      */
-    private static final String printWakeLock(StringBuilder sb, Timer timer, long now,
-        String name, int which, String linePrefix) {
+    private static final String printWakeLock(StringBuilder sb, Timer timer,
+            long batteryRealtime, String name, int which, String linePrefix) {
         
         if (timer != null) {
             // Convert from microseconds to milliseconds with rounding
-            long totalTimeMicros = timer.getTotalTime(now, which);
+            long totalTimeMicros = timer.getTotalTime(batteryRealtime, which);
             long totalTimeMillis = (totalTimeMicros + 500) / 1000;
             
             int count = timer.getCount(which);
@@ -470,26 +473,30 @@
      * @param which
      */
     private final void dumpCheckinLocked(PrintWriter pw, int which) {
-        long uSecTime = SystemClock.elapsedRealtime() * 1000;
-        final long uSecNow = getBatteryUptime(uSecTime);
+        final long rawUptime = SystemClock.uptimeMillis() * 1000;
+        final long rawRealtime = SystemClock.elapsedRealtime() * 1000;
+        final long batteryUptime = getBatteryUptime(rawUptime);
+        final long batteryRealtime = getBatteryRealtime(rawRealtime);
+        final long whichBatteryUptime = computeBatteryUptime(rawUptime, which);
+        final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which);
+        final long totalRealtime = computeRealtime(rawRealtime, which);
+        final long totalUptime = computeUptime(rawUptime, which);
+        final long screenOnTime = getScreenOnTime(batteryRealtime, which);
+        final long phoneOnTime = getPhoneOnTime(batteryRealtime, which);
        
         StringBuilder sb = new StringBuilder(128);
-        long batteryUptime = computeBatteryUptime(uSecNow, which);
-        long batteryRealtime = computeBatteryRealtime(getBatteryRealtime(uSecTime), which);
-        long elapsedRealtime = computeRealtime(uSecTime, which);
-        long uptime = computeUptime(SystemClock.uptimeMillis() * 1000, which);
         
         String category = STAT_NAMES[which];
         
         // Dump "battery" stat
         dumpLine(pw, 0 /* uid */, category, BATTERY_DATA, 
                 which == STATS_TOTAL ? getStartCount() : "N/A",
-                batteryUptime / 1000, 
-                formatRatioLocked(batteryUptime, elapsedRealtime),
-                batteryRealtime / 1000, 
-                formatRatioLocked(batteryRealtime, elapsedRealtime),
-                uptime / 1000,
-                elapsedRealtime / 1000); 
+                whichBatteryUptime / 1000, whichBatteryRealtime / 1000, 
+                totalUptime / 1000, totalRealtime / 1000); 
+        
+        // Dump misc stats
+        dumpLine(pw, 0 /* uid */, category, MISC_DATA,
+                screenOnTime / 1000, phoneOnTime / 1000);
         
         SparseArray<? extends Uid> uidStats = getUidStats();
         final int NU = uidStats.size();
@@ -508,11 +515,11 @@
                     Uid.Wakelock wl = ent.getValue();
                     String linePrefix = "";
                     sb.setLength(0);
-                    linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), uSecNow,
+                    linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime,
                             "full", which, linePrefix);
-                    linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), uSecNow,
+                    linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime,
                             "partial", which, linePrefix);
-                    linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), uSecNow,
+                    linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime,
                             "window", which, linePrefix);
                     
                     // Only log if we had at lease one wakelock...
@@ -531,7 +538,7 @@
                     Timer timer = se.getSensorTime();
                     if (timer != null) {
                         // Convert from microseconds to milliseconds with rounding
-                        long totalTime = (timer.getTotalTime(uSecNow, which) + 500) / 1000;
+                        long totalTime = (timer.getTotalTime(batteryRealtime, which) + 500) / 1000;
                         int count = timer.getCount(which);
                         if (totalTime != 0) {
                             dumpLine(pw, uid, category, SENSOR_DATA, sensorNumber, totalTime, count);
@@ -571,7 +578,7 @@
                     for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent
                             : serviceStats.entrySet()) {
                         BatteryStats.Uid.Pkg.Serv ss = sent.getValue();
-                        long startTime = ss.getStartTime(uSecNow, which);
+                        long startTime = ss.getStartTime(batteryUptime, which);
                         int starts = ss.getStarts(which);
                         int launches = ss.getLaunches(which);
                         if (startTime != 0 || starts != 0 || launches != 0) {
@@ -591,29 +598,40 @@
 
     @SuppressWarnings("unused")
     private final void dumpLocked(Printer pw, String prefix, int which) {
-        long uSecTime = SystemClock.elapsedRealtime() * 1000;
-        final long uSecNow = getBatteryUptime(uSecTime);
+        final long rawUptime = SystemClock.uptimeMillis() * 1000;
+        final long rawRealtime = SystemClock.elapsedRealtime() * 1000;
+        final long batteryUptime = getBatteryUptime(rawUptime);
+        final long batteryRealtime = getBatteryUptime(rawRealtime);
 
+        final long whichBatteryUptime = computeBatteryUptime(rawUptime, which);
+        final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which);
+        final long totalRealtime = computeRealtime(rawRealtime, which);
+        final long totalUptime = computeUptime(rawUptime, which);
+        
         StringBuilder sb = new StringBuilder(128);
-        long batteryUptime = computeBatteryUptime(uSecNow, which);
-        long batteryRealtime = computeBatteryRealtime(getBatteryRealtime(uSecTime), which);
-        long elapsedRealtime = computeRealtime(uSecTime, which);
-        long uptime = computeUptime(SystemClock.uptimeMillis() * 1000, which);
 
         pw.println(prefix
-                + "  Time on battery: " + formatTimeMs(batteryUptime / 1000) + "("
-                + formatRatioLocked(batteryUptime, elapsedRealtime)
+                + "  Time on battery: " + formatTimeMs(whichBatteryUptime / 1000)
+                + "(" + formatRatioLocked(whichBatteryUptime, totalRealtime)
                 + ") uptime, "
-                + formatTimeMs(batteryRealtime / 1000) + "("
-                + formatRatioLocked(batteryRealtime, elapsedRealtime)
+                + formatTimeMs(whichBatteryRealtime / 1000) + "("
+                + formatRatioLocked(whichBatteryRealtime, totalRealtime)
                 + ") realtime");
         pw.println(prefix
                 + "  Total: "
-                + formatTimeMs(uptime / 1000)
+                + formatTimeMs(totalUptime / 1000)
                 + "uptime, "
-                + formatTimeMs(elapsedRealtime / 1000)
+                + formatTimeMs(totalRealtime / 1000)
                 + "realtime");
         
+        long screenOnTime = getScreenOnTime(batteryRealtime, which);
+        long phoneOnTime = getPhoneOnTime(batteryRealtime, which);
+        pw.println(prefix
+                + "  Time with screen on: " + formatTimeMs(screenOnTime / 1000)
+                + "(" + formatRatioLocked(screenOnTime, whichBatteryRealtime)
+                + "), time with phone on: " + formatTimeMs(phoneOnTime / 1000)
+                + "(" + formatRatioLocked(phoneOnTime, whichBatteryRealtime) + ")");
+        
         pw.println(" ");
 
         SparseArray<? extends Uid> uidStats = getUidStats();
@@ -641,11 +659,11 @@
                     sb.append(prefix);
                     sb.append("    Wake lock ");
                     sb.append(ent.getKey());
-                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), uSecNow,
+                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime,
                             "full", which, linePrefix);
-                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), uSecNow,
+                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime,
                             "partial", which, linePrefix);
-                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), uSecNow,
+                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime,
                             "window", which, linePrefix);
                     if (!linePrefix.equals(": ")) {
                         sb.append(" realtime");
@@ -677,7 +695,7 @@
                     Timer timer = se.getSensorTime();
                     if (timer != null) {
                         // Convert from microseconds to milliseconds with rounding
-                        long totalTime = (timer.getTotalTime(uSecNow, which) + 500) / 1000;
+                        long totalTime = (timer.getTotalTime(batteryRealtime, which) + 500) / 1000;
                         int count = timer.getCount(which);
                         //timer.logState();
                         if (totalTime != 0) {
@@ -737,7 +755,7 @@
                         for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent
                                 : serviceStats.entrySet()) {
                             BatteryStats.Uid.Pkg.Serv ss = sent.getValue();
-                            long startTime = ss.getStartTime(uSecNow, which);
+                            long startTime = ss.getStartTime(batteryUptime, which);
                             int starts = ss.getStarts(which);
                             int launches = ss.getLaunches(which);
                             if (startTime != 0 || starts != 0 || launches != 0) {
@@ -787,9 +805,24 @@
     
     @SuppressWarnings("unused")
     public void dumpCheckinLocked(PrintWriter pw, String[] args) {
-        dumpCheckinLocked(pw, STATS_TOTAL);
-        dumpCheckinLocked(pw, STATS_LAST);
-        dumpCheckinLocked(pw, STATS_UNPLUGGED);
-        dumpCheckinLocked(pw, STATS_CURRENT);
+        boolean isUnpluggedOnly = false;
+        
+        for (String arg : args) {
+            if ("-u".equals(arg)) {
+                if (LOCAL_LOGV) Log.v("BatteryStats", "Dumping unplugged data");
+                isUnpluggedOnly = true;
+            }
+        }
+        
+        if (isUnpluggedOnly) {
+            dumpCheckinLocked(pw, STATS_UNPLUGGED);
+        }
+        else {
+            dumpCheckinLocked(pw, STATS_TOTAL);
+            dumpCheckinLocked(pw, STATS_LAST);
+            dumpCheckinLocked(pw, STATS_UNPLUGGED);
+            dumpCheckinLocked(pw, STATS_CURRENT);
+        }
     }
+    
 }
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index ed138cb..3fcb18e 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -76,6 +76,11 @@
     public static final int MODE_TRUNCATE = 0x04000000;
     
     /**
+     * For use with {@link #open}: append to end of file while writing.
+     */
+    public static final int MODE_APPEND = 0x02000000;
+    
+    /**
      * Create a new ParcelFileDescriptor accessing a given file.
      * 
      * @param file The file to be opened.
@@ -138,6 +143,19 @@
     }
     
     /**
+     * Return the total size of the file representing this fd, as determined
+     * by stat().  Returns -1 if the fd is not a file.
+     */
+    public native long getStatSize();
+    
+    /**
+     * This is needed for implementing AssetFileDescriptor.AutoCloseOutputStream,
+     * and I really don't think we want it to be public.
+     * @hide
+     */
+    public native long seekTo(long pos);
+    
+    /**
      * Close the ParcelFileDescriptor. This implementation closes the underlying
      * OS resources allocated to represent this stream.
      * 
diff --git a/core/java/android/pim/ICalendar.java b/core/java/android/pim/ICalendar.java
index 4a5d7e4..cc0f45e 100644
--- a/core/java/android/pim/ICalendar.java
+++ b/core/java/android/pim/ICalendar.java
@@ -405,13 +405,15 @@
     // TODO: get rid of this -- handle all of the parsing in one pass through
     // the text.
     private static String normalizeText(String text) {
-        // first we deal with line folding, by replacing all "\r\n " strings
-        // with nothing
-        text = text.replaceAll("\r\n ", "");
-
         // it's supposed to be \r\n, but not everyone does that
         text = text.replaceAll("\r\n", "\n");
         text = text.replaceAll("\r", "\n");
+
+        // we deal with line folding, by replacing all "\n " strings
+        // with nothing.  The RFC specifies "\r\n " to be folded, but
+        // we handle "\n " and "\r " too because we can get those.
+        text = text.replaceAll("\n ", "");
+
         return text;
     }
 
@@ -440,7 +442,7 @@
                 current = parseLine(line, state, current);
                 // if the provided component was null, we will return the root
                 // NOTE: in this case, if the first line is not a BEGIN, a
-                // FormatException will get thrown.
+                // FormatException will get thrown.   
                 if (component == null) {
                     component = current;
                 }
@@ -524,8 +526,7 @@
     private static String extractValue(ParserState state)
             throws FormatException {
         String line = state.line;
-        char c = line.charAt(state.index);
-        if (c != ':') {
+        if (state.index >= line.length() || line.charAt(state.index) != ':') {
             throw new FormatException("Expected ':' before end of line in "
                     + line);
         }
diff --git a/core/java/android/provider/Checkin.java b/core/java/android/provider/Checkin.java
index 0cdac53..1454089 100644
--- a/core/java/android/provider/Checkin.java
+++ b/core/java/android/provider/Checkin.java
@@ -62,6 +62,9 @@
             AUTOTEST_FAILURE,
             AUTOTEST_SEQUENCE_BEGIN,
             AUTOTEST_SUITE_BEGIN,
+            AUTOTEST_TCPDUMP_BEGIN,
+            AUTOTEST_TCPDUMP_DATA,
+            AUTOTEST_TCPDUMP_END,
             AUTOTEST_TEST_BEGIN,
             AUTOTEST_TEST_FAILURE,
             AUTOTEST_TEST_SUCCESS,
@@ -98,14 +101,14 @@
             SETUP_SERVER_ERROR,
             SETUP_SERVER_TIMEOUT,
             SETUP_NO_DATA_NETWORK,
-            SYSTEM_APP_NOT_RESPONDING,
             SYSTEM_BOOT,
             SYSTEM_LAST_KMSG,
             SYSTEM_RECOVERY_LOG,
             SYSTEM_RESTART,
             SYSTEM_SERVICE_LOOPING,
             SYSTEM_TOMBSTONE,
-            TEST,
+            TEST, 
+            BATTERY_DISCHARGE_INFO,
         }
     }
 
@@ -190,6 +193,9 @@
 
         // The category is used for GTalk service messages
         public static final String CATEGORY = "android.server.checkin.CHECKIN";
+        
+        // If true indicates that the checkin should only transfer market related data
+        public static final String EXTRA_MARKET_ONLY = "market_only";
     }
 
     private static final String TAG = "Checkin";
diff --git a/core/java/android/provider/Im.java b/core/java/android/provider/Im.java
index bea857f..19ad158 100644
--- a/core/java/android/provider/Im.java
+++ b/core/java/android/provider/Im.java
@@ -2044,4 +2044,37 @@
          */
         public static final Uri CONTENT_URI = Uri.parse("content://im/lastRmqId");
     }
+
+    /**
+     * Columns for IM branding resource map cache table. This table caches the result of
+     * loading the branding resources to speed up IM landing page start.
+     */
+    public interface BrandingResourceMapCacheColumns {
+        /**
+         * The provider ID
+         * <P>Type: INTEGER</P>
+         */
+        String PROVIDER_ID = "provider_id";
+        /**
+         * The application resource ID
+         * <P>Type: INTEGER</P>
+         */
+        String APP_RES_ID = "app_res_id";
+        /**
+         * The plugin resource ID
+         * <P>Type: INTEGER</P>
+         */
+        String PLUGIN_RES_ID = "plugin_res_id";
+    }
+
+    /**
+     * The table for caching the result of loading IM branding resources.
+     */
+    public static final class BrandingResourceMapCache
+        implements BaseColumns, BrandingResourceMapCacheColumns {
+        /**
+         * The content:// style URL for this table.
+         */
+        public static final Uri CONTENT_URI = Uri.parse("content://im/brandingResMapCache");
+    }
 }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 4a784c8..10ca5d5 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2183,6 +2183,12 @@
         public static final String CHECKIN_INTERVAL = "checkin_interval";
 
         /**
+         * Boolean indicating if the market app should force market only checkins on
+         * install/uninstall. Any non-0 value is considered true.
+         */
+        public static final String MARKET_FORCE_CHECKIN = "market_force_checkin";
+
+        /**
          * How frequently (in seconds) to check the memory status of the
          * device.
          */
@@ -2455,6 +2461,14 @@
                 "gtalk_ssl_handshake_timeout_ms";
 
         /**
+         * Enable use of ssl session caching. 
+         * 'db' - save each session in a per-process database
+         * not set or any other value - normal java in-memory caching. 
+         *  Other cache types may be added.
+         */
+        public static final String SSL_SESSION_CACHE = "ssl_session_cache";
+
+        /**
          * How many bytes long a message has to be, in order to be gzipped.
          */
         public static final String SYNC_MIN_GZIP_BYTES =
@@ -2766,11 +2780,29 @@
         public static final String VOICE_SEARCH_ENCODING_WIFI = "voice_search_encoding_wifi";
 
         /**
-         * Prefix for rules that launch automatic instrumentation test cycles.
-         * The format is the InstrumentationTestRunner (or compatible) package and class,
-         * followed optionally by space-separated key value pairs to pass to it.
+         * Whether to use automatic gain control in voice search (0 = disable, 1 = enable). 
+         * To be factored out of this class.
          */
-        public static final String AUTOTEST_PREFIX = "autotest:";
+        public static final String VOICE_SEARCH_ENABLE_AGC = "voice_search_enable_agc";
+
+        /**
+         * Whether to use noise suppression in voice search (0 = disable, 1 = enable).
+         * To be factored out of this class.
+         */
+        public static final String VOICE_SEARCH_ENABLE_NS = "voice_search_enable_ns";
+
+        /**
+         * Whether to use the IIR filter in voice search (0 = disable, 1 = enable). 
+         * To be factored out of this class.
+         */
+        public static final String VOICE_SEARCH_ENABLE_IIR = "voice_search_enable_iir";
+
+        /**
+         * List of test suites (local disk filename) for the automatic instrumentation test runner.
+         * The file format is similar to automated_suites.xml, see AutoTesterService.
+         * If this setting is missing or empty, the automatic test runner will not start.
+         */
+        public static final String AUTOTEST_SUITES_FILE = "autotest_suites_file";
 
         /**
          * Interval between synchronous checkins forced by the automatic test runner.
@@ -2785,6 +2817,15 @@
          */
         public static final String AUTOTEST_REBOOT_SECONDS = "autotest_reboot_seconds";
 
+        
+        /**
+         * Threshold values for the duration and level of a discharge cycle, under 
+         * which we log discharge cycle info.
+         */
+        public static final String BATTERY_DISCHARGE_DURATION_THRESHOLD = 
+                "battery_discharge_duration_threshold";
+        public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold";
+
         /**
          * @deprecated
          * @hide
diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java
index 58f9491..f8bc765 100644
--- a/core/java/android/server/BluetoothA2dpService.java
+++ b/core/java/android/server/BluetoothA2dpService.java
@@ -15,8 +15,7 @@
  */
 
 /**
- * TODO: Move this to
- * java/services/com/android/server/BluetoothA2dpService.java
+ * TODO: Move this to services.jar
  * and make the contructor package private again.
  * @hide
  */
@@ -35,15 +34,16 @@
 import android.content.pm.PackageManager;
 import android.media.AudioManager;
 import android.os.Binder;
+import android.os.Handler;
+import android.os.Message;
 import android.provider.Settings;
 import android.util.Log;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.List;
 import java.util.HashMap;
-import java.util.Iterator;
+import java.util.List;
 
 public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
     private static final String TAG = "BluetoothA2dpService";
@@ -57,6 +57,8 @@
     private static final String A2DP_SINK_ADDRESS = "a2dp_sink_address";
     private static final String BLUETOOTH_ENABLED = "bluetooth_enabled";
 
+    private static final int MESSAGE_CONNECT_TO = 1;
+
     private final Context mContext;
     private final IntentFilter mIntentFilter;
     private HashMap<String, SinkState> mAudioDevices;
@@ -86,6 +88,7 @@
         mIntentFilter = new IntentFilter(BluetoothIntent.ENABLED_ACTION);
         mIntentFilter.addAction(BluetoothIntent.DISABLED_ACTION);
         mIntentFilter.addAction(BluetoothIntent.BOND_STATE_CHANGED_ACTION);
+        mIntentFilter.addAction(BluetoothIntent.REMOTE_DEVICE_CONNECTED_ACTION);
         mContext.registerReceiver(mReceiver, mIntentFilter);
 
         if (device.isEnabled()) {
@@ -123,6 +126,37 @@
                     setSinkPriority(address, BluetoothA2dp.PRIORITY_OFF);
                     break;
                 }
+            } else if (action.equals(BluetoothIntent.REMOTE_DEVICE_CONNECTED_ACTION)) {
+                if (getSinkPriority(address) > BluetoothA2dp.PRIORITY_OFF) {
+                    // This device is a preferred sink. Make an A2DP connection
+                    // after a delay. We delay to avoid connection collisions,
+                    // and to give other profiles such as HFP a chance to
+                    // connect first.
+                    Message msg = Message.obtain(mHandler, MESSAGE_CONNECT_TO, address);
+                    mHandler.sendMessageDelayed(msg, 6000);
+                }
+            }
+        }
+    };
+
+    private final Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+            case MESSAGE_CONNECT_TO:
+                String address = (String)msg.obj;
+                // check device is still preferred, and nothing is currently
+                // connected
+                if (getSinkPriority(address) > BluetoothA2dp.PRIORITY_OFF &&
+                        lookupSinksMatchingStates(new int[] {
+                            BluetoothA2dp.STATE_CONNECTING,
+                            BluetoothA2dp.STATE_CONNECTED,
+                            BluetoothA2dp.STATE_PLAYING,
+                            BluetoothA2dp.STATE_DISCONNECTING}).size() == 0) {
+                    log("Auto-connecting A2DP to sink " + address);
+                    connectSink(address);
+                }
+                break;
             }
         }
     };
@@ -142,7 +176,10 @@
 
     private synchronized void onBluetoothDisable() {
         if (mAudioDevices != null) {
-            for (String path : mAudioDevices.keySet()) {
+            // copy to allow modification during iteration
+            String[] paths = new String[mAudioDevices.size()];
+            paths = mAudioDevices.keySet().toArray(paths);
+            for (String path : paths) {
                 switch (mAudioDevices.get(path).state) {
                     case BluetoothA2dp.STATE_CONNECTING:
                     case BluetoothA2dp.STATE_CONNECTED:
@@ -234,17 +271,8 @@
 
     public synchronized List<String> listConnectedSinks() {
         mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
-        List<String> connectedSinks = new ArrayList<String>();
-        if (mAudioDevices == null) {
-            return connectedSinks;
-        }
-        for (SinkState sink : mAudioDevices.values()) {
-            if (sink.state == BluetoothA2dp.STATE_CONNECTED ||
-                sink.state == BluetoothA2dp.STATE_PLAYING) {
-                connectedSinks.add(sink.address);
-            }
-        }
-        return connectedSinks;
+        return lookupSinksMatchingStates(new int[] {BluetoothA2dp.STATE_CONNECTED,
+                                                    BluetoothA2dp.STATE_PLAYING});
     }
 
     public synchronized int getSinkState(String address) {
@@ -298,7 +326,11 @@
         // bluez 3.36 quietly disconnects the previous sink when a new sink
         // is connected, so we need to mark all previously connected sinks as
         // disconnected
-        for (String oldPath : mAudioDevices.keySet()) {
+
+        // copy to allow modification during iteration
+        String[] paths = new String[mAudioDevices.size()];
+        paths = mAudioDevices.keySet().toArray(paths);
+        for (String oldPath : paths) {
             if (path.equals(oldPath)) {
                 continue;
             }
@@ -350,6 +382,22 @@
         return null;
     }
 
+    private synchronized List<String> lookupSinksMatchingStates(int[] states) {
+        List<String> sinks = new ArrayList<String>();
+        if (mAudioDevices == null) {
+            return sinks;
+        }
+        for (SinkState sink : mAudioDevices.values()) {
+            for (int state : states) {
+                if (sink.state == state) {
+                    sinks.add(sink.address);
+                    break;
+                }
+            }
+        }
+        return sinks;
+    }
+
     private synchronized void updateState(String path, int state) {
         if (mAudioDevices == null) return;
 
diff --git a/core/java/android/server/BluetoothDeviceService.java b/core/java/android/server/BluetoothDeviceService.java
index fa53a601..950ff3a 100644
--- a/core/java/android/server/BluetoothDeviceService.java
+++ b/core/java/android/server/BluetoothDeviceService.java
@@ -141,6 +141,20 @@
             mBondState.setBondState(address, BluetoothDevice.BOND_NOT_BONDED,
                                     BluetoothDevice.UNBOND_REASON_AUTH_CANCELED);
         }
+
+        // Remove remoteServiceChannelCallbacks
+        HashMap<String, IBluetoothDeviceCallback> callbacksMap =
+            mEventLoop.getRemoteServiceChannelCallbacks();
+        IBluetoothDeviceCallback callback;
+
+        for (String address : callbacksMap.keySet()) {
+            callback = callbacksMap.get(address);
+            try {
+                callback.onGetRemoteServiceChannelResult(address, BluetoothError.ERROR_DISABLED);
+            } catch (RemoteException e) {}
+            callbacksMap.remove(address);
+        }
+
         // update mode
         Intent intent = new Intent(BluetoothIntent.SCAN_MODE_CHANGED_ACTION);
         intent.putExtra(BluetoothIntent.SCAN_MODE, BluetoothDevice.SCAN_MODE_NONE);
@@ -569,10 +583,18 @@
         }
         address = address.toUpperCase();
 
+        String[] bonding = mBondState.listInState(BluetoothDevice.BOND_BONDING);
+        if (bonding.length > 0 && !bonding[0].equals(address)) {
+            log("Ignoring createBond(): another device is bonding");
+            // a different device is currently bonding, fail
+            return false;
+        }
+
         // Check for bond state only if we are not performing auto
         // pairing exponential back-off attempts.
         if (!mBondState.isAutoPairingAttemptsInProgress(address) &&
-            mBondState.getBondState(address) != BluetoothDevice.BOND_NOT_BONDED) {
+                mBondState.getBondState(address) != BluetoothDevice.BOND_NOT_BONDED) {
+            log("Ignoring createBond(): this device is already bonding or bonded");
             return false;
         }
 
diff --git a/core/java/android/server/search/SearchableInfo.java b/core/java/android/server/search/SearchableInfo.java
index c18675e..0c04839 100644
--- a/core/java/android/server/search/SearchableInfo.java
+++ b/core/java/android/server/search/SearchableInfo.java
@@ -35,6 +35,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Xml;
+import android.view.inputmethod.EditorInfo;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -77,6 +78,7 @@
     private int mIconId = 0;
     private int mSearchButtonText = 0;
     private int mSearchInputType = 0;
+    private int mSearchImeOptions = 0;
     private String mSuggestAuthority = null;
     private String mSuggestPath = null;
     private String mSuggestSelection = null;
@@ -429,8 +431,9 @@
                     com.android.internal.R.styleable.Searchable_searchButtonText, 0);
             mSearchInputType = a.getInt(com.android.internal.R.styleable.Searchable_inputType, 
                     InputType.TYPE_CLASS_TEXT |
-                    InputType.TYPE_TEXT_FLAG_SEARCH |
                     InputType.TYPE_TEXT_VARIATION_NORMAL);
+            mSearchImeOptions = a.getInt(com.android.internal.R.styleable.Searchable_imeOptions, 
+                    EditorInfo.IME_ACTION_SEARCH);
 
             setSearchModeFlags();
             if (DBG_INHIBIT_SUGGESTIONS == 0) {
@@ -743,6 +746,17 @@
     }
     
     /**
+     * Return the input method options specified in the searchable attributes.
+     * This will default to EditorInfo.ACTION_SEARCH if not specified (which is
+     * appropriate for a search box).
+     * 
+     * @return the input type
+     */
+    public int getImeOptions() {
+        return mSearchImeOptions;
+    }
+    
+    /**
      * Return the list of searchable activities, for use in the drop-down.
      */
     public static ArrayList<SearchableInfo> getSearchablesList() {
@@ -782,6 +796,7 @@
         mIconId = in.readInt();
         mSearchButtonText = in.readInt();
         mSearchInputType = in.readInt();
+        mSearchImeOptions = in.readInt();
         setSearchModeFlags();
 
         mSuggestAuthority = in.readString();
@@ -818,6 +833,7 @@
         dest.writeInt(mIconId);
         dest.writeInt(mSearchButtonText);
         dest.writeInt(mSearchInputType);
+        dest.writeInt(mSearchImeOptions);
         
         dest.writeString(mSuggestAuthority);
         dest.writeString(mSuggestPath);
diff --git a/core/java/android/speech/srec/package.html b/core/java/android/speech/srec/package.html
index 723b30b..9a99df8 100644
--- a/core/java/android/speech/srec/package.html
+++ b/core/java/android/speech/srec/package.html
@@ -1,5 +1,6 @@
 <HTML>
 <BODY>
 Simple, synchronous SREC speech recognition API.
+@hide
 </BODY>
 </HTML>
diff --git a/core/java/android/text/InputType.java b/core/java/android/text/InputType.java
index a073cf4..f643f92 100644
--- a/core/java/android/text/InputType.java
+++ b/core/java/android/text/InputType.java
@@ -128,11 +128,6 @@
      */
     public static final int TYPE_TEXT_FLAG_IME_MULTI_LINE = 0x00040000;
     
-    /**
-     * Flag for {@link #TYPE_CLASS_TEXT}: flags any text being used as a search string
-     */
-    public static final int TYPE_TEXT_FLAG_SEARCH = 0x00080000;
-    
     // ----------------------------------------------------------------------
     
     /**
diff --git a/core/java/android/text/Styled.java b/core/java/android/text/Styled.java
index 05c27ea..0aa2004 100644
--- a/core/java/android/text/Styled.java
+++ b/core/java/android/text/Styled.java
@@ -16,25 +16,26 @@
 
 package android.text;
 
-import android.graphics.Paint;
 import android.graphics.Canvas;
-import android.graphics.Path;
-import android.graphics.RectF;
-import android.graphics.Typeface;
-import android.graphics.MaskFilter;
-import android.graphics.Rasterizer;
-import android.graphics.LayerRasterizer;
-import android.text.style.*;
+import android.graphics.Paint;
+import android.text.style.CharacterStyle;
+import android.text.style.MetricAffectingSpan;
+import android.text.style.ReplacementSpan;
 
-/* package */ class Styled
+/**
+ * This class provides static methods for drawing and measuring styled texts, like
+ * {@link android.text.Spanned} object with {@link android.text.style.ReplacementSpan}.
+ * @hide
+ */
+public class Styled
 {
     private static float each(Canvas canvas,
                               Spanned text, int start, int end,
                               int dir, boolean reverse,
                               float x, int top, int y, int bottom,
-                              Paint.FontMetricsInt fm,
-                              TextPaint realPaint,
+                              Paint.FontMetricsInt fmi,
                               TextPaint paint,
+                              TextPaint workPaint,
                               boolean needwid) {
 
         boolean havewid = false;
@@ -43,9 +44,9 @@
 
         ReplacementSpan replacement = null;
 
-        realPaint.bgColor = 0;
-        realPaint.baselineShift = 0;
-        paint.set(realPaint);
+        paint.bgColor = 0;
+        paint.baselineShift = 0;
+        workPaint.set(paint);
 
 		if (spans.length > 0) {
 			for (int i = 0; i < spans.length; i++) {
@@ -55,7 +56,7 @@
 					replacement = (ReplacementSpan)span;
 				}
 				else {
-					span.updateDrawState(paint);
+					span.updateDrawState(workPaint);
 				}
 			}
 		}
@@ -74,66 +75,66 @@
                 tmpend = end;
             }
 
-            if (fm != null) {
-                paint.getFontMetricsInt(fm);
+            if (fmi != null) {
+                workPaint.getFontMetricsInt(fmi);
             }
 
             if (canvas != null) {
-                if (paint.bgColor != 0) {
-                    int c = paint.getColor();
-                    Paint.Style s = paint.getStyle();
-                    paint.setColor(paint.bgColor);
-                    paint.setStyle(Paint.Style.FILL);
+                if (workPaint.bgColor != 0) {
+                    int c = workPaint.getColor();
+                    Paint.Style s = workPaint.getStyle();
+                    workPaint.setColor(workPaint.bgColor);
+                    workPaint.setStyle(Paint.Style.FILL);
 
                     if (!havewid) {
-                        ret = paint.measureText(tmp, tmpstart, tmpend);
+                        ret = workPaint.measureText(tmp, tmpstart, tmpend);
                         havewid = true;
                     }
 
                     if (dir == Layout.DIR_RIGHT_TO_LEFT)
-                        canvas.drawRect(x - ret, top, x, bottom, paint);
+                        canvas.drawRect(x - ret, top, x, bottom, workPaint);
                     else
-                        canvas.drawRect(x, top, x + ret, bottom, paint);
+                        canvas.drawRect(x, top, x + ret, bottom, workPaint);
 
-                    paint.setStyle(s);
-                    paint.setColor(c);
+                    workPaint.setStyle(s);
+                    workPaint.setColor(c);
                 }
 
                 if (dir == Layout.DIR_RIGHT_TO_LEFT) {
                     if (!havewid) {
-                        ret = paint.measureText(tmp, tmpstart, tmpend);
+                        ret = workPaint.measureText(tmp, tmpstart, tmpend);
                         havewid = true;
                     }
 
                     canvas.drawText(tmp, tmpstart, tmpend,
-                                    x - ret, y + paint.baselineShift, paint);
+                                    x - ret, y + workPaint.baselineShift, workPaint);
                 } else {
                     if (needwid) {
                         if (!havewid) {
-                            ret = paint.measureText(tmp, tmpstart, tmpend);
+                            ret = workPaint.measureText(tmp, tmpstart, tmpend);
                             havewid = true;
                         }
                     }
 
                     canvas.drawText(tmp, tmpstart, tmpend,
-                                    x, y + paint.baselineShift, paint);
+                                    x, y + workPaint.baselineShift, workPaint);
                 }
             } else {
                 if (needwid && !havewid) {
-                    ret = paint.measureText(tmp, tmpstart, tmpend);
+                    ret = workPaint.measureText(tmp, tmpstart, tmpend);
                     havewid = true;
                 }
             }
         } else {
-            ret = replacement.getSize(paint, text, start, end, fm);
+            ret = replacement.getSize(workPaint, text, start, end, fmi);
 
             if (canvas != null) {
                 if (dir == Layout.DIR_RIGHT_TO_LEFT)
                     replacement.draw(canvas, text, start, end,
-                                     x - ret, top, y, bottom, paint);
+                                     x - ret, top, y, bottom, workPaint);
                 else
                     replacement.draw(canvas, text, start, end,
-                                     x, top, y, bottom, paint);
+                                     x, top, y, bottom, workPaint);
             }
         }
 
@@ -143,15 +144,29 @@
             return ret;
     }
 
-    public static int getTextWidths(TextPaint realPaint,
-                                    TextPaint paint,
-                              Spanned text, int start, int end,
-                              float[] widths, Paint.FontMetricsInt fm) {
-
+    /**
+     * Return the advance widths for the characters in the string.
+     * See also {@link android.graphics.Paint#getTextWidths(CharSequence, int, int, float[])}.
+     * 
+     * @param paint The main {@link TextPaint} object.
+     * @param workPaint The {@link TextPaint} object used for temporal workspace.
+     * @param text The text to measure
+     * @param start The index of the first char to to measure
+     * @param end The end of the text slice to measure
+     * @param widths Array to receive the advance widths of the characters.
+     * Must be at least a large as (end - start).
+     * @param fmi FontMetrics information. Can be null.
+     * @return The actual number of widths returned. 
+     */
+    public static int getTextWidths(TextPaint paint,
+                                    TextPaint workPaint,
+                                    Spanned text, int start, int end,
+                                    float[] widths, Paint.FontMetricsInt fmi) {
+        //  Keep workPaint as is so that developers reuse the workspace.
         MetricAffectingSpan[] spans = text.getSpans(start, end, MetricAffectingSpan.class);
 
 		ReplacementSpan replacement = null;
-        paint.set(realPaint);
+        workPaint.set(paint);
 		
 		for (int i = 0; i < spans.length; i++) {
 			MetricAffectingSpan span = spans[i];
@@ -159,15 +174,15 @@
 				replacement = (ReplacementSpan)span;
 			}
 			else {
-				span.updateMeasureState(paint);
+				span.updateMeasureState(workPaint);
 			}
 		}
 	
         if (replacement == null) {
-            paint.getFontMetricsInt(fm);
-            paint.getTextWidths(text, start, end, widths);
+            workPaint.getFontMetricsInt(fmi);
+            workPaint.getTextWidths(text, start, end, widths);
         } else {
-            int wid = replacement.getSize(paint, text, start, end, fm);
+            int wid = replacement.getSize(workPaint, text, start, end, fmi);
 
             if (end > start) {
                 widths[0] = wid;
@@ -183,10 +198,10 @@
                                  CharSequence text, int start, int end,
                                  int dir, boolean reverse,
                                  float x, int top, int y, int bottom,
-                                 Paint.FontMetricsInt fm,
+                                 Paint.FontMetricsInt fmi,
                                  TextPaint paint,
                                  TextPaint workPaint,
-                                 boolean needwid) {
+                                 boolean needWidth) {
         if (! (text instanceof Spanned)) {
             float ret = 0;
 
@@ -194,22 +209,22 @@
                 CharSequence tmp = TextUtils.getReverse(text, start, end);
                 int tmpend = end - start;
 
-                if (canvas != null || needwid)
+                if (canvas != null || needWidth)
                     ret = paint.measureText(tmp, 0, tmpend);
 
                 if (canvas != null)
                     canvas.drawText(tmp, 0, tmpend,
                                     x - ret, y, paint);
             } else {
-                if (needwid)
+                if (needWidth)
                     ret = paint.measureText(text, start, end);
 
                 if (canvas != null)
                     canvas.drawText(text, start, end, x, y, paint);
             }
 
-            if (fm != null) {
-                paint.getFontMetricsInt(fm);
+            if (fmi != null) {
+                paint.getFontMetricsInt(fmi);
             }
 
             return ret * dir;   //Layout.DIR_RIGHT_TO_LEFT == -1
@@ -232,67 +247,129 @@
             next = sp.nextSpanTransition(i, end, division);
 
             x += each(canvas, sp, i, next, dir, reverse,
-                  x, top, y, bottom, fm, paint, workPaint,
-                  needwid || next != end);
+                  x, top, y, bottom, fmi, paint, workPaint,
+                  needWidth || next != end);
 
-            if (fm != null) {
-                if (fm.ascent < asc)
-                    asc = fm.ascent;
-                if (fm.descent > desc)
-                    desc = fm.descent;
+            if (fmi != null) {
+                if (fmi.ascent < asc)
+                    asc = fmi.ascent;
+                if (fmi.descent > desc)
+                    desc = fmi.descent;
 
-                if (fm.top < ftop)
-                    ftop = fm.top;
-                if (fm.bottom > fbot)
-                    fbot = fm.bottom;
+                if (fmi.top < ftop)
+                    ftop = fmi.top;
+                if (fmi.bottom > fbot)
+                    fbot = fmi.bottom;
             }
         }
 
-        if (fm != null) {
+        if (fmi != null) {
             if (start == end) {
-                paint.getFontMetricsInt(fm);
+                paint.getFontMetricsInt(fmi);
             } else {
-                fm.ascent = asc;
-                fm.descent = desc;
-                fm.top = ftop;
-                fm.bottom = fbot;
+                fmi.ascent = asc;
+                fmi.descent = desc;
+                fmi.top = ftop;
+                fmi.bottom = fbot;
             }
         }
 
         return x - ox;
     }
 
-    public static float drawText(Canvas canvas,
-                                 CharSequence text, int start, int end,
-                                 int dir, boolean reverse,
-                                 float x, int top, int y, int bottom,
-                                 TextPaint paint,
-                                 TextPaint workPaint,
-                                 boolean needwid) {
-        if ((dir == Layout.DIR_RIGHT_TO_LEFT && !reverse)||(reverse && dir == Layout.DIR_LEFT_TO_RIGHT)) {
+
+    /* package */ static float drawText(Canvas canvas,
+                                       CharSequence text, int start, int end,
+                                       int direction, boolean reverse,
+                                       float x, int top, int y, int bottom,
+                                       TextPaint paint,
+                                       TextPaint workPaint,
+                                       boolean needWidth) {
+        if ((direction == Layout.DIR_RIGHT_TO_LEFT && !reverse) ||
+            (reverse && direction == Layout.DIR_LEFT_TO_RIGHT)) {
             float ch = foreach(null, text, start, end, Layout.DIR_LEFT_TO_RIGHT,
                          false, 0, 0, 0, 0, null, paint, workPaint,
                          true);
 
-            ch *= dir;  // DIR_RIGHT_TO_LEFT == -1
-            foreach(canvas, text, start, end, -dir,
+            ch *= direction;  // DIR_RIGHT_TO_LEFT == -1
+            foreach(canvas, text, start, end, -direction,
                     reverse, x + ch, top, y, bottom, null, paint,
                     workPaint, true);
 
             return ch;
         }
 
-        return foreach(canvas, text, start, end, dir, reverse,
+        return foreach(canvas, text, start, end, direction, reverse,
                        x, top, y, bottom, null, paint, workPaint,
-                       needwid);
+                       needWidth);
     }
-
+    
+    /**
+     * Draw the specified range of text, specified by start/end, with its origin at (x,y),
+     * in the specified Paint. The origin is interpreted based on the Align setting in the
+     * Paint.
+     *  
+     * This method considers style information in the text
+     * (e.g. Even when text is an instance of {@link android.text.Spanned}, this method
+     * correctly draws the text).
+     * See also
+     * {@link android.graphics.Canvas#drawText(CharSequence, int, int, float, float, Paint)}
+     * and
+     * {@link android.graphics.Canvas#drawRect(float, float, float, float, Paint)}.
+     * 
+     * @param canvas The target canvas.
+     * @param text The text to be drawn
+     * @param start The index of the first character in text to draw
+     * @param end (end - 1) is the index of the last character in text to draw
+     * @param direction The direction of the text. This must be
+     * {@link android.text.Layout#DIR_LEFT_TO_RIGHT} or
+     * {@link android.text.Layout#DIR_RIGHT_TO_LEFT}.
+     * @param x The x-coordinate of origin for where to draw the text
+     * @param top The top side of the rectangle to be drawn
+     * @param y The y-coordinate of origin for where to draw the text
+     * @param bottom The bottom side of the rectangle to be drawn
+     * @param paint The main {@link TextPaint} object.
+     * @param workPaint The {@link TextPaint} object used for temporal workspace.
+     * @param needWidth If true, this method returns the width of drawn text.
+     * @return Width of the drawn text if needWidth is true.
+     */
+    public static float drawText(Canvas canvas,
+                                 CharSequence text, int start, int end,
+                                 int direction,
+                                 float x, int top, int y, int bottom,
+                                 TextPaint paint,
+                                 TextPaint workPaint,
+                                 boolean needWidth) {
+        // For safety.
+        direction = direction >= 0 ? Layout.DIR_LEFT_TO_RIGHT : Layout.DIR_RIGHT_TO_LEFT;
+        /*
+         * Hided "reverse" parameter since it is meaningless for external developers.
+         * Kept workPaint as is so that developers reuse the workspace.
+         */
+        return drawText(canvas, text, start, end, direction, false,
+                        x, top, y, bottom, paint, workPaint, needWidth);
+    }
+    
+    /**
+     * Return the width of the text, considering style information in the text
+     * (e.g. Even when text is an instance of {@link android.text.Spanned}, this method
+     * correctly mesures the width of the text).
+     * 
+     * @param paint The main {@link TextPaint} object.
+     * @param workPaint The {@link TextPaint} object used for temporal workspace.
+     * @param text The text to measure
+     * @param start The index of the first character to start measuring
+     * @param end 1 beyond the index of the last character to measure
+     * @param fmi FontMetrics information. Can be null
+     * @return The width of the text 
+     */
     public static float measureText(TextPaint paint,
                                     TextPaint workPaint,
                                     CharSequence text, int start, int end,
-                                    Paint.FontMetricsInt fm) {
+                                    Paint.FontMetricsInt fmi) {
+        // Keep workPaint as is so that developers reuse the workspace.
         return foreach(null, text, start, end,
                        Layout.DIR_LEFT_TO_RIGHT, false,
-                       0, 0, 0, 0, fm, paint, workPaint, true);
+                       0, 0, 0, 0, fmi, paint, workPaint, true);
     }
 }
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index feae6cf..8a7cdd9 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -595,6 +595,17 @@
      * @param elapsedSeconds the elapsed time in seconds.
      */
     public static String formatElapsedTime(long elapsedSeconds) {
+        return formatElapsedTime(null, elapsedSeconds);
+    }
+    
+    /**
+     * Formats an elapsed time in the form "MM:SS" or "H:MM:SS"
+     * for display on the call-in-progress screen.
+     * 
+     * @param recycle {@link StringBuilder} to recycle, if possible
+     * @param elapsedSeconds the elapsed time in seconds.
+     */
+    public static String formatElapsedTime(StringBuilder recycle, long elapsedSeconds) {
         initFormatStrings();
 
         long hours = 0;
@@ -613,18 +624,24 @@
 
         String result;
         if (hours > 0) {
-            return formatElapsedTime(sElapsedFormatHMMSS, hours, minutes, seconds);
+            return formatElapsedTime(recycle, sElapsedFormatHMMSS, hours, minutes, seconds);
         } else {
-            return formatElapsedTime(sElapsedFormatMMSS, minutes, seconds);
+            return formatElapsedTime(recycle, sElapsedFormatMMSS, minutes, seconds);
         }
     }
 
     /**
      * Fast formatting of h:mm:ss
      */
-    private static String formatElapsedTime(String format, long hours, long minutes, long seconds) {
+    private static String formatElapsedTime(StringBuilder recycle, String format, long hours,
+            long minutes, long seconds) {
         if (FAST_FORMAT_HMMSS.equals(format)) {
-            StringBuffer sb = new StringBuffer(16);
+            StringBuilder sb = recycle;
+            if (sb == null) {
+                sb = new StringBuilder(8);
+            } else {
+                sb.setLength(0);
+            }
             sb.append(hours);
             sb.append(TIME_SEPARATOR);
             if (minutes < 10) { 
@@ -649,9 +666,15 @@
     /**
      * Fast formatting of m:ss
      */
-    private static String formatElapsedTime(String format, long minutes, long seconds) {
+    private static String formatElapsedTime(StringBuilder recycle, String format, long minutes,
+            long seconds) {
         if (FAST_FORMAT_MMSS.equals(format)) {
-            StringBuffer sb = new StringBuffer(16);
+            StringBuilder sb = recycle;
+            if (sb == null) {
+                sb = new StringBuilder(8);
+            } else {
+                sb.setLength(0);
+            }
             if (minutes < 10) { 
                 sb.append(TIME_PADDING);
             } else {
@@ -1028,8 +1051,9 @@
      * If FORMAT_NO_YEAR is set, then the year is not shown.
      * If neither FORMAT_SHOW_YEAR nor FORMAT_NO_YEAR are set, then the year
      * is shown only if it is different from the current year, or if the start
-     * and end dates fall on different years.
-     * 
+     * and end dates fall on different years.  If both are set,
+     * FORMAT_SHOW_YEAR takes precedence.
+     *
      * <p>
      * Normally the date is shown unless the start and end day are the same.
      * If FORMAT_SHOW_DATE is set, then the date is always shown, even for
@@ -1120,24 +1144,28 @@
         boolean abbrevMonth = (flags & (FORMAT_ABBREV_MONTH | FORMAT_ABBREV_ALL)) != 0;
         boolean noMonthDay = (flags & FORMAT_NO_MONTH_DAY) != 0;
         boolean numericDate = (flags & FORMAT_NUMERIC_DATE) != 0;
-    
-        Time startDate;
-        Time endDate;
-        
-        if (useUTC) {
-            startDate = new Time(Time.TIMEZONE_UTC);
-            endDate = new Time(Time.TIMEZONE_UTC);
-        } else {
-            startDate = new Time();
-            endDate = new Time();
-        }
-        
+
+        // If we're getting called with a single instant in time (from
+        // e.g. formatDateTime(), below), then we can skip a lot of
+        // computation below that'd otherwise be thrown out.
+        boolean isInstant = (startMillis == endMillis);
+
+        Time startDate = useUTC ? new Time(Time.TIMEZONE_UTC) : new Time();
         startDate.set(startMillis);
-        endDate.set(endMillis);
-        int startJulianDay = Time.getJulianDay(startMillis, startDate.gmtoff);
-        int endJulianDay = Time.getJulianDay(endMillis, endDate.gmtoff);
-        int dayDistance = endJulianDay - startJulianDay;
-        
+
+        Time endDate;
+        int dayDistance;
+        if (isInstant) {
+            endDate = startDate;
+            dayDistance = 0;
+        } else {
+            endDate = useUTC ? new Time(Time.TIMEZONE_UTC) : new Time();
+            endDate.set(endMillis);
+            int startJulianDay = Time.getJulianDay(startMillis, startDate.gmtoff);
+            int endJulianDay = Time.getJulianDay(endMillis, endDate.gmtoff);
+            dayDistance = endJulianDay - startJulianDay;
+        }
+
         // If the end date ends at 12am at the beginning of a day,
         // then modify it to make it look like it ends at midnight on
         // the previous day.  This will allow us to display "8pm - midnight",
@@ -1152,20 +1180,21 @@
         // and an end date of Nov 12 at 00:00.
         // If the start and end time are the same, then skip this and don't
         // adjust the date.
-        if ((endDate.hour | endDate.minute | endDate.second) == 0
-                && (!showTime || dayDistance <= 1) && (startMillis != endMillis)) {
+        if (!isInstant
+            && (endDate.hour | endDate.minute | endDate.second) == 0
+            && (!showTime || dayDistance <= 1)) {
             endDate.monthDay -= 1;
             endDate.normalize(true /* ignore isDst */);
         }
-        
+
         int startDay = startDate.monthDay;
         int startMonthNum = startDate.month;
         int startYear = startDate.year;
-    
+
         int endDay = endDate.monthDay;
         int endMonthNum = endDate.month;
         int endYear = endDate.year;
-    
+
         String startWeekDayString = "";
         String endWeekDayString = "";
         if (showWeekDay) {
@@ -1176,9 +1205,9 @@
                 weekDayFormat = WEEKDAY_FORMAT;
             }
             startWeekDayString = startDate.format(weekDayFormat);
-            endWeekDayString = endDate.format(weekDayFormat);
+            endWeekDayString = isInstant ? startWeekDayString : endDate.format(weekDayFormat);
         }
-        
+
         String startTimeString = "";
         String endTimeString = "";
         if (showTime) {
@@ -1204,7 +1233,7 @@
                 boolean capNoon = (flags & FORMAT_CAP_NOON) != 0;
                 boolean noMidnight = (flags & FORMAT_NO_MIDNIGHT) != 0;
                 boolean capMidnight = (flags & FORMAT_CAP_MIDNIGHT) != 0;
-    
+
                 boolean startOnTheHour = startDate.minute == 0 && startDate.second == 0;
                 boolean endOnTheHour = endDate.minute == 0 && endDate.second == 0;
                 if (abbrevTime && startOnTheHour) {
@@ -1220,20 +1249,41 @@
                         startTimeFormat = res.getString(com.android.internal.R.string.hour_minute_ampm);
                     }
                 }
-                if (abbrevTime && endOnTheHour) {
-                    if (capAMPM) {
-                        endTimeFormat = res.getString(com.android.internal.R.string.hour_cap_ampm);
+
+                // Don't waste time on setting endTimeFormat when
+                // we're dealing with an instant, where we'll never
+                // need the end point.  (It's the same as the start
+                // point)
+                if (!isInstant) {
+                    if (abbrevTime && endOnTheHour) {
+                        if (capAMPM) {
+                            endTimeFormat = res.getString(com.android.internal.R.string.hour_cap_ampm);
+                        } else {
+                            endTimeFormat = res.getString(com.android.internal.R.string.hour_ampm);
+                        }
                     } else {
-                        endTimeFormat = res.getString(com.android.internal.R.string.hour_ampm);
+                        if (capAMPM) {
+                            endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_cap_ampm);
+                        } else {
+                            endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_ampm);
+                        }
                     }
-                } else {
-                    if (capAMPM) {
-                        endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_cap_ampm);
-                    } else {
-                        endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_ampm);
+
+                    if (endDate.hour == 12 && endOnTheHour && !noNoon) {
+                        if (capNoon) {
+                            endTimeFormat = res.getString(com.android.internal.R.string.Noon);
+                        } else {
+                            endTimeFormat = res.getString(com.android.internal.R.string.noon);
+                        }
+                    } else if (endDate.hour == 0 && endOnTheHour && !noMidnight) {
+                        if (capMidnight) {
+                            endTimeFormat = res.getString(com.android.internal.R.string.Midnight);
+                        } else {
+                            endTimeFormat = res.getString(com.android.internal.R.string.midnight);
+                        }
                     }
                 }
-                
+
                 if (startDate.hour == 12 && startOnTheHour && !noNoon) {
                     if (capNoon) {
                         startTimeFormat = res.getString(com.android.internal.R.string.Noon);
@@ -1243,37 +1293,32 @@
                     // Don't show the start time starting at midnight.  Show
                     // 12am instead.
                 }
-                
-                if (endDate.hour == 12 && endOnTheHour && !noNoon) {
-                    if (capNoon) {
-                        endTimeFormat = res.getString(com.android.internal.R.string.Noon);
-                    } else {
-                        endTimeFormat = res.getString(com.android.internal.R.string.noon);
-                    }
-                } else if (endDate.hour == 0 && endOnTheHour && !noMidnight) {
-                    if (capMidnight) {
-                        endTimeFormat = res.getString(com.android.internal.R.string.Midnight);
-                    } else {
-                        endTimeFormat = res.getString(com.android.internal.R.string.midnight);
-                    }
-                }
             }
+
             startTimeString = startDate.format(startTimeFormat);
-            endTimeString = endDate.format(endTimeFormat);
+            endTimeString = isInstant ? startTimeString : endDate.format(endTimeFormat);
         }
-        
-        // Get the current year
-        long millis = System.currentTimeMillis();
-        Time time = new Time();
-        time.set(millis);
-        int currentYear = time.year;
-    
+
         // Show the year if the user specified FORMAT_SHOW_YEAR or if
         // the starting and end years are different from each other
         // or from the current year.  But don't show the year if the
-        // user specified FORMAT_NO_YEAR;
-        showYear = showYear || (!noYear && (startYear != endYear || startYear != currentYear));
-        
+        // user specified FORMAT_NO_YEAR.
+        if (showYear) {
+            // No code... just a comment for clarity.  Keep showYear
+            // on, as they enabled it with FORMAT_SHOW_YEAR.  This
+            // takes precedence over them setting FORMAT_NO_YEAR.
+        } else if (noYear) {
+            // They explicitly didn't want a year.
+            showYear = false;
+        } else if (startYear != endYear) {
+            showYear = true;
+        } else {
+            // Show the year if it's not equal to the current year.
+            Time currentTime = new Time();
+            currentTime.setToNow();
+            showYear = startYear != currentTime.year;
+        }
+
         String defaultDateFormat, fullFormat, dateRange;
         if (numericDate) {
             defaultDateFormat = res.getString(com.android.internal.R.string.numeric_date);
@@ -1306,7 +1351,7 @@
                 }
             }
         }
-        
+
         if (showWeekDay) {
             if (showTime) {
                 fullFormat = res.getString(com.android.internal.R.string.wday1_date1_time1_wday2_date2_time2);
@@ -1320,20 +1365,20 @@
                 fullFormat = res.getString(com.android.internal.R.string.date1_date2);
             }
         }
-        
+
         if (noMonthDay && startMonthNum == endMonthNum) {
             // Example: "January, 2008"
             String startDateString = startDate.format(defaultDateFormat);
             return startDateString;
         }
-    
+
         if (startYear != endYear || noMonthDay) {
             // Different year or we are not showing the month day number.
             // Example: "December 31, 2007 - January 1, 2008"
             // Or: "January - February, 2008"
             String startDateString = startDate.format(defaultDateFormat);
             String endDateString = endDate.format(defaultDateFormat);
-    
+
             // The values that are used in a fullFormat string are specified
             // by position.
             dateRange = String.format(fullFormat,
@@ -1341,7 +1386,7 @@
                     endWeekDayString, endDateString, endTimeString);
             return dateRange;
         }
-        
+
         // Get the month, day, and year strings for the start and end dates
         String monthFormat;
         if (numericDate) {
@@ -1354,16 +1399,17 @@
         String startMonthString = startDate.format(monthFormat);
         String startMonthDayString = startDate.format(MONTH_DAY_FORMAT);
         String startYearString = startDate.format(YEAR_FORMAT);
-        String endMonthString = endDate.format(monthFormat);
-        String endMonthDayString = endDate.format(MONTH_DAY_FORMAT);
-        String endYearString = endDate.format(YEAR_FORMAT);
-        
+
+        String endMonthString = isInstant ? null : endDate.format(monthFormat);
+        String endMonthDayString = isInstant ? null : endDate.format(MONTH_DAY_FORMAT);
+        String endYearString = isInstant ? null : endDate.format(YEAR_FORMAT);
+
         if (startMonthNum != endMonthNum) {
             // Same year, different month.
             // Example: "October 28 - November 3"
             // or: "Wed, Oct 31 - Sat, Nov 3, 2007"
             // or: "Oct 31, 8am - Sat, Nov 3, 2007, 5pm"
-            
+
             int index = 0;
             if (showWeekDay) index = 1;
             if (showYear) index += 2;
@@ -1371,7 +1417,7 @@
             if (numericDate) index += 8;
             int resId = sameYearTable[index];
             fullFormat = res.getString(resId);
-            
+
             // The values that are used in a fullFormat string are specified
             // by position.
             dateRange = String.format(fullFormat,
@@ -1381,7 +1427,7 @@
                     endYearString, endTimeString);
             return dateRange;
         }
-    
+
         if (startDay != endDay) {
             // Same month, different day.
             int index = 0;
@@ -1391,7 +1437,7 @@
             if (numericDate) index += 8;
             int resId = sameMonthTable[index];
             fullFormat = res.getString(resId);
-            
+
             // The values that are used in a fullFormat string are specified
             // by position.
             dateRange = String.format(fullFormat,
@@ -1401,19 +1447,19 @@
                     endYearString, endTimeString);
             return dateRange;
         }
-        
+
         // Same start and end day
         boolean showDate = (flags & FORMAT_SHOW_DATE) != 0;
-        
+
         // If nothing was specified, then show the date.
         if (!showTime && !showDate && !showWeekDay) showDate = true;
-        
+
         // Compute the time string (example: "10:00 - 11:00 am")
         String timeString = "";
         if (showTime) {
             // If the start and end time are the same, then just show the
             // start time.
-            if (startMillis == endMillis) {
+            if (isInstant) {
                 // Same start and end time.
                 // Example: "10:15 AM"
                 timeString = startTimeString;
@@ -1423,7 +1469,7 @@
                 timeString = String.format(timeFormat, startTimeString, endTimeString);
             }
         }
-    
+
         // Figure out which full format to use.
         fullFormat = "";
         String dateString = "";
@@ -1457,7 +1503,7 @@
         } else if (showTime) {
             return timeString;
         }
-    
+
         // The values that are used in a fullFormat string are specified
         // by position.
         dateRange = String.format(fullFormat, timeString, startWeekDayString, dateString);
diff --git a/core/java/android/text/method/NumberKeyListener.java b/core/java/android/text/method/NumberKeyListener.java
index e500fae..9270ca5 100644
--- a/core/java/android/text/method/NumberKeyListener.java
+++ b/core/java/android/text/method/NumberKeyListener.java
@@ -101,6 +101,11 @@
             selEnd = Math.max(a, b);
         }
 
+        if (selStart < 0 || selEnd < 0) {
+            selStart = selEnd = 0;
+            Selection.setSelection(content, 0);
+        }
+
         int i = event != null ? lookup(event, content) : 0;
         int repeatCount = event != null ? event.getRepeatCount() : 0;
         if (repeatCount == 0) {
diff --git a/core/java/android/view/GestureDetector.java b/core/java/android/view/GestureDetector.java
index 679c683..e0231a7b 100644
--- a/core/java/android/view/GestureDetector.java
+++ b/core/java/android/view/GestureDetector.java
@@ -113,20 +113,48 @@
     }
 
     /**
-     * @hide pending API council
+     * The listener that is used to notify when a double-tap or a confirmed
+     * single-tap occur.
      */
     public interface OnDoubleTapListener {
+        /**
+         * Notified when a single-tap occurs.
+         * <p>
+         * Unlike {@link OnGestureListener#onSingleTapUp(MotionEvent)}, this
+         * will only be called after the detector is confident that the user's
+         * first tap is not followed by a second tap leading to a double-tap
+         * gesture.
+         *
+         * @param e The down motion event of the single-tap.
+         * @return true if the event is consumed, else false
+         */
         boolean onSingleTapConfirmed(MotionEvent e);
+ 
+        /**
+         * Notified when a double-tap occurs.
+         *
+         * @param e The down motion event of the first tap of the double-tap.
+         * @return true if the event is consumed, else false
+         */
+        boolean onDoubleTap(MotionEvent e);
+
+        /**
+         * Notified when an event within a double-tap gesture occurs, including
+         * the down, move, and up events.
+         *
+         * @param e The motion event that occurred during the double-tap gesture.
+         * @return true if the event is consumed, else false
+         */
         boolean onDoubleTapEvent(MotionEvent e);
     }
-    
+
     /**
-     * A convenience class to extend when you only want to listen for a
-     * subset of all the gestures. This implements all methods in the
-     * {@link OnGestureListener} but does nothing and return {@code false}
-     * for all applicable methods.
+     * A convenience class to extend when you only want to listen for a subset
+     * of all the gestures. This implements all methods in the
+     * {@link OnGestureListener} and {@link OnDoubleTapListener} but does
+     * nothing and return {@code false} for all applicable methods.
      */
-    public static class SimpleOnGestureListener implements OnGestureListener {
+    public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener {
         public boolean onSingleTapUp(MotionEvent e) {
             return false;
         }
@@ -150,13 +178,25 @@
         public boolean onDown(MotionEvent e) {
             return false;
         }
+
+        public boolean onDoubleTap(MotionEvent e) {
+            return false;
+        }
+
+        public boolean onDoubleTapEvent(MotionEvent e) {
+            return false;
+        }
+
+        public boolean onSingleTapConfirmed(MotionEvent e) {
+            return false;
+        }
     }
 
     // TODO: ViewConfiguration
     private int mBiggerTouchSlopSquare = 20 * 20;
-    
+
     private int mTouchSlopSquare;
-    private int mDoubleTapSlopSquare;    
+    private int mDoubleTapSlopSquare;
     private int mMinimumFlingVelocity;
 
     private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
@@ -164,7 +204,7 @@
     // TODO make new double-tap timeout, and define its events (i.e. either time
     // between down-down or time between up-down)
     private static final int DOUBLE_TAP_TIMEOUT = ViewConfiguration.getDoubleTapTimeout();
-    
+
     // constants for Message.what used by GestureHandler below
     private static final int SHOW_PRESS = 1;
     private static final int LONG_PRESS = 2;
@@ -181,13 +221,13 @@
 
     private MotionEvent mCurrentDownEvent;
     private MotionEvent mPreviousUpEvent;
-    
+
     /**
      * True when the user is still touching for the second tap (down, move, and
      * up events). Can only be true if there is a double tap listener attached.
      */
     private boolean mIsDoubleTapping;
-    
+
     private float mLastMotionY;
     private float mLastMotionX;
 
@@ -226,7 +266,7 @@
                 break;
 
             default:
-                throw new RuntimeException("Unknown message " + msg); //never                
+                throw new RuntimeException("Unknown message " + msg); //never
             }
         }
     }
@@ -303,6 +343,9 @@
             mHandler = new GestureHandler();
         }
         mListener = listener;
+        if (listener instanceof OnDoubleTapListener) {
+            setOnDoubleTapListener((OnDoubleTapListener) listener);
+        }
         init(context);
     }
 
@@ -331,8 +374,11 @@
     }
 
     /**
-     * @hide pending API council
-     * @param onDoubleTapListener
+     * Sets the listener which will be called for double-tap and related
+     * gestures.
+     * 
+     * @param onDoubleTapListener the listener invoked for all the callbacks, or
+     *        null to stop listening for double-tap gestures.
      */
     public void setOnDoubleTapListener(OnDoubleTapListener onDoubleTapListener) {
         mDoubleTapListener = onDoubleTapListener;
@@ -387,7 +433,10 @@
                         isConsideredDoubleTap(mCurrentDownEvent, mPreviousUpEvent, ev)) {
                     // This is a second tap
                     mIsDoubleTapping = true;
-                    handled = mDoubleTapListener.onDoubleTapEvent(ev);  
+                    // Give a callback with the first tap of the double-tap
+                    handled |= mDoubleTapListener.onDoubleTap(mCurrentDownEvent);
+                    // Give a callback with down event of the double-tap
+                    handled |= mDoubleTapListener.onDoubleTapEvent(ev);
                 } else {
                     // This is a first tap
                     mHandler.sendEmptyMessageDelayed(TAP, DOUBLE_TAP_TIMEOUT);
@@ -418,7 +467,8 @@
             final float scrollX = mLastMotionX - x;
             final float scrollY = mLastMotionY - y;
             if (mIsDoubleTapping) {
-                handled = mDoubleTapListener.onDoubleTapEvent(ev);
+                // Give the move events of the double-tap
+                handled |= mDoubleTapListener.onDoubleTapEvent(ev);
             } else if (mAlwaysInTapRegion) {
                 final int deltaX = (int) (x - mCurrentDownEvent.getX());
                 final int deltaY = (int) (y - mCurrentDownEvent.getY());
@@ -446,7 +496,8 @@
             mStillDown = false;
             MotionEvent currentUpEvent = MotionEvent.obtain(ev);
             if (mIsDoubleTapping) {
-                handled = mDoubleTapListener.onDoubleTapEvent(ev);
+                // Finally, give the up event of the double-tap
+                handled |= mDoubleTapListener.onDoubleTapEvent(ev);
                 mIsDoubleTapping = false;
                 break;
             } else if (mInLongPress) {
@@ -495,7 +546,7 @@
         if (!mAlwaysInBiggerTapRegion) {
             return false;
         }
-        
+
         if (secondDown.getEventTime() - firstUp.getEventTime() > DOUBLE_TAP_TIMEOUT) {
             return false;
         }
@@ -504,7 +555,7 @@
         int deltaY = (int) firstDown.getY() - (int) secondDown.getY();
         return (deltaX * deltaX + deltaY * deltaY < mDoubleTapSlopSquare);
     }
-    
+
     private void dispatchLongPress() {
         mHandler.removeMessages(TAP);
         mInLongPress = true;
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index d6ea91c..430cc71 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -229,6 +229,12 @@
     public static final int FLAG_SOFT_KEYBOARD = 0x2;
     
     /**
+     * This mask is set if we don't want the key event to cause us to leave
+     * touch mode.
+     */
+    public static final int FLAG_KEEP_TOUCH_MODE = 0x4;
+    
+    /**
      * Returns the maximum keycode.
      */
     public static int getMaxKeyCode() {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 5ed3a7e..406fad8 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -57,6 +57,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.lang.ref.SoftReference;
 
 /**
  * <p>
@@ -1563,7 +1564,7 @@
 
     private int[] mDrawableState = null;
 
-    private Bitmap mDrawingCache;
+    private SoftReference<Bitmap> mDrawingCache;
 
     /**
      * When this view has focus and the next focus is {@link #FOCUS_LEFT},
@@ -3950,25 +3951,16 @@
         }
 
         if ((changed & WILL_NOT_CACHE_DRAWING) != 0) {
-            if (mDrawingCache != null) {
-                mDrawingCache.recycle();
-            }
-            mDrawingCache = null;
+            destroyDrawingCache();
         }
 
         if ((changed & DRAWING_CACHE_ENABLED) != 0) {
-            if (mDrawingCache != null) {
-                mDrawingCache.recycle();
-            }
-            mDrawingCache = null;
+            destroyDrawingCache();
             mPrivateFlags &= ~DRAWING_CACHE_VALID;
         }
 
         if ((changed & DRAWING_CACHE_QUALITY_MASK) != 0) {
-            if (mDrawingCache != null) {
-                mDrawingCache.recycle();
-            }
-            mDrawingCache = null;
+            destroyDrawingCache();
             mPrivateFlags &= ~DRAWING_CACHE_VALID;
         }
 
@@ -5415,11 +5407,10 @@
         if ((mViewFlags & WILL_NOT_CACHE_DRAWING) == WILL_NOT_CACHE_DRAWING) {
             return null;
         }
-        if ((mViewFlags & DRAWING_CACHE_ENABLED) == DRAWING_CACHE_ENABLED &&
-            ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDrawingCache == null)) {
+        if ((mViewFlags & DRAWING_CACHE_ENABLED) == DRAWING_CACHE_ENABLED) {
             buildDrawingCache();
         }
-        return mDrawingCache;
+        return mDrawingCache == null ? null : mDrawingCache.get();
     }
 
     /**
@@ -5434,7 +5425,8 @@
      */
     public void destroyDrawingCache() {
         if (mDrawingCache != null) {
-            mDrawingCache.recycle();
+            final Bitmap bitmap = mDrawingCache.get();
+            if (bitmap != null) bitmap.recycle();
             mDrawingCache = null;
         }
     }
@@ -5474,7 +5466,9 @@
      * @see #destroyDrawingCache()
      */
     public void buildDrawingCache() {
-        if ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDrawingCache == null) {
+        if ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDrawingCache == null ||
+                mDrawingCache.get() == null) {
+
             if (ViewDebug.TRACE_HIERARCHY) {
                 ViewDebug.trace(this, ViewDebug.HierarchyTraceType.BUILD_CACHE);
             }
@@ -5492,15 +5486,12 @@
             if (width <= 0 || height <= 0 ||
                     (width * height * (opaque ? 2 : 4) >= // Projected bitmap size in bytes
                             ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize())) {
-                if (mDrawingCache != null) {
-                    mDrawingCache.recycle();
-                }
-                mDrawingCache = null;
+                destroyDrawingCache();
                 return;
             }
 
             boolean clear = true;
-            Bitmap bitmap = mDrawingCache;
+            Bitmap bitmap = mDrawingCache == null ? null : mDrawingCache.get();
 
             if (bitmap == null || bitmap.getWidth() != width || bitmap.getHeight() != height) {
 
@@ -5525,12 +5516,11 @@
                 }
 
                 // Try to cleanup memory
-                if (mDrawingCache != null) {
-                    mDrawingCache.recycle();
-                }
+                if (bitmap != null) bitmap.recycle();
 
                 try {
-                    mDrawingCache = bitmap = Bitmap.createBitmap(width, height, quality);
+                    bitmap = Bitmap.createBitmap(width, height, quality);
+                    mDrawingCache = new SoftReference<Bitmap>(bitmap);
                 } catch (OutOfMemoryError e) {
                     // If there is not enough memory to create the bitmap cache, just
                     // ignore the issue as bitmap caches are not required to draw the
@@ -8060,7 +8050,8 @@
                 shader = new LinearGradient(0, 0, 0, 1, color, 0, Shader.TileMode.CLAMP);
                 
                 paint.setShader(shader);
-                paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
+                // Restore the default transfer mode (src_over)
+                paint.setXfermode(null);
             }
         }
     }
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 2f7b0d1..d3f48c6 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -56,7 +56,7 @@
     
     /**
      * Defines the duration in milliseconds we will wait to see if a touch event 
-     * is a top or a scroll. If the user does not move within this interval, it is
+     * is a tap or a scroll. If the user does not move within this interval, it is
      * considered to be a tap. 
      */
     private static final int TAP_TIMEOUT = 100;
@@ -213,7 +213,7 @@
     }
 
     /**
-     * @return Defines the length of the fading edges in pixels
+     * @return the length of the fading edges in pixels
      *
      * @deprecated Use {@link #getScaledFadingEdgeLength()} instead.
      */
@@ -223,14 +223,14 @@
     }
 
     /**
-     * @return Defines the length of the fading edges in pixels
+     * @return the length of the fading edges in pixels
      */
     public int getScaledFadingEdgeLength() {
         return mFadingEdgeLength;
     }
 
     /**
-     * @return Defines the duration in milliseconds of the pressed state in child
+     * @return the duration in milliseconds of the pressed state in child
      * components.
      */
     public static int getPressedStateDuration() {
@@ -238,7 +238,7 @@
     }
     
     /**
-     * @return Defines the duration in milliseconds before a press turns into
+     * @return the duration in milliseconds before a press turns into
      * a long press
      */
     public static int getLongPressTimeout() {
@@ -246,8 +246,8 @@
     }
     
     /**
-     * @return Defines the duration in milliseconds we will wait to see if a touch event 
-     * is a top or a scroll. If the user does not move within this interval, it is
+     * @return the duration in milliseconds we will wait to see if a touch event
+     * is a tap or a scroll. If the user does not move within this interval, it is
      * considered to be a tap. 
      */
     public static int getTapTimeout() {
@@ -255,7 +255,7 @@
     }
     
     /**
-     * @return Defines the duration in milliseconds we will wait to see if a touch event 
+     * @return the duration in milliseconds we will wait to see if a touch event
      * is a jump tap. If the user does not move within this interval, it is
      * considered to be a tap. 
      */
@@ -264,7 +264,7 @@
     }
     
     /**
-     * @return Defines the duration in milliseconds between the first tap's up event and
+     * @return the duration in milliseconds between the first tap's up event and
      * the second tap's down event for an interaction to be considered a
      * double-tap.
      * @hide pending API council
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 3cfaf1b..de64d0e 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -143,6 +143,7 @@
     boolean mFullRedrawNeeded;
     boolean mNewSurfaceNeeded;
     boolean mHasHadWindowFocus;
+    boolean mLastWasImTarget;
 
     boolean mWindowAttributesChanged = false;
 
@@ -998,6 +999,21 @@
         mNewSurfaceNeeded = false;
         mViewVisibility = viewVisibility;
 
+        if (mAttachInfo.mHasWindowFocus) {
+            final boolean imTarget = WindowManager.LayoutParams
+                    .mayUseInputMethod(mWindowAttributes.flags);
+            if (imTarget != mLastWasImTarget) {
+                mLastWasImTarget = imTarget;
+                InputMethodManager imm = InputMethodManager.peekInstance();
+                if (imm != null && imTarget) {
+                    imm.startGettingWindowFocus(mView);
+                    imm.onWindowFocus(mView, mView.findFocus(),
+                            mWindowAttributes.softInputMode,
+                            !mHasHadWindowFocus, mWindowAttributes.flags);
+                }
+            }
+        }
+        
         boolean cancelDraw = attachInfo.mTreeObserver.dispatchOnPreDraw();
 
         if (!cancelDraw && !newSurface) {
@@ -1176,7 +1192,7 @@
                 // properly re-composite its drawing on a transparent
                 // background. This automatically respects the clip/dirty region
                 if (!canvas.isOpaque()) {
-                    canvas.drawColor(0xff0000ff, PorterDuff.Mode.CLEAR);
+                    canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
                 } else if (yoff != 0) {
                     // If we are applying an offset, we need to clear the area
                     // where the offset doesn't appear to avoid having garbage
@@ -1608,10 +1624,13 @@
                     }
                 }
                 
+                mLastWasImTarget = WindowManager.LayoutParams
+                        .mayUseInputMethod(mWindowAttributes.flags);
+                
                 InputMethodManager imm = InputMethodManager.peekInstance();
                 if (mView != null) {
-                    if (hasWindowFocus && imm != null) {
-                        imm.startGettingWindowFocus();
+                    if (hasWindowFocus && imm != null && mLastWasImTarget) {
+                        imm.startGettingWindowFocus(mView);
                     }
                     mView.dispatchWindowFocusChanged(hasWindowFocus);
                 }
@@ -1619,7 +1638,7 @@
                 // Note: must be done after the focus change callbacks,
                 // so all of the view state is set up correctly.
                 if (hasWindowFocus) {
-                    if (imm != null) {
+                    if (imm != null && mLastWasImTarget) {
                         imm.onWindowFocus(mView, mView.findFocus(),
                                 mWindowAttributes.softInputMode,
                                 !mHasHadWindowFocus, mWindowAttributes.flags);
@@ -1976,6 +1995,9 @@
         if (event.getAction() != KeyEvent.ACTION_DOWN) {
             return false;
         }
+        if ((event.getFlags()&KeyEvent.FLAG_KEEP_TOUCH_MODE) != 0) {
+            return false;
+        }
 
         // only relevant if we are in touch mode
         if (!mAttachInfo.mInTouchMode) {
@@ -2095,8 +2117,7 @@
         // If it is possible for this window to interact with the input
         // method window, then we want to first dispatch our key events
         // to the input method.
-        if (WindowManager.LayoutParams.mayUseInputMethod(
-                mWindowAttributes.flags)) {
+        if (mLastWasImTarget) {
             InputMethodManager imm = InputMethodManager.peekInstance();
             if (imm != null && mView != null) {
                 int seq = enqueuePendingEvent(event, sendDone);
@@ -2126,6 +2147,10 @@
                     sWindowSession.finishKey(mWindow);
                 } catch (RemoteException e) {
                 }
+            } else {
+                Log.w("ViewRoot", "handleFinishedEvent(seq=" + seq
+                        + " handled=" + handled + " ev=" + event
+                        + ") neither delivering nor finishing key");
             }
         }
     }
@@ -2448,6 +2473,8 @@
             final ViewRoot viewRoot = mViewRoot.get();
             if (viewRoot != null) {
                 viewRoot.dispatchKey(event);
+            } else {
+                Log.w("ViewRoot.W", "Key event " + event + " but no ViewRoot available!");
             }
         }
 
diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java
index 6fbc174..52b4107 100644
--- a/core/java/android/view/inputmethod/BaseInputConnection.java
+++ b/core/java/android/view/inputmethod/BaseInputConnection.java
@@ -341,6 +341,13 @@
     /**
      * The default implementation does nothing.
      */
+    public boolean performEditorAction(int actionCode) {
+        return false;
+    }
+
+    /**
+     * The default implementation does nothing.
+     */
     public boolean performContextMenuAction(int id) {
         return false;
     }
diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java
index b2f26d7..0405371 100644
--- a/core/java/android/view/inputmethod/EditorInfo.java
+++ b/core/java/android/view/inputmethod/EditorInfo.java
@@ -25,17 +25,100 @@
     public int inputType = TYPE_NULL;
 
     /**
-     * A string supplying additional information about the content type that
-     * is private to a particular IME implementation.  The string must be
+     * Set of bits in {@link #imeOptions} that provide alternative actions
+     * associated with the "enter" key.  This both helps the IME provide
+     * better feedback about what the enter key will do, and also allows it
+     * to provide alternative mechanisms for providing that command.
+     */
+    public static final int IME_MASK_ACTION = 0x000000ff;
+    
+    /**
+     * Bits of {@link #IME_MASK_ACTION}: there is no special action
+     * associated with this editor.
+     */
+    public static final int IME_ACTION_NONE = 0x00000000;
+    
+    /**
+     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "go"
+     * operation to take the user to the target of the text they typed.
+     * Typically used, for example, when entering a URL.
+     */
+    public static final int IME_ACTION_GO = 0x00000001;
+    
+    /**
+     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "search"
+     * operation, taking the user to the results of searching for the text
+     * the have typed (in whatever context is appropriate).
+     */
+    public static final int IME_ACTION_SEARCH = 0x00000002;
+    
+    /**
+     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "send"
+     * operation, delivering the text to its target.  This is typically used
+     * when composing a message.
+     */
+    public static final int IME_ACTION_SEND = 0x00000003;
+    
+    /**
+     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "next"
+     * operation, taking the user to the next field that will accept text.
+     */
+    public static final int IME_ACTION_NEXT = 0x00000004;
+    
+    /**
+     * Flag of {@link #imeOptions}: used in conjunction with
+     * {@link #IME_MASK_ACTION}, this indicates that the action should not
+     * be available in-line as the same as a "enter" key.  Typically this is
+     * because the action has such a significant impact or is not recoverable
+     * enough that accidentally hitting it should be avoided, such as sending
+     * a message.
+     */
+    public static final int IME_FLAG_NO_ENTER_ACTION = 0x40000000;
+    
+    /**
+     * Generic non-special type for {@link #imeOptions}.
+     */
+    public static final int IME_NORMAL = 0x00000000;
+    
+    /**
+     * Special code for when the ime option has been undefined.  This is not
+     * used with the EditorInfo structure, but can be used elsewhere.
+     */
+    public static final int IME_UNDEFINED = 0x80000000;
+    
+    /**
+     * Extended type information for the editor, to help the IME better
+     * integrate with it.
+     */
+    public int imeOptions = IME_NORMAL;
+    
+    /**
+     * A string supplying additional information options that are
+     * private to a particular IME implementation.  The string must be
      * scoped to a package owned by the implementation, to ensure there are
      * no conflicts between implementations, but other than that you can put
      * whatever you want in it to communicate with the IME.  For example,
      * you could have a string that supplies an argument like
      * <code>"com.example.myapp.SpecialMode=3"</code>.  This field is can be
-     * filled in from the {@link android.R.attr#editorPrivateContentType}
+     * filled in from the {@link android.R.attr#privateImeOptions}
      * attribute of a TextView.
      */
-    public String privateContentType = null;
+    public String privateImeOptions = null;
+    
+    /**
+     * In some cases an IME may be able to display an arbitrary label for
+     * a command the user can perform, which you can specify here.  You can
+     * not count on this being used.
+     */
+    public CharSequence actionLabel = null;
+    
+    /**
+     * If {@link #actionLabel} has been given, this is the id for that command
+     * when the user presses its button that is delivered back with
+     * {@link InputConnection#performEditorAction(int)
+     * InputConnection.performEditorAction()}.
+     */
+    public int actionId = 0;
     
     /**
      * The text offset of the start of the selection at the time editing
@@ -106,7 +189,10 @@
      */
     public void dump(Printer pw, String prefix) {
         pw.println(prefix + "inputType=0x" + Integer.toHexString(inputType)
-                + " privateContentType=" + privateContentType);
+                + " imeOptions=0x" + Integer.toHexString(imeOptions)
+                + " privateImeOptions=" + privateImeOptions);
+        pw.println(prefix + "actionLabel=" + actionLabel
+                + " actionId=" + actionId);
         pw.println(prefix + "initialSelStart=" + initialSelStart
                 + " initialSelEnd=" + initialSelEnd
                 + " initialCapsMode=0x"
@@ -127,7 +213,10 @@
      */
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(inputType);
-        dest.writeString(privateContentType);
+        dest.writeInt(imeOptions);
+        dest.writeString(privateImeOptions);
+        TextUtils.writeToParcel(actionLabel, dest, flags);
+        dest.writeInt(actionId);
         dest.writeInt(initialSelStart);
         dest.writeInt(initialSelEnd);
         dest.writeInt(initialCapsMode);
@@ -146,7 +235,10 @@
         public EditorInfo createFromParcel(Parcel source) {
             EditorInfo res = new EditorInfo();
             res.inputType = source.readInt();
-            res.privateContentType = source.readString();
+            res.imeOptions = source.readInt();
+            res.privateImeOptions = source.readString();
+            res.actionLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+            res.actionId = source.readInt();
             res.initialSelStart = source.readInt();
             res.initialSelEnd = source.readInt();
             res.initialCapsMode = source.readInt();
diff --git a/core/java/android/view/inputmethod/InputConnection.java b/core/java/android/view/inputmethod/InputConnection.java
index 530127d..32cce35 100644
--- a/core/java/android/view/inputmethod/InputConnection.java
+++ b/core/java/android/view/inputmethod/InputConnection.java
@@ -208,10 +208,24 @@
     /**
      * Set the selection of the text editor.  To set the cursor position,
      * start and end should have the same value.
+     * @return Returns true on success, false if the input connection is no longer
+     * valid.
      */
     public boolean setSelection(int start, int end);
     
     /**
+     * Have the editor perform an action it has said it can do.
+     * 
+     * @param editorAction This must be one of the action constants for
+     * {@link EditorInfo#imeOptions EditorInfo.editorType}, such as
+     * {@link EditorInfo#IME_ACTION_GO EditorInfo.EDITOR_ACTION_GO}.
+     * 
+     * @return Returns true on success, false if the input connection is no longer
+     * valid.
+     */
+    public boolean performEditorAction(int editorAction);
+    
+    /**
      * Perform a context menu action on the field.  The given id may be one of:
      * {@link android.R.id#selectAll},
      * {@link android.R.id#startSelectingText}, {@link android.R.id#stopSelectingText},
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 91fa211..e9e4703 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -222,6 +222,11 @@
     // -----------------------------------------------------------
     
     /**
+     * This is the root view of the overall window that currently has input
+     * method focus.
+     */
+    View mCurRootView;
+    /**
      * This is the view that should currently be served by an input method,
      * regardless of the state of setting that up.
      */
@@ -840,6 +845,13 @@
 
     void focusInLocked(View view) {
         if (DEBUG) Log.v(TAG, "focusIn: " + view);
+        
+        if (mCurRootView != view.getRootView()) {
+            // This is a request from a window that isn't in the window with
+            // IME focus, so ignore it.
+            return;
+        }
+        
         // Okay we have a new view that is being served.
         if (mServedView != view) {
             mCurrentTextBoxAttribute = null;
@@ -913,7 +925,7 @@
     }
     
     /**
-     * Called by ViewRoot the first time it gets window focus.
+     * Called by ViewRoot when its window gets input focus.
      * @hide
      */
     public void onWindowFocus(View rootView, View focusedView, int softInputMode,
@@ -946,9 +958,10 @@
     }
     
     /** @hide */
-    public void startGettingWindowFocus() {
+    public void startGettingWindowFocus(View rootView) {
         synchronized (mH) {
             mWindowFocusedView = null;
+            mCurRootView = rootView;
         }
     }
     
@@ -1165,6 +1178,7 @@
                 + " mBindSequence=" + mBindSequence
                 + " mCurId=" + mCurId);
         p.println("  mCurMethod=" + mCurMethod);
+        p.println("  mCurRootView=" + mCurRootView);
         p.println("  mServedView=" + mServedView);
         p.println("  mLastServedView=" + mLastServedView);
         p.println("  mServedConnecting=" + mServedConnecting);
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 4f8e5e4..84aeb83 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -907,10 +907,12 @@
     }
 
     public void onReceivedIcon(Bitmap icon) {
-        if (Config.DEBUG && mBackForwardList.getCurrentItem() == null) {
-            throw new AssertionError();
+        // The current item might be null if the icon was already stored in the
+        // database and this is a new WebView.
+        WebHistoryItem i = mBackForwardList.getCurrentItem();
+        if (i != null) {
+            i.setFavicon(icon);
         }
-        mBackForwardList.getCurrentItem().setFavicon(icon);
         // Do an unsynchronized quick check to avoid posting if no callback has
         // been set.
         if (mWebChromeClient == null) {
diff --git a/core/java/android/webkit/TextDialog.java b/core/java/android/webkit/TextDialog.java
index c2620a5..8a82411 100644
--- a/core/java/android/webkit/TextDialog.java
+++ b/core/java/android/webkit/TextDialog.java
@@ -25,8 +25,6 @@
 import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.ShapeDrawable;
 import android.graphics.drawable.shapes.RectShape;
-import android.os.Handler;
-import android.os.Message;
 import android.text.Editable;
 import android.text.InputFilter;
 import android.text.Selection;
@@ -43,7 +41,6 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewConfiguration;
 import android.widget.AbsoluteLayout.LayoutParams;
 import android.widget.ArrayAdapter;
 import android.widget.AutoCompleteTextView;
@@ -82,22 +79,6 @@
     // FIXME: This can be replaced with TextView.NO_FILTERS if that
     // is made public/protected.
     private static final InputFilter[] NO_FILTERS = new InputFilter[0];
-    // The time of the last enter down, so we know whether to perform a long
-    // press.
-    private long            mDownTime;
-
-    private boolean         mTrackballDown = false;
-    private static int      LONGPRESS = 1;
-    private Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            if (msg.what == LONGPRESS) {
-                if (mTrackballDown) {
-                    performLongClick();
-                    mTrackballDown = false;
-                }
-            }
-        }
-    };
 
     /**
      * Create a new TextDialog.
@@ -135,6 +116,13 @@
     }
 
     @Override
+    protected boolean shouldAdvanceFocusOnEnter() {
+        // In the browser, single line textfields use enter as a form submit,
+        // so we never want to advance the focus on enter.
+        return false;
+    }
+
+    @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
         if (event.isSystem()) {
             return super.dispatchKeyEvent(event);
@@ -152,43 +140,33 @@
             return true;
         }
 
-        // For single-line textfields, return key should not be handled
-        // here.  Instead, the WebView is passed the key up, so it may fire a
-        // submit/onClick.
-        // Center key should always be passed to a potential onClick
-        if ((mSingle && KeyEvent.KEYCODE_ENTER == keyCode)
-                || KeyEvent.KEYCODE_DPAD_CENTER == keyCode) {
+        if ((mSingle && KeyEvent.KEYCODE_ENTER == keyCode)) {
             if (isPopupShowing()) {
-                super.dispatchKeyEvent(event);
-                return true;
+                return super.dispatchKeyEvent(event);
             }
-            if (down) {
-                if (event.getRepeatCount() == 0) {
-                    mGotEnterDown = true;
-                    mDownTime = event.getEventTime();
-                    // Send the keydown when the up comes, so that we have
-                    // a chance to handle a long press.
-                } else if (mGotEnterDown && event.getEventTime() - mDownTime >
-                        ViewConfiguration.getLongPressTimeout()) {
-                    performLongClick();
-                    mGotEnterDown = false;
-                }
-            } else if (mGotEnterDown) {
-                mGotEnterDown = false;
-                if (KeyEvent.KEYCODE_DPAD_CENTER == keyCode) {
-                    mWebView.shortPressOnTextField();
-                    return true;
-                }
-                // If we reached here, then this is a single line textfield, and
-                // the user pressed ENTER.  In this case, we want to hide the
-                // soft input method.
+            if (!down) {
+                // Hide the keyboard, since the user has just submitted this
+                // form.  The submission happens thanks to the two calls
+                // to sendDomEvent.
                 InputMethodManager.getInstance(mContext)
                         .hideSoftInputFromWindow(getWindowToken(), 0);
                 sendDomEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
                 sendDomEvent(event);
             }
-            return true;
+            return super.dispatchKeyEvent(event);
+        } else if (KeyEvent.KEYCODE_DPAD_CENTER == keyCode) {
+            // Note that this handles center key and trackball.
+            if (isPopupShowing()) {
+                return super.dispatchKeyEvent(event);
+            }
+            // Center key should be passed to a potential onClick
+            if (!down) {
+                mWebView.shortPressOnTextField();
+            }
+            // Pass to super to handle longpress.
+            return super.dispatchKeyEvent(event);
         }
+
         // Ensure there is a layout so arrow keys are handled properly.
         if (getLayout() == null) {
             measure(mWidthSpec, mHeightSpec);
@@ -225,9 +203,8 @@
                 case KeyEvent.KEYCODE_DPAD_DOWN:
                     isArrowKey = true;
                     break;
-                case KeyEvent.KEYCODE_DPAD_CENTER:
                 case KeyEvent.KEYCODE_ENTER:
-                    // For multi-line text boxes, newlines and dpad center will
+                    // For multi-line text boxes, newlines will
                     // trigger onTextChanged for key down (which will send both
                     // key up and key down) but not key up.
                     mGotEnterDown = true;
@@ -269,7 +246,7 @@
         // with WebCore's notion of the current selection, reset the selection
         // to what it was before the key event.
         Selection.setSelection(text, oldStart, oldEnd);
-        // Ignore the key up event for newlines or dpad center. This prevents
+        // Ignore the key up event for newlines. This prevents
         // multiple newlines in the native textarea.
         if (mGotEnterDown && !down) {
             return true;
@@ -391,27 +368,8 @@
         if (isPopupShowing()) {
             return super.onTrackballEvent(event);
         }
-        int action = event.getAction();
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                if (!mTrackballDown) {
-                    mTrackballDown = true;
-                    mHandler.sendEmptyMessageDelayed(LONGPRESS, 
-                            ViewConfiguration.getLongPressTimeout());
-                }
-                return true;
-            case MotionEvent.ACTION_UP:
-                if (mTrackballDown) {
-                    mWebView.shortPressOnTextField();
-                    mTrackballDown = false;
-                    mHandler.removeMessages(LONGPRESS);
-                }
-                return true;
-            case MotionEvent.ACTION_CANCEL:
-                mTrackballDown = false;
-                return true;
-            case MotionEvent.ACTION_MOVE:
-                // fall through
+        if (event.getAction() != MotionEvent.ACTION_MOVE) {
+            return false;
         }
         Spannable text = (Spannable) getText();
         MovementMethod move = getMovementMethod();
@@ -442,7 +400,6 @@
         // hide the soft keyboard when the edit text is out of focus
         InputMethodManager.getInstance(mContext).hideSoftInputFromWindow(
                 getWindowToken(), 0);
-        mHandler.removeMessages(LONGPRESS);
         mWebView.removeView(this);
         mWebView.requestFocus();
         mScrollToAccommodateCursor = false;
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index c59a5fc..5126ef0 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -71,6 +71,7 @@
 import android.widget.RelativeLayout;
 import android.widget.Scroller;
 import android.widget.Toast;
+import android.widget.ZoomButtonsController;
 import android.widget.ZoomControls;
 import android.widget.ZoomRingController;
 import android.widget.FrameLayout;
@@ -284,8 +285,10 @@
     /**
      * Customizable constant
      */
-    // pre-computed square of ViewConfiguration.getTouchSlop()
+    // pre-computed square of ViewConfiguration.getScaledTouchSlop()
     private int mTouchSlopSquare;
+    // pre-computed square of ViewConfiguration.getScaledDoubleTapSlop()
+    private int mDoubleTapSlopSquare;
     // This should be ViewConfiguration.getTapTimeout()
     // But system time out is 100ms, which is too short for the browser.
     // In the browser, if it switches out of tap too soon, jump tap won't work.
@@ -321,6 +324,8 @@
     private int mContentHeight;  // cache of value from WebViewCore
 
     static int MAX_FLOAT_CONTENT_WIDTH = 480;
+    // the calculated minimum content width for calculating the minimum scale.
+    // If it is 0, it means don't use it.
     private int mMinContentWidth;
 
     // Need to have the separate control for horizontal and vertical scrollbar 
@@ -553,7 +558,9 @@
             return mExtra;
         }
     }
-    
+
+    private ZoomButtonsController mZoomButtonsController; 
+
     private ZoomRingController mZoomRingController;
     private ImageView mZoomRingOverview;
     private Animation mZoomRingOverviewExitAnimation;
@@ -617,6 +624,9 @@
                             / ZOOM_RING_STEPS;
                 }
                 mZoomRingController.setThumbAngle(angle * MAX_ZOOM_RING_ANGLE);
+
+                // Don't show a thumb if the user cannot zoom
+                mZoomRingController.setThumbVisible(mMinZoomScale != mMaxZoomScale);
                 
                 // Show the zoom overview tab on the ring
                 setZoomOverviewVisible(true);
@@ -733,6 +743,26 @@
         mZoomRingController.setPannerAcceleration(160);
         mZoomRingController.setPannerStartAcceleratingDuration(700);
         createZoomRingOverviewTab();
+        mZoomButtonsController = new ZoomButtonsController(context, this);
+        mZoomButtonsController.setOverviewVisible(true);
+        mZoomButtonsController.setCallback(new ZoomButtonsController.OnZoomListener() {
+            public void onCenter(int x, int y) {
+                mZoomListener.onCenter(x, y);
+            }
+
+            public void onOverview() {
+                mZoomButtonsController.setVisible(false);
+                zoomScrollOut();
+            }
+
+            public void onVisibilityChanged(boolean visible) {
+                mZoomListener.onVisibilityChanged(visible);
+            }
+
+            public void onZoom(boolean zoomIn) {
+                mZoomListener.onSimpleZoom(zoomIn);
+            }
+        });
     }
 
     private void init() {
@@ -745,6 +775,9 @@
         final int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
         mTouchSlopSquare = slop * slop;
         mMinLockSnapReverseDistance = slop;
+        final int doubleTapslop = ViewConfiguration.get(getContext())
+                .getScaledDoubleTapSlop();
+        mDoubleTapSlopSquare = doubleTapslop * doubleTapslop;
     }
 
     private void createZoomRingOverviewTab() {
@@ -763,7 +796,7 @@
                 FrameLayout.LayoutParams.WRAP_CONTENT,
                 Gravity.CENTER);
         // TODO: magic constant that's based on the zoom ring radius + some offset
-        lp.topMargin = 208;
+        lp.topMargin = 200;
         mZoomRingOverview.setLayoutParams(lp);
         mZoomRingOverview.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
@@ -2305,8 +2338,19 @@
     /**
      * Use this function to bind an object to Javascript so that the
      * methods can be accessed from Javascript.
-     * IMPORTANT, the object that is bound runs in another thread and
-     * not in the thread that it was constructed in.
+     * <p><strong>IMPORTANT:</strong>
+     * <ul>
+     * <li> Using addJavascriptInterface() allows JavaScript to control your
+     * application. This can be a very useful feature or a dangerous security
+     * issue. When the HTML in the WebView is untrustworthy (for example, part
+     * or all of the HTML is provided by some person or process), then an
+     * attacker could inject HTML that will execute your code and possibly any
+     * code of the attacker's choosing.<br>
+     * Do not use addJavascriptInterface() unless all of the HTML in this
+     * WebView was written by you.</li>
+     * <li> The Java object that is bound runs in another thread and not in
+     * the thread that it was constructed in.</li>
+     * </ul></p>
      * @param obj The class instance to bind to Javascript
      * @param interfaceName The name to used to expose the class in Javascript
      */
@@ -2969,8 +3013,8 @@
         if (lp != null) {
             // Take the last touch and adjust for the location of the
             // TextDialog.
-            float x = mLastTouchX - lp.x;
-            float y = mLastTouchY - lp.y;
+            float x = mLastTouchX + (float) (mScrollX - lp.x);
+            float y = mLastTouchY + (float) (mScrollY - lp.y);
             mTextEntry.fakeTouchEvent(x, y);
         }
     }
@@ -3164,6 +3208,9 @@
                 mSelectX = mScrollX + (int) mLastTouchX;
                 mSelectY = mScrollY + (int) mLastTouchY;
             }
+            int contentX = viewToContent((int) mLastTouchX + mScrollX);
+            int contentY = viewToContent((int) mLastTouchY + mScrollY);
+            nativeClearFocus(contentX, contentY);
        }
 
         if (keyCode >= KeyEvent.KEYCODE_DPAD_UP
@@ -3355,6 +3402,9 @@
     public void emulateShiftHeld() {
         mExtendSelection = false;
         mShiftIsPressed = true;
+        int contentX = viewToContent((int) mLastTouchX + mScrollX);
+        int contentY = viewToContent((int) mLastTouchY + mScrollY);
+        nativeClearFocus(contentX, contentY);
     }
 
     private boolean commitCopy() {
@@ -3401,6 +3451,7 @@
 
         // Clean up the zoom ring
         mZoomRingController.setVisible(false);
+        mZoomButtonsController.setVisible(false);
     }
     
     // Implementation for OnHierarchyChangeListener
@@ -3449,8 +3500,17 @@
                 // false for the first parameter
             }
         } else {
-            // If our window has lost focus, stop drawing the focus ring
-            mDrawFocusRing = false;
+            if (!mZoomButtonsController.isVisible()) {
+                /*
+                 * The zoom controls come in their own window, so our window
+                 * loses focus. Our policy is to not draw the focus ring if
+                 * our window is not focused, but this is an exception since
+                 * the user can still navigate the web page with the zoom
+                 * controls showing.
+                 */
+                // If our window has lost focus, stop drawing the focus ring
+                mDrawFocusRing = false;
+            }
             mGotKeyDown = false;
             mShiftIsPressed = false;
             if (mNativeClass != 0) {
@@ -3592,7 +3652,8 @@
                     + mTouchMode);
         }
 
-        if (mZoomRingController.isVisible() && mInZoomTapDragMode) {
+        if ((mZoomRingController.isVisible() || mZoomButtonsController.isVisible())
+                && mInZoomTapDragMode) {
             if (ev.getAction() == MotionEvent.ACTION_UP) {
                 // Just released the second tap, no longer in tap-drag mode
                 mInZoomTapDragMode = false;
@@ -3630,6 +3691,9 @@
             mLastSentTouchTime = eventTime;
         }
 
+        int deltaX = (int) (mLastTouchX - x);
+        int deltaY = (int) (mLastTouchY - y);
+
         switch (action) {
             case MotionEvent.ACTION_DOWN: {
                 if (mTouchMode == SCROLL_ZOOM_ANIMATION_IN
@@ -3655,16 +3719,23 @@
                             , viewToContent(mSelectY), false);
                     mTouchSelection = mExtendSelection = true;
                 } else if (!ZoomRingController.useOldZoom(mContext) &&
-                        mPrivateHandler.hasMessages(RELEASE_SINGLE_TAP)) {
+                        mPrivateHandler.hasMessages(RELEASE_SINGLE_TAP) &&
+                        (deltaX * deltaX + deltaY * deltaY < mDoubleTapSlopSquare)) {
                     // Found doubletap, invoke the zoom controller
                     mPrivateHandler.removeMessages(RELEASE_SINGLE_TAP);
-                    mZoomRingController.setVisible(true);
+                    int contentX = viewToContent((int) mLastTouchX + mScrollX);
+                    int contentY = viewToContent((int) mLastTouchY + mScrollY);
+                    if (inEditingMode()) {
+                        mTextEntry.updateCachedTextfield();
+                    }
+                    nativeClearFocus(contentX, contentY);
                     mInZoomTapDragMode = true;
                     if (mLogEvent) {
                         EventLog.writeEvent(EVENT_LOG_DOUBLE_TAP_DURATION,
                                 (eventTime - mLastTouchUpTime), eventTime);
                     }
-                    return mZoomRingController.handleDoubleTapEvent(ev);
+                    return mZoomRingController.handleDoubleTapEvent(ev) ||
+                            mZoomButtonsController.handleDoubleTapEvent(ev);
                 } else {
                     mTouchMode = TOUCH_INIT_MODE;
                     mPreventDrag = mForwardTouchEvents;
@@ -3701,9 +3772,6 @@
                 }
                 mVelocityTracker.addMovement(ev);
 
-                int deltaX = (int) (mLastTouchX - x);
-                int deltaY = (int) (mLastTouchY - y);
-
                 if (mTouchMode != TOUCH_DRAG_MODE) {
                     if (mTouchMode == TOUCH_SELECT_MODE) {
                         mSelectX = mScrollX + (int) x;
@@ -5092,6 +5160,8 @@
                 });
                 if (mSelection != -1) {
                     listView.setSelection(mSelection);
+                    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+                    listView.setItemChecked(mSelection, true);
                 }
             }
             dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index a7261c5..6ab088d 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1294,7 +1294,9 @@
             draw.mViewPoint = new Point(mCurrentViewWidth, mCurrentViewHeight);
             if (LOGV_ENABLED) Log.v(LOGTAG, "webkitDraw NEW_PICTURE_MSG_ID");
             Message.obtain(mWebView.mPrivateHandler,
-                    WebView.NEW_PICTURE_MSG_ID, nativeGetContentMinPrefWidth(),
+                    WebView.NEW_PICTURE_MSG_ID,
+                    mViewportMinimumScale == 0 ? nativeGetContentMinPrefWidth()
+                            : 0,
                     0, draw).sendToTarget();
             nativeCheckNavCache();
             if (mWebkitScrollX != 0 || mWebkitScrollY != 0) {
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index f362e22..9da78d0 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -17,7 +17,6 @@
 package android.widget;
 
 import android.content.Context;
-import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Rect;
@@ -28,6 +27,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.text.Editable;
+import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.util.AttributeSet;
 import android.view.Gravity;
@@ -893,25 +893,16 @@
             mSyncMode = SYNC_FIRST_POSITION;
         }
 
-        // Don't restore the type filter window when there is no keyboard
-        if (acceptFilter()) {
-            String filterText = ss.filter;
-            setFilterText(filterText);
-        }
+        setFilterText(ss.filter);
 
         requestLayout();
     }
 
     private boolean acceptFilter() {
         final Context context = mContext;
-        final Configuration configuration = context.getResources().getConfiguration();
-        final boolean keyboardShowing = configuration.keyboardHidden !=
-                Configuration.KEYBOARDHIDDEN_YES;
-        final boolean hasKeyboard = configuration.keyboard != Configuration.KEYBOARD_NOKEYS;
         final InputMethodManager inputManager = (InputMethodManager)
                 context.getSystemService(Context.INPUT_METHOD_SERVICE);
-        return (hasKeyboard && keyboardShowing) ||
-                (!hasKeyboard && !inputManager.isFullscreenMode());
+        return !inputManager.isFullscreenMode();
     }
 
     /**
@@ -922,7 +913,7 @@
      */
     public void setFilterText(String filterText) {
         // TODO: Should we check for acceptFilter()?
-        if (mTextFilterEnabled && filterText != null && filterText.length() > 0) {
+        if (mTextFilterEnabled && !TextUtils.isEmpty(filterText)) {
             createTextFilter(false);
             // This is going to call our listener onTextChanged, but we might not
             // be ready to bring up a window yet
@@ -942,6 +933,18 @@
         }
     }
 
+    /**
+     * Returns the list's text filter, if available. 
+     * @return the list's text filter or null if filtering isn't enabled
+     * @hide pending API Council approval
+     */
+    public CharSequence getTextFilter() {
+        if (mTextFilterEnabled && mTextFilter != null) {
+            return mTextFilter.getText();
+        }
+        return null;
+    }
+    
     @Override
     protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
         super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index b046a6b..1d553f1 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -40,9 +40,15 @@
      * Whether this is user seekable.
      */
     boolean mIsUserSeekable = true;
+
+    /**
+     * On key presses (right or left), the amount to increment/decrement the
+     * progress.
+     */
+    private int mKeyProgressIncrement = 1;
     
     private static final int NO_ALPHA = 0xFF;
-    float mDisabledAlpha;
+    private float mDisabledAlpha;
     
     public AbsSeekBar(Context context) {
         super(context);
@@ -101,6 +107,39 @@
         invalidate();
     }
 
+    /**
+     * Sets the amount of progress changed via the arrow keys.
+     * 
+     * @param increment The amount to increment or decrement when the user
+     *            presses the arrow keys.
+     */
+    public void setKeyProgressIncrement(int increment) {
+        mKeyProgressIncrement = increment < 0 ? -increment : increment;
+    }
+
+    /**
+     * Returns the amount of progress changed via the arrow keys.
+     * <p>
+     * By default, this will be a value that is derived from the max progress.
+     * 
+     * @return The amount to increment or decrement when the user presses the
+     *         arrow keys. This will be positive.
+     */
+    public int getKeyProgressIncrement() {
+        return mKeyProgressIncrement;
+    }
+    
+    @Override
+    public synchronized void setMax(int max) {
+        super.setMax(max);
+
+        if ((mKeyProgressIncrement == 0) || (getMax() / mKeyProgressIncrement > 20)) {
+            // It will take the user too long to change this via keys, change it
+            // to something more reasonable
+            setKeyProgressIncrement(Math.max(1, Math.round((float) getMax() / 20)));
+        }
+    }
+
     @Override
     protected boolean verifyDrawable(Drawable who) {
         return who == mThumb || super.verifyDrawable(who);
@@ -321,12 +360,12 @@
         switch (keyCode) {
             case KeyEvent.KEYCODE_DPAD_LEFT:
                 if (progress <= 0) break;
-                setProgress(progress - 1, true);
+                setProgress(progress - mKeyProgressIncrement, true);
                 return true;
         
             case KeyEvent.KEYCODE_DPAD_RIGHT:
                 if (progress >= getMax()) break;
-                setProgress(progress + 1, true);
+                setProgress(progress + mKeyProgressIncrement, true);
                 return true;
         }
 
diff --git a/core/java/android/widget/AnalogClock.java b/core/java/android/widget/AnalogClock.java
index cf9c588..f847bc3 100644
--- a/core/java/android/widget/AnalogClock.java
+++ b/core/java/android/widget/AnalogClock.java
@@ -48,7 +48,6 @@
     private int mDialHeight;
 
     private boolean mAttached;
-    private long mLastTime;
 
     private final Handler mHandler = new Handler();
     private float mMinutes;
@@ -96,7 +95,6 @@
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
 
-        onTimeChanged();
         if (!mAttached) {
             mAttached = true;
             IntentFilter filter = new IntentFilter();
@@ -107,6 +105,15 @@
 
             getContext().registerReceiver(mIntentReceiver, filter, null, mHandler);
         }
+
+        // NOTE: It's safe to do these after registering the receiver since the receiver always runs
+        // in the main thread, therefore the receiver can't run before this method returns.
+
+        // The time zone may have changed while the receiver wasn't registered, so update the Time
+        mCalendar = new Time();
+
+        // Make sure we update to the current time
+        onTimeChanged();
     }
 
     @Override
@@ -212,9 +219,7 @@
     }
 
     private void onTimeChanged() {
-        long time = System.currentTimeMillis();
-        mCalendar.set(time);
-        mLastTime = time;
+        mCalendar.setToNow();
 
         int hour = mCalendar.hour;
         int minute = mCalendar.minute;
@@ -231,8 +236,6 @@
             if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) {
                 String tz = intent.getStringExtra("time-zone");
                 mCalendar = new Time(TimeZone.getTimeZone(tz).getID());
-            } else {
-                mCalendar = new Time(); 
             }
 
             onTimeChanged();
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 7a51676..0c1c72a 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -78,6 +78,8 @@
  * @attr ref android.R.styleable#AutoCompleteTextView_completionThreshold
  * @attr ref android.R.styleable#AutoCompleteTextView_completionHintView
  * @attr ref android.R.styleable#AutoCompleteTextView_dropDownSelector
+ * @attr ref android.R.styleable#AutoCompleteTextView_dropDownAnchor
+ * @attr ref android.R.styleable#AutoCompleteTextView_dropDownWidth
  */
 public class AutoCompleteTextView extends EditText implements Filter.FilterListener {
     static final boolean DEBUG = false;
@@ -96,6 +98,9 @@
     private DropDownListView mDropDownList;
     private int mDropDownVerticalOffset;
     private int mDropDownHorizontalOffset;
+    private int mDropDownAnchorId;
+    private View mDropDownAnchorView;  // view is retrieved lazily from id once needed
+    private int mDropDownWidth;
 
     private Drawable mDropDownListHighlight;
 
@@ -147,6 +152,18 @@
                 a.getDimension(R.styleable.AutoCompleteTextView_dropDownVerticalOffset, 0.0f);
         mDropDownHorizontalOffset = (int)
                 a.getDimension(R.styleable.AutoCompleteTextView_dropDownHorizontalOffset, 0.0f);
+        
+        // Get the anchor's id now, but the view won't be ready, so wait to actually get the
+        // view and store it in mDropDownAnchorView lazily in getDropDownAnchorView later.
+        // Defaults to NO_ID, in which case the getDropDownAnchorView method will simply return
+        // this TextView, as a default anchoring point.
+        mDropDownAnchorId = a.getResourceId(R.styleable.AutoCompleteTextView_dropDownAnchor,
+                View.NO_ID);
+        
+        // For dropdown width, the developer can specify a specific width, or FILL_PARENT
+        // (for full screen width) or WRAP_CONTENT (to match the width of the anchored view).
+        mDropDownWidth = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownWidth,
+                ViewGroup.LayoutParams.WRAP_CONTENT);
 
         mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView,
                 R.layout.simple_dropdown_hint);
@@ -187,6 +204,49 @@
     public void setCompletionHint(CharSequence hint) {
         mHintText = hint;
     }
+    
+    /**
+     * <p>Returns the current width for the auto-complete drop down list. This can
+     * be a fixed width, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill the screen, or
+     * {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the width of its anchor view.</p>
+     * 
+     * @return the width for the drop down list
+     */
+    public int getDropDownWidth() {
+        return mDropDownWidth;
+    }
+    
+    /**
+     * <p>Sets the current width for the auto-complete drop down list. This can
+     * be a fixed width, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill the screen, or
+     * {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the width of its anchor view.</p>
+     * 
+     * @param width the width to use
+     */
+    public void setDropDownWidth(int width) {
+        mDropDownWidth = width;
+    }
+    
+    /**
+     * <p>Returns the id for the view that the auto-complete drop down list is anchored to.</p>
+     *  
+     * @return the view's id, or {@link View#NO_ID} if none specified
+     */
+    public int getDropDownAnchor() {
+        return mDropDownAnchorId;
+    }
+    
+    /**
+     * <p>Sets the view to which the auto-complete drop down list should anchor. The view
+     * corresponding to this id will not be loaded until the next time it is needed to avoid
+     * loading a view which is not yet instantiated.</p>
+     * 
+     * @param id the id to anchor the drop down list view to
+     */
+    public void setDropDownAnchor(int id) {
+        mDropDownAnchorId = id;
+        mDropDownAnchorView = null;
+    }
 
     /**
      * <p>Returns the number of characters the user must type before the drop
@@ -741,6 +801,18 @@
 
         return result;
     }
+    
+    /**
+     * <p>Used for lazy instantiation of the anchor view from the id we have. If the value of
+     * the id is NO_ID or we can't find a view for the given id, we return this TextView as
+     * the default anchoring point.</p>
+     */
+    private View getDropDownAnchorView() {
+        if (mDropDownAnchorView == null && mDropDownAnchorId != View.NO_ID) {
+            mDropDownAnchorView = getRootView().findViewById(mDropDownAnchorId);
+        }
+        return mDropDownAnchorView == null ? this : mDropDownAnchorView;
+    }
 
     /**
      * <p>Displays the drop down on screen.</p>
@@ -748,16 +820,37 @@
     public void showDropDown() {
         int height = buildDropDown();
         if (mPopup.isShowing()) {
-            mPopup.update(this, mDropDownHorizontalOffset, mDropDownVerticalOffset,
-                    getWidth(), height);
+            int widthSpec;
+            if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
+                // The call to PopupWindow's update method below can accept -1 for any
+                // value you do not want to update.
+                widthSpec = -1;
+            } else if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
+                widthSpec = getDropDownAnchorView().getWidth();
+            } else {
+                widthSpec = mDropDownWidth;
+            }
+            mPopup.update(getDropDownAnchorView(), mDropDownHorizontalOffset,
+                    mDropDownVerticalOffset, widthSpec, height);
         } else {
-            mPopup.setWindowLayoutMode(0, ViewGroup.LayoutParams.WRAP_CONTENT);
-            mPopup.setWidth(getWidth());
+            int widthSpec;
+            if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
+                mPopup.setWindowLayoutMode(ViewGroup.LayoutParams.FILL_PARENT,
+                        ViewGroup.LayoutParams.WRAP_CONTENT);
+            } else {
+                mPopup.setWindowLayoutMode(0, ViewGroup.LayoutParams.WRAP_CONTENT);
+                if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
+                    mPopup.setWidth(getDropDownAnchorView().getWidth());
+                } else {
+                    mPopup.setWidth(mDropDownWidth);
+                }
+            }
             mPopup.setHeight(height);
             mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
             mPopup.setOutsideTouchable(true);
             mPopup.setTouchInterceptor(new PopupTouchIntercepter());
-            mPopup.showAsDropDown(this, mDropDownHorizontalOffset, mDropDownVerticalOffset);
+            mPopup.showAsDropDown(getDropDownAnchorView(),
+                    mDropDownHorizontalOffset, mDropDownVerticalOffset);
             mDropDownList.setSelection(ListView.INVALID_POSITION);
             mDropDownList.hideSelector();
             mDropDownList.requestFocus();
diff --git a/core/java/android/widget/BaseAdapter.java b/core/java/android/widget/BaseAdapter.java
index 1921d73..532fd76 100644
--- a/core/java/android/widget/BaseAdapter.java
+++ b/core/java/android/widget/BaseAdapter.java
@@ -42,6 +42,10 @@
         mDataSetObservable.unregisterObserver(observer);
     }
     
+    /**
+     * Notifies the attached View that the underlying data has been changed
+     * and it should refresh itself.
+     */
     public void notifyDataSetChanged() {
         mDataSetObservable.notifyChanged();
     }
diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java
index 369221e..91add58 100644
--- a/core/java/android/widget/Chronometer.java
+++ b/core/java/android/widget/Chronometer.java
@@ -69,7 +69,10 @@
     private Object[] mFormatterArgs = new Object[1];
     private StringBuilder mFormatBuilder;
     private OnChronometerTickListener mOnChronometerTickListener;
-
+    private StringBuilder mRecycle = new StringBuilder(8);
+    
+    private static final int TICK_WHAT = 2;
+    
     /**
      * Initialize this Chronometer object.
      * Sets the base to the current time.
@@ -115,6 +118,7 @@
     @android.view.RemotableViewMethod
     public void setBase(long base) {
         mBase = base;
+        dispatchChronometerTick();
         updateText(SystemClock.elapsedRealtime());
     }
 
@@ -216,10 +220,10 @@
         updateRunning();
     }
 
-    private void updateText(long now) {
+    private synchronized void updateText(long now) {
         long seconds = now - mBase;
         seconds /= 1000;
-        String text = DateUtils.formatElapsedTime(seconds);
+        String text = DateUtils.formatElapsedTime(mRecycle, seconds);
 
         if (mFormat != null) {
             Locale loc = Locale.getDefault();
@@ -247,7 +251,10 @@
         if (running != mRunning) {
             if (running) {
                 updateText(SystemClock.elapsedRealtime());
-                mHandler.sendMessageDelayed(Message.obtain(), 1000);
+                dispatchChronometerTick();
+                mHandler.sendMessageDelayed(Message.obtain(mHandler, TICK_WHAT), 1000);
+            } else {
+                mHandler.removeMessages(TICK_WHAT);
             }
             mRunning = running;
         }
@@ -255,10 +262,10 @@
     
     private Handler mHandler = new Handler() {
         public void handleMessage(Message m) {
-            if (mStarted) {
+            if (mRunning) {
                 updateText(SystemClock.elapsedRealtime());
                 dispatchChronometerTick();
-                sendMessageDelayed(Message.obtain(), 1000);
+                sendMessageDelayed(Message.obtain(this, TICK_WHAT), 1000);
             }
         }
     };
diff --git a/core/java/android/widget/CursorAdapter.java b/core/java/android/widget/CursorAdapter.java
index 3d758e7..898e501 100644
--- a/core/java/android/widget/CursorAdapter.java
+++ b/core/java/android/widget/CursorAdapter.java
@@ -348,6 +348,21 @@
         mFilterQueryProvider = filterQueryProvider;
     }
 
+    /**
+     * Called when the {@link ContentObserver} on the cursor receives a change notification.
+     * The default implementation provides the auto-requery logic, but may be overridden by
+     * sub classes.
+     * 
+     * @see ContentObserver#onChange(boolean)
+     * @hide pending API Council approval
+     */
+    protected void onContentChanged() {
+        if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {
+            if (Config.LOGV) Log.v("Cursor", "Auto requerying " + mCursor + " due to update");
+            mDataValid = mCursor.requery();
+        }
+    }
+
     private class ChangeObserver extends ContentObserver {
         public ChangeObserver() {
             super(new Handler());
@@ -360,10 +375,7 @@
 
         @Override
         public void onChange(boolean selfChange) {
-            if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {
-                if (Config.LOGV) Log.v("Cursor", "Auto requerying " + mCursor + " due to update");
-                mDataValid = mCursor.requery();
-            }
+            onContentChanged();
         }
     }
 
diff --git a/core/java/android/widget/Filter.java b/core/java/android/widget/Filter.java
index a2316cf..1d0fd5e 100644
--- a/core/java/android/widget/Filter.java
+++ b/core/java/android/widget/Filter.java
@@ -45,8 +45,6 @@
     
     private Handler mThreadHandler;
     private Handler mResultHandler;
-    private String mConstraint;
-    private boolean mConstraintIsValid = false;
 
     /**
      * <p>Creates a new asynchronous filter.</p>
@@ -84,13 +82,6 @@
      */
     public final void filter(CharSequence constraint, FilterListener listener) {
         synchronized (this) {
-            String constraintAsString = constraint != null ? constraint.toString() : null;
-            if (mConstraintIsValid && (
-                    (constraintAsString == null && mConstraint == null) ||
-                    (constraintAsString != null && constraintAsString.equals(mConstraint)))) {
-                // nothing to do
-                return;
-            }
 
             if (mThreadHandler == null) {
                 HandlerThread thread = new HandlerThread(THREAD_NAME);
@@ -103,16 +94,13 @@
             RequestArguments args = new RequestArguments();
             // make sure we use an immutable copy of the constraint, so that
             // it doesn't change while the filter operation is in progress
-            args.constraint = constraintAsString;
+            args.constraint = constraint != null ? constraint.toString() : null;
             args.listener = listener;
             message.obj = args;
     
             mThreadHandler.removeMessages(FILTER_TOKEN);
             mThreadHandler.removeMessages(FINISH_TOKEN);
             mThreadHandler.sendMessage(message);
-            
-            mConstraint = constraintAsString;
-            mConstraintIsValid = true;
         }
     }
 
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 38bfc7c..6bbf062 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -924,32 +924,23 @@
         final int count = mItemCount;
         if (count > 0) {
             final View child = obtainView(0);
-            final int childViewType = mAdapter.getItemViewType(0);
 
-            AbsListView.LayoutParams lp = (AbsListView.LayoutParams) child.getLayoutParams();
-            if (lp == null) {
-                lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+            AbsListView.LayoutParams p = (AbsListView.LayoutParams)child.getLayoutParams();
+            if (p == null) {
+                p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                         ViewGroup.LayoutParams.WRAP_CONTENT, 0);
-                child.setLayoutParams(lp);
             }
-            lp.viewType = childViewType;
+            p.viewType = mAdapter.getItemViewType(0);
 
-            final int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
-                    mListPadding.left + mListPadding.right, lp.width);
-
-            int lpHeight = lp.height;
-
-            int childHeightSpec;
-            if (lpHeight > 0) {
-                childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
-            } else {
-                childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-            }
-
+            int childHeightSpec = getChildMeasureSpec(
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 0, p.height);
+            int childWidthSpec = getChildMeasureSpec(
+                    MeasureSpec.makeMeasureSpec(mColumnWidth, MeasureSpec.EXACTLY), 0, p.width);
             child.measure(childWidthSpec, childHeightSpec);
+
             childHeight = child.getMeasuredHeight();
 
-            if (mRecycler.shouldRecycleViewType(childViewType)) {
+            if (mRecycler.shouldRecycleViewType(p.viewType)) {
                 mRecycler.addScrapView(child);
             }
         }
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 96fe595..652e30c 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -875,7 +875,7 @@
             int parentHeightMeasureSpec, int heightUsed) {
         final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();
 
-        final int childHeightMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,
+        final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,
                 mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin
                         + heightUsed, lp.height);
         final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 94d1bd1..a4523b92 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -840,7 +840,7 @@
 
     @Override
     public int getBaseline() {
-        return mBaselineAligned ? getHeight() : -1;
+        return mBaselineAligned ? getMeasuredHeight() : -1;
     }
     
     /**
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 4e5989c..6df72d4 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -1011,34 +1011,13 @@
         if (mItemCount > 0 && (widthMode == MeasureSpec.UNSPECIFIED ||
                 heightMode == MeasureSpec.UNSPECIFIED)) {
             final View child = obtainView(0);
-            final int childViewType = mAdapter.getItemViewType(0);
 
-            AbsListView.LayoutParams lp = (AbsListView.LayoutParams) child.getLayoutParams();
-            if (lp == null) {
-                lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
-                        ViewGroup.LayoutParams.WRAP_CONTENT, 0);
-                child.setLayoutParams(lp);
-            }
-            lp.viewType = childViewType;
-
-            final int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
-                    mListPadding.left + mListPadding.right, lp.width);
-
-            int lpHeight = lp.height;
-
-            int childHeightSpec;
-            if (lpHeight > 0) {
-                childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
-            } else {
-                childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-            }
-
-            child.measure(childWidthSpec, childHeightSpec);
+            measureScrapChild(child, 0, widthMeasureSpec);
 
             childWidth = child.getMeasuredWidth();
             childHeight = child.getMeasuredHeight();
 
-            if (mRecycler.shouldRecycleViewType(childViewType)) {
+            if (recycleOnMeasure()) {
                 mRecycler.addScrapView(child);
             }
         }
@@ -1055,13 +1034,40 @@
 
         if (heightMode == MeasureSpec.AT_MOST) {
             // TODO: after first layout we should maybe start at the first visible position, not 0
-            heightSize = measureHeightOfChildren(
-                    MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY),
-                    0, NO_POSITION, heightSize, -1);
+            heightSize = measureHeightOfChildren(widthMeasureSpec, 0, NO_POSITION, heightSize, -1);
         }
 
         setMeasuredDimension(widthSize, heightSize);
-        mWidthMeasureSpec = widthMeasureSpec;
+        mWidthMeasureSpec = widthMeasureSpec;        
+    }
+
+    private void measureScrapChild(View child, int position, int widthMeasureSpec) {
+        LayoutParams p = (LayoutParams) child.getLayoutParams();
+        if (p == null) {
+            p = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+                    ViewGroup.LayoutParams.WRAP_CONTENT, 0);
+        }
+        p.viewType = mAdapter.getItemViewType(position);
+
+        int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
+                mListPadding.left + mListPadding.right, p.width);
+        int lpHeight = p.height;
+        int childHeightSpec;
+        if (lpHeight > 0) {
+            childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
+        } else {
+            childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+        }
+        child.measure(childWidthSpec, childHeightSpec);
+    }
+
+    /**
+     * @return True to recycle the views used to measure this ListView in
+     *         UNSPECIFIED/AT_MOST modes, false otherwise.
+     * @hide
+     */
+    protected boolean recycleOnMeasure() {
+        return true;
     }
 
     /**
@@ -1090,8 +1096,8 @@
      *            startPosition is 0).
      * @return The height of this ListView with the given children.
      */
-    final int measureHeightOfChildren(final int widthMeasureSpec, final int startPosition,
-            int endPosition, final int maxHeight, int disallowPartialChildPosition) {
+    final int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition,
+            final int maxHeight, int disallowPartialChildPosition) {
 
         final ListAdapter adapter = mAdapter;
         if (adapter == null) {
@@ -1110,29 +1116,20 @@
         // mItemCount - 1 since endPosition parameter is inclusive
         endPosition = (endPosition == NO_POSITION) ? adapter.getCount() - 1 : endPosition;
         final AbsListView.RecycleBin recycleBin = mRecycler;
+        final boolean recyle = recycleOnMeasure();
+
         for (i = startPosition; i <= endPosition; ++i) {
             child = obtainView(i);
-            final int childViewType = adapter.getItemViewType(i);
 
-            AbsListView.LayoutParams lp = (AbsListView.LayoutParams) child.getLayoutParams();
-            if (lp == null) {
-                lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
-                        ViewGroup.LayoutParams.WRAP_CONTENT, 0);
-                child.setLayoutParams(lp);
-            }
-            lp.viewType = childViewType;
+            measureScrapChild(child, i, widthMeasureSpec);
 
             if (i > 0) {
                 // Count the divider for all but one child
                 returnedHeight += dividerHeight;
             }
 
-            child.measure(widthMeasureSpec, lp.height >= 0
-                    ? MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY)
-                            : MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-
             // Recycle the view before we possibly return from the method
-            if (recycleBin.shouldRecycleViewType(childViewType)) {
+            if (recyle) {
                 recycleBin.addScrapView(child);
             }
 
@@ -1656,7 +1653,7 @@
 
         // Respect layout params that are already in the view. Otherwise make some up...
         // noinspection unchecked
-        AbsListView.LayoutParams p = (AbsListView.LayoutParams)child.getLayoutParams();
+        AbsListView.LayoutParams p = (AbsListView.LayoutParams) child.getLayoutParams();
         if (p == null) {
             p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                     ViewGroup.LayoutParams.WRAP_CONTENT, 0);
@@ -1675,7 +1672,7 @@
 
         if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) {
             if (child instanceof Checkable) {
-                ((Checkable)child).setChecked(mCheckStates.get(position));
+                ((Checkable) child).setChecked(mCheckStates.get(position));
             }
         }
 
diff --git a/core/java/android/widget/MultiAutoCompleteTextView.java b/core/java/android/widget/MultiAutoCompleteTextView.java
index 59a9310..05abc26 100644
--- a/core/java/android/widget/MultiAutoCompleteTextView.java
+++ b/core/java/android/widget/MultiAutoCompleteTextView.java
@@ -126,7 +126,7 @@
         Editable text = getText();
 
         int end = getSelectionEnd();
-        if (end < 0) {
+        if (end < 0 || mTokenizer == null) {
             return false;
         }
 
@@ -147,7 +147,7 @@
     public void performValidation() {
         Validator v = getValidator();
 
-        if (v == null) {
+        if (v == null || mTokenizer == null) {
             return;
         }
 
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 4a5cea1..53db77e 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -30,6 +30,7 @@
 import android.graphics.PixelFormat;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
 import android.os.IBinder;
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -102,6 +103,8 @@
     private Rect mTempRect = new Rect();
     
     private Drawable mBackground;
+    private Drawable mAboveAnchorBackgroundDrawable;
+    private Drawable mBelowAnchorBackgroundDrawable;
 
     private boolean mAboveAnchor;
     
@@ -164,6 +167,43 @@
 
         mBackground = a.getDrawable(R.styleable.PopupWindow_popupBackground);
 
+        // If this is a StateListDrawable, try to find and store the drawable to be
+        // used when the drop-down is placed above its anchor view, and the one to be
+        // used when the drop-down is placed below its anchor view. We extract
+        // the drawables ourselves to work around a problem with using refreshDrawableState
+        // that it will take into account the padding of all drawables specified in a
+        // StateListDrawable, thus adding superfluous padding to drop-down views.
+        //
+        // We assume a StateListDrawable will have a drawable for ABOVE_ANCHOR_STATE_SET and
+        // at least one other drawable, intended for the 'below-anchor state'.
+        if (mBackground instanceof StateListDrawable) {
+            StateListDrawable background = (StateListDrawable) mBackground;
+
+            // Find the above-anchor view - this one's easy, it should be labeled as such.
+            int aboveAnchorStateIndex = background.getStateDrawableIndex(ABOVE_ANCHOR_STATE_SET);
+            
+            // Now, for the below-anchor view, look for any other drawable specified in the
+            // StateListDrawable which is not for the above-anchor state and use that.
+            int count = background.getStateCount();
+            int belowAnchorStateIndex = -1;
+            for (int i = 0; i < count; i++) {
+                if (i != aboveAnchorStateIndex) {
+                    belowAnchorStateIndex = i;
+                    break;
+                }
+            }
+            
+            // Store the drawables we found, if we found them. Otherwise, set them both
+            // to null so that we'll just use refreshDrawableState.
+            if (aboveAnchorStateIndex != -1 && belowAnchorStateIndex != -1) {
+                mAboveAnchorBackgroundDrawable = background.getStateDrawable(aboveAnchorStateIndex);
+                mBelowAnchorBackgroundDrawable = background.getStateDrawable(belowAnchorStateIndex);
+            } else {
+                mBelowAnchorBackgroundDrawable = null;
+                mAboveAnchorBackgroundDrawable = null;
+            }
+        }
+        
         a.recycle();
     }
 
@@ -661,7 +701,18 @@
         mAboveAnchor = findDropDownPosition(anchor, p, xoff, yoff);
 
         if (mBackground != null) {
-            mPopupView.refreshDrawableState();
+            // If the background drawable provided was a StateListDrawable with above-anchor
+            // and below-anchor states, use those. Otherwise rely on refreshDrawableState to
+            // do the job.
+            if (mAboveAnchorBackgroundDrawable != null) {
+                if (mAboveAnchor) {
+                    mPopupView.setBackgroundDrawable(mAboveAnchorBackgroundDrawable);
+                } else {
+                    mPopupView.setBackgroundDrawable(mBelowAnchorBackgroundDrawable);
+                }
+            } else {
+                mPopupView.refreshDrawableState();
+            }
         }
 
         if (mHeightMode < 0) p.height = mLastHeight = mHeightMode;
@@ -697,12 +748,18 @@
      */
     private void preparePopup(WindowManager.LayoutParams p) {
         if (mBackground != null) {
+            final ViewGroup.LayoutParams layoutParams = mContentView.getLayoutParams();
+            int height = ViewGroup.LayoutParams.FILL_PARENT;
+            if (layoutParams != null &&
+                    layoutParams.height == ViewGroup.LayoutParams.WRAP_CONTENT) {
+                height = ViewGroup.LayoutParams.WRAP_CONTENT;
+            }
+
             // when a background is available, we embed the content view
             // within another view that owns the background drawable
             PopupViewContainer popupViewContainer = new PopupViewContainer(mContext);
             PopupViewContainer.LayoutParams listParams = new PopupViewContainer.LayoutParams(
-                    ViewGroup.LayoutParams.FILL_PARENT,
-                    ViewGroup.LayoutParams.FILL_PARENT
+                    ViewGroup.LayoutParams.FILL_PARENT, height
             );
             popupViewContainer.setBackgroundDrawable(mBackground);
             popupViewContainer.addView(mContentView, listParams);
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index dd2570a..f646ab5 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -526,6 +526,7 @@
      * @see #getProgress()
      * @see #incrementProgressBy(int) 
      */
+    @android.view.RemotableViewMethod
     public synchronized void setProgress(int progress) {
         setProgress(progress, false);
     }
diff --git a/core/java/android/widget/ResourceCursorAdapter.java b/core/java/android/widget/ResourceCursorAdapter.java
index 9052ae3..a5dbd98 100644
--- a/core/java/android/widget/ResourceCursorAdapter.java
+++ b/core/java/android/widget/ResourceCursorAdapter.java
@@ -46,10 +46,30 @@
     public ResourceCursorAdapter(Context context, int layout, Cursor c) {
         super(context, c);
         mLayout = mDropDownLayout = layout;
-        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     }
     
     /**
+     * Constructor.
+     * 
+     * @param context The context where the ListView associated with this
+     *            SimpleListItemFactory is running
+     * @param layout resource identifier of a layout file that defines the views
+     *            for this list item.  Unless you override them later, this will
+     *            define both the item views and the drop down views.
+     * @param c The cursor from which to get the data.
+     * @param autoRequery If true the adapter will call requery() on the
+     *                    cursor whenever it changes so the most recent
+     *                    data is always displayed.
+     * @hide Pending API Council approval
+     */
+    public ResourceCursorAdapter(Context context, int layout, Cursor c, boolean autoRequery) {
+        super(context, c, autoRequery);
+        mLayout = mDropDownLayout = layout;
+        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+    }
+
+    /**
      * Inflates view(s) from the specified XML file.
      * 
      * @see android.widget.CursorAdapter#newView(android.content.Context,
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index c852be5..88b2a01 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -84,6 +84,7 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewDebug;
+import android.view.ViewRoot;
 import android.view.ViewTreeObserver;
 import android.view.ViewGroup.LayoutParams;
 import android.view.animation.AnimationUtils;
@@ -215,7 +216,7 @@
         int mDrawableSizeTop, mDrawableSizeBottom, mDrawableSizeLeft, mDrawableSizeRight;
         int mDrawableWidthTop, mDrawableWidthBottom, mDrawableHeightLeft, mDrawableHeightRight;
         int mDrawablePadding;
-    };
+    }
     private Drawables mDrawables;
 
     private CharSequence mError;
@@ -239,8 +240,13 @@
     private int mMarqueeRepeatLimit = 3;
 
     class InputContentType {
-        String privateContentType;
+        int imeOptions = EditorInfo.IME_UNDEFINED;
+        String privateImeOptions;
+        CharSequence imeActionLabel;
+        int imeActionId;
         Bundle extras;
+        OnEditorActionListener onEditorActionListener;
+        boolean enterDown;
     }
     InputContentType mInputContentType;
 
@@ -268,6 +274,26 @@
         p.measureText("H");
     }
 
+    /**
+     * Interface definition for a callback to be invoked when an action is
+     * performed on the editor.
+     */
+    public interface OnEditorActionListener {
+        /**
+         * Called when an action is being performed.
+         *
+         * @param v The view that was clicked.
+         * @param actionId Identifier of the action.  This will be either the
+         * identifier you supplied, or {@link EditorInfo#IME_UNDEFINED
+         * EditorInfo.IME_UNDEFINED} if being called due to the enter key
+         * being pressed.
+         * @param event If triggered by an enter key, this is the event;
+         * otherwise, this is null.
+         * @return Return true if you have consumed the action, else false.
+         */
+        boolean onEditorAction(TextView v, int actionId, KeyEvent event);
+    }
+    
     public TextView(Context context) {
         this(context, null);
     }
@@ -376,7 +402,7 @@
         int shadowcolor = 0;
         float dx = 0, dy = 0, r = 0;
         boolean password = false;
-        int contentType = EditorInfo.TYPE_NULL;
+        int inputType = EditorInfo.TYPE_NULL;
 
         int n = a.getIndexCount();
         for (int i = 0; i < n; i++) {
@@ -610,11 +636,34 @@
                 break;
 
             case com.android.internal.R.styleable.TextView_inputType:
-                contentType = a.getInt(attr, mInputType);
+                inputType = a.getInt(attr, mInputType);
                 break;
 
-            case com.android.internal.R.styleable.TextView_editorPrivateContentType:
-                setPrivateContentType(a.getString(attr));
+            case com.android.internal.R.styleable.TextView_imeOptions:
+                if (mInputContentType == null) {
+                    mInputContentType = new InputContentType();
+                }
+                mInputContentType.imeOptions = a.getInt(attr,
+                        mInputContentType.imeOptions);
+                break;
+
+            case com.android.internal.R.styleable.TextView_imeActionLabel:
+                if (mInputContentType == null) {
+                    mInputContentType = new InputContentType();
+                }
+                mInputContentType.imeActionLabel = a.getText(attr);
+                break;
+
+            case com.android.internal.R.styleable.TextView_imeActionId:
+                if (mInputContentType == null) {
+                    mInputContentType = new InputContentType();
+                }
+                mInputContentType.imeActionId = a.getInt(attr,
+                        mInputContentType.imeActionId);
+                break;
+
+            case com.android.internal.R.styleable.TextView_privateImeOptions:
+                setPrivateImeOptions(a.getString(attr));
                 break;
 
             case com.android.internal.R.styleable.TextView_editorExtras:
@@ -632,7 +681,7 @@
 
         BufferType bufferType = BufferType.EDITABLE;
 
-        if ((contentType&(EditorInfo.TYPE_MASK_CLASS
+        if ((inputType&(EditorInfo.TYPE_MASK_CLASS
                 |EditorInfo.TYPE_MASK_VARIATION))
                 == (EditorInfo.TYPE_CLASS_TEXT
                         |EditorInfo.TYPE_TEXT_VARIATION_PASSWORD)) {
@@ -656,57 +705,57 @@
                 throw new RuntimeException(ex);
             }
             try {
-                mInputType = contentType != EditorInfo.TYPE_NULL
-                        ? contentType
+                mInputType = inputType != EditorInfo.TYPE_NULL
+                        ? inputType
                         : mInput.getInputType();
             } catch (IncompatibleClassChangeError e) {
                 mInputType = EditorInfo.TYPE_CLASS_TEXT;
             }
         } else if (digits != null) {
             mInput = DigitsKeyListener.getInstance(digits.toString());
-            mInputType = contentType;
-        } else if (contentType != EditorInfo.TYPE_NULL) {
-            setInputType(contentType, true);
-            singleLine = (contentType&(EditorInfo.TYPE_MASK_CLASS
+            mInputType = inputType;
+        } else if (inputType != EditorInfo.TYPE_NULL) {
+            setInputType(inputType, true);
+            singleLine = (inputType&(EditorInfo.TYPE_MASK_CLASS
                             | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE)) !=
                     (EditorInfo.TYPE_CLASS_TEXT
                             | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE);
         } else if (phone) {
             mInput = DialerKeyListener.getInstance();
-            contentType = EditorInfo.TYPE_CLASS_PHONE;
+            inputType = EditorInfo.TYPE_CLASS_PHONE;
         } else if (numeric != 0) {
             mInput = DigitsKeyListener.getInstance((numeric & SIGNED) != 0,
                                                    (numeric & DECIMAL) != 0);
-            contentType = EditorInfo.TYPE_CLASS_NUMBER;
+            inputType = EditorInfo.TYPE_CLASS_NUMBER;
             if ((numeric & SIGNED) != 0) {
-                contentType |= EditorInfo.TYPE_NUMBER_FLAG_SIGNED;
+                inputType |= EditorInfo.TYPE_NUMBER_FLAG_SIGNED;
             }
             if ((numeric & DECIMAL) != 0) {
-                contentType |= EditorInfo.TYPE_NUMBER_FLAG_DECIMAL;
+                inputType |= EditorInfo.TYPE_NUMBER_FLAG_DECIMAL;
             }
-            mInputType = contentType;
+            mInputType = inputType;
         } else if (autotext || autocap != -1) {
             TextKeyListener.Capitalize cap;
 
-            contentType = EditorInfo.TYPE_CLASS_TEXT;
+            inputType = EditorInfo.TYPE_CLASS_TEXT;
             if (!singleLine) {
-                contentType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
+                inputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
             }
 
             switch (autocap) {
             case 1:
                 cap = TextKeyListener.Capitalize.SENTENCES;
-                contentType |= EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES;
+                inputType |= EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES;
                 break;
 
             case 2:
                 cap = TextKeyListener.Capitalize.WORDS;
-                contentType |= EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS;
+                inputType |= EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS;
                 break;
 
             case 3:
                 cap = TextKeyListener.Capitalize.CHARACTERS;
-                contentType |= EditorInfo.TYPE_TEXT_FLAG_CAP_CHARACTERS;
+                inputType |= EditorInfo.TYPE_TEXT_FLAG_CAP_CHARACTERS;
                 break;
 
             default:
@@ -715,7 +764,7 @@
             }
 
             mInput = TextKeyListener.getInstance(autotext, cap);
-            mInputType = contentType;
+            mInputType = inputType;
         } else if (editable) {
             mInput = TextKeyListener.getInstance();
             mInputType = EditorInfo.TYPE_CLASS_TEXT;
@@ -1075,6 +1124,11 @@
      * @attr ref android.R.styleable#TextView_singleLine
      */
     public final void setTransformationMethod(TransformationMethod method) {
+        if (method == mTransformation) {
+            // Avoid the setText() below if the transformation is
+            // the same.
+            return;
+        }
         if (mTransformation != null) {
             if (mText instanceof Spannable) {
                 ((Spannable) mText).removeSpan(mTransformation);
@@ -2778,7 +2832,7 @@
     /**
      * Directly change the content type integer of the text view, without
      * modifying any other state.
-     * @see #setContentType
+     * @see #setInputType(int)
      * @see android.text.InputType
      * @attr ref android.R.styleable#TextView_inputType
      */
@@ -2842,28 +2896,159 @@
     }
 
     /**
+     * Change the editor type integer associated with the text view, which
+     * will be reported to an IME with {@link EditorInfo#imeOptions} when it
+     * has focus.
+     * @see #getImeOptions
+     * @see android.view.inputmethod.EditorInfo
+     * @attr ref android.R.styleable#TextView_imeOptions
+     */
+    public void setImeOptions(int imeOptions) {
+        if (mInputContentType == null) {
+            mInputContentType = new InputContentType();
+        }
+        mInputContentType.imeOptions = imeOptions;
+    }
+
+    /**
+     * Get the type of the IME editor.
+     *
+     * @see #setImeOptions(int)
+     * @see android.view.inputmethod.EditorInfo
+     */
+    public int getImeOptions() {
+        return mInputContentType != null
+                ? mInputContentType.imeOptions : EditorInfo.IME_UNDEFINED;
+    }
+
+    /**
+     * Change the custom IME action associated with the text view, which
+     * will be reported to an IME with {@link EditorInfo#actionLabel}
+     * and {@link EditorInfo#actionId} when it has focus.
+     * @see #getImeActionLabel
+     * @see #getImeActionId
+     * @see android.view.inputmethod.EditorInfo
+     * @attr ref android.R.styleable#TextView_imeActionLabel
+     * @attr ref android.R.styleable#TextView_imeActionId
+     */
+    public void setImeActionLabel(CharSequence label, int actionId) {
+        if (mInputContentType == null) {
+            mInputContentType = new InputContentType();
+        }
+        mInputContentType.imeActionLabel = label;
+        mInputContentType.imeActionId = actionId;
+    }
+
+    /**
+     * Get the IME action label previous set with {@link #setImeActionLabel}.
+     *
+     * @see #setImeActionLabel
+     * @see android.view.inputmethod.EditorInfo
+     */
+    public CharSequence getImeActionLabel() {
+        return mInputContentType != null
+                ? mInputContentType.imeActionLabel : null;
+    }
+
+    /**
+     * Get the IME action ID previous set with {@link #setImeActionLabel}.
+     *
+     * @see #setImeActionLabel
+     * @see android.view.inputmethod.EditorInfo
+     */
+    public int getImeActionId() {
+        return mInputContentType != null
+                ? mInputContentType.imeActionId : 0;
+    }
+
+    /**
+     * Set a special OnClickListener to be called when an action is performed
+     * on the text view.  This will be called when the enter key is pressed,
+     * or when an action supplied to the IME is selected by the user.
+     */
+    public void setOnEditorActionListener(OnEditorActionListener l) {
+        if (mInputContentType == null) {
+            mInputContentType = new InputContentType();
+        }
+        mInputContentType.onEditorActionListener = l;
+    }
+    
+    /**
+     * Called when an attached input method calls
+     * {@link InputConnection#performEditorAction(int)
+     * InputConnection.performEditorAction()}
+     * for this text view.  The default implementation will call your click
+     * listener supplied to {@link #setOnEditorActionListener},
+     * or generate an enter key down/up pair to invoke the action if not.
+     * 
+     * @param actionCode The code of the action being performed.
+     * 
+     * @see #setOnEditorActionListener
+     */
+    public void onEditorAction(int actionCode) {
+        final InputContentType ict = mInputContentType;
+        if (ict != null) {
+            if (ict.onEditorActionListener != null) {
+                if (ict.onEditorActionListener.onEditorAction(this,
+                        actionCode, null)) {
+                    return;
+                }
+            }
+        }
+        
+        if (actionCode == EditorInfo.IME_ACTION_NEXT &&
+                (ict != null || !shouldAdvanceFocusOnEnter())) {
+            // This is the default handling for the NEXT action, to advance
+            // focus.  Note that for backwards compatibility we don't do this
+            // default handling if explicit ime options have not been given,
+            // and we do not advance by default on an enter key -- in that
+            // case, we want to turn this into the normal enter key codes that
+            // an app may be expecting.
+            View v = focusSearch(FOCUS_DOWN);
+            if (v != null) {
+                if (!v.requestFocus(FOCUS_DOWN)) {
+                    throw new IllegalStateException("focus search returned a view " +
+                            "that wasn't able to take focus!");
+                }
+            }
+            return;
+        }
+        
+        Handler h = getHandler();
+        long eventTime = SystemClock.uptimeMillis();
+        h.sendMessage(h.obtainMessage(ViewRoot.DISPATCH_KEY_FROM_IME,
+                new KeyEvent(eventTime, eventTime,
+                KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER, 0, 0, 0, 0,
+                KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE)));
+        h.sendMessage(h.obtainMessage(ViewRoot.DISPATCH_KEY_FROM_IME,
+                new KeyEvent(SystemClock.uptimeMillis(), eventTime,
+                KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER, 0, 0, 0, 0,
+                KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE)));
+    }
+    
+    /**
      * Set the private content type of the text, which is the
-     * {@link EditorInfo#privateContentType TextBoxAttribute.privateContentType}
+     * {@link EditorInfo#privateImeOptions EditorInfo.privateImeOptions}
      * field that will be filled in when creating an input connection.
      *
-     * @see #getPrivateContentType()
-     * @see EditorInfo#privateContentType
-     * @attr ref android.R.styleable#TextView_editorPrivateContentType
+     * @see #getPrivateImeOptions()
+     * @see EditorInfo#privateImeOptions
+     * @attr ref android.R.styleable#TextView_privateImeOptions
      */
-    public void setPrivateContentType(String type) {
+    public void setPrivateImeOptions(String type) {
         if (mInputContentType == null) mInputContentType = new InputContentType();
-        mInputContentType.privateContentType = type;
+        mInputContentType.privateImeOptions = type;
     }
 
     /**
      * Get the private type of the content.
      *
-     * @see #setPrivateContentType(String)
-     * @see EditorInfo#privateContentType
+     * @see #setPrivateImeOptions(String)
+     * @see EditorInfo#privateImeOptions
      */
-    public String getPrivateContentType() {
+    public String getPrivateImeOptions() {
         return mInputContentType != null
-                ? mInputContentType.privateContentType : null;
+                ? mInputContentType.privateImeOptions : null;
     }
 
     /**
@@ -3807,7 +3992,7 @@
      * but also in mail addresses and subjects which will display on multiple
      * lines but where it doesn't make sense to insert newlines.
      */
-    private boolean advanceFocusOnEnter() {
+    protected boolean shouldAdvanceFocusOnEnter() {
         if (mInput == null) {
             return false;
         }
@@ -3828,15 +4013,37 @@
         return false;
     }
 
+    private boolean isInterestingEnter(KeyEvent event) {
+        if ((event.getFlags() & KeyEvent.FLAG_SOFT_KEYBOARD) != 0 &&
+                mInputContentType != null &&
+                (mInputContentType.imeOptions &
+                        EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
+            // If this enter key came from a soft keyboard, and the
+            // text editor has been configured to not do a default
+            // action for software enter keys, then we aren't interested.
+            return false;
+        }
+        return true;
+    }
+    
     private int doKeyDown(int keyCode, KeyEvent event, KeyEvent otherEvent) {
         if (!isEnabled()) {
             return 0;
         }
 
         switch (keyCode) {
-            case KeyEvent.KEYCODE_DPAD_CENTER:
             case KeyEvent.KEYCODE_ENTER:
-                if (advanceFocusOnEnter()) {
+                if (!isInterestingEnter(event)) {
+                    // Ignore enter key we aren't interested in.
+                    return -1;
+                }
+                if (mInputContentType != null
+                        && mInputContentType.onEditorActionListener != null) {
+                    mInputContentType.enterDown = true;
+                }
+                // fall through...
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+                if (shouldAdvanceFocusOnEnter()) {
                     return 0;
                 }
         }
@@ -3939,7 +4146,17 @@
                 return super.onKeyUp(keyCode, event);
                 
             case KeyEvent.KEYCODE_ENTER:
-                if (advanceFocusOnEnter()) {
+                if (mInputContentType != null
+                        && mInputContentType.onEditorActionListener != null
+                        && mInputContentType.enterDown) {
+                    mInputContentType.enterDown = false;
+                    if (mInputContentType.onEditorActionListener.onEditorAction(
+                            this, EditorInfo.IME_UNDEFINED, event)) {
+                        return true;
+                    }
+                }
+                
+                if (shouldAdvanceFocusOnEnter()) {
                     /*
                      * If there is a click listener, just call through to
                      * super, which will invoke it.
@@ -3994,11 +4211,26 @@
                 mInputMethodState = new InputMethodState();
             }
             outAttrs.inputType = mInputType;
-            outAttrs.hintText = mHint;
             if (mInputContentType != null) {
-                outAttrs.privateContentType = mInputContentType.privateContentType;
+                outAttrs.imeOptions = mInputContentType.imeOptions;
+                outAttrs.privateImeOptions = mInputContentType.privateImeOptions;
+                outAttrs.actionLabel = mInputContentType.imeActionLabel;
+                outAttrs.actionId = mInputContentType.imeActionId;
                 outAttrs.extras = mInputContentType.extras;
+            } else {
+                outAttrs.imeOptions = EditorInfo.IME_UNDEFINED;
             }
+            if (outAttrs.imeOptions == EditorInfo.IME_UNDEFINED) {
+                if (focusSearch(FOCUS_DOWN) != null) {
+                    // An action has not been set, but the enter key will move to
+                    // the next focus, so set the action to that.
+                    outAttrs.imeOptions = EditorInfo.IME_ACTION_NEXT;
+                    if (!shouldAdvanceFocusOnEnter()) {
+                        outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION;
+                    }
+                }
+            }
+            outAttrs.hintText = mHint;
             if (mText instanceof Editable) {
                 InputConnection ic = new EditableInputConnection(this);
                 outAttrs.initialSelStart = Selection.getSelectionStart(mText);
@@ -5787,6 +6019,9 @@
             }
             // Don't leave us in the middle of a batch edit.
             onEndBatchEdit();
+            if (mInputContentType != null) {
+                mInputContentType.enterDown = false;
+            }
         }
 
         startStopMarquee(hasWindowFocus);
@@ -5880,8 +6115,7 @@
         mScroller = s;
     }
 
-    private static class Blink extends Handler
-            implements Runnable {
+    private static class Blink extends Handler implements Runnable {
         private WeakReference<TextView> mView;
         private boolean mCancelled;
 
@@ -6139,23 +6373,44 @@
         }
 
         int start = end;
-        char c;
         int len = mText.length();
 
-        while (start > 0 && (((c = mTransformed.charAt(start - 1)) == '\'') ||
-                             (Character.isLetterOrDigit(c)))) {
-            start--;
+        for (; start > 0; start--) {
+            char c = mTransformed.charAt(start - 1);
+            int type = Character.getType(c);
+
+            if (c != '\'' &&
+                type != Character.UPPERCASE_LETTER &&
+                type != Character.LOWERCASE_LETTER &&
+                type != Character.TITLECASE_LETTER &&
+                type != Character.MODIFIER_LETTER &&
+                type != Character.DECIMAL_DIGIT_NUMBER) {
+                break;
+            }
         }
 
-        while (end < len && (((c = mTransformed.charAt(end)) == '\'') ||
-                             (Character.isLetterOrDigit(c)))) {
-            end++;
+        for (; end < len; end++) {
+            char c = mTransformed.charAt(end);
+            int type = Character.getType(c);
+
+            if (c != '\'' &&
+                type != Character.UPPERCASE_LETTER &&
+                type != Character.LOWERCASE_LETTER &&
+                type != Character.TITLECASE_LETTER &&
+                type != Character.MODIFIER_LETTER &&
+                type != Character.DECIMAL_DIGIT_NUMBER) {
+                break;
+            }
         }
 
         if (start == end) {
             return null;
         }
 
+        if (end - start > 48) {
+            return null;
+        }
+
         return TextUtils.substring(mTransformed, start, end);
     }
 
diff --git a/core/java/android/widget/ZoomButtonsController.java b/core/java/android/widget/ZoomButtonsController.java
new file mode 100644
index 0000000..ec45e23
--- /dev/null
+++ b/core/java/android/widget/ZoomButtonsController.java
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.Settings;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.WindowManager;
+import android.view.View.OnClickListener;
+import android.view.WindowManager.LayoutParams;
+
+// TODO: make sure no px values exist, only dip (scale if necessary from Viewconfiguration)
+
+/**
+ * TODO: Docs
+ *
+ * If you are using this with a custom View, please call
+ * {@link #setVisible(boolean) setVisible(false)} from the
+ * {@link View#onDetachedFromWindow}.
+ *
+ * @hide
+ */
+public class ZoomButtonsController implements View.OnTouchListener {
+
+    private static final String TAG = "ZoomButtonsController";
+
+    private static final int ZOOM_CONTROLS_TIMEOUT =
+            (int) ViewConfiguration.getZoomControlsTimeout();
+
+    // TODO: scaled to density
+    private static final int ZOOM_CONTROLS_TOUCH_PADDING = 20;
+    
+    private Context mContext;
+    private WindowManager mWindowManager;
+
+    /**
+     * The view that is being zoomed by this zoom ring.
+     */
+    private View mOwnerView;
+
+    /**
+     * The bounds of the owner view in global coordinates. This is recalculated
+     * each time the zoom ring is shown.
+     */
+    private Rect mOwnerViewBounds = new Rect();
+
+    /**
+     * The container that is added as a window.
+     */
+    private FrameLayout mContainer;
+    private LayoutParams mContainerLayoutParams;
+    private int[] mContainerLocation = new int[2];
+
+    private ZoomControls mControls;
+    
+    /**
+     * The view (or null) that should receive touch events. This will get set if
+     * the touch down hits the container. It will be reset on the touch up.
+     */
+    private View mTouchTargetView;
+    /**
+     * The {@link #mTouchTargetView}'s location in window, set on touch down.
+     */
+    private int[] mTouchTargetLocationInWindow = new int[2];
+    /**
+     * If the zoom ring is dismissed but the user is still in a touch
+     * interaction, we set this to true. This will ignore all touch events until
+     * up/cancel, and then set the owner's touch listener to null.
+     */
+    private boolean mReleaseTouchListenerOnUp;
+
+    private boolean mIsVisible;
+
+    private Rect mTempRect = new Rect();
+
+    private OnZoomListener mCallback;
+
+    /**
+     * When showing the zoom, we add the view as a new window. However, there is
+     * logic that needs to know the size of the zoom which is determined after
+     * it's laid out. Therefore, we must post this logic onto the UI thread so
+     * it will be exceuted AFTER the layout. This is the logic.
+     */
+    private Runnable mPostedVisibleInitializer;
+
+    private IntentFilter mConfigurationChangedFilter =
+            new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED);
+
+    private BroadcastReceiver mConfigurationChangedReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (!mIsVisible) return;
+
+            mHandler.removeMessages(MSG_POST_CONFIGURATION_CHANGED);
+            mHandler.sendEmptyMessage(MSG_POST_CONFIGURATION_CHANGED);
+        }
+    };
+
+    /** When configuration changes, this is called after the UI thread is idle. */
+    private static final int MSG_POST_CONFIGURATION_CHANGED = 2;
+    /** Used to delay the zoom ring dismissal. */
+    private static final int MSG_DISMISS_ZOOM_RING = 3;
+    /**
+     * If setVisible(true) is called and the owner view's window token is null,
+     * we delay the setVisible(true) call until it is not null.
+     */
+    private static final int MSG_POST_SET_VISIBLE = 4;
+    
+    private Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_POST_CONFIGURATION_CHANGED:
+                    onPostConfigurationChanged();
+                    break;
+
+                case MSG_DISMISS_ZOOM_RING:
+                    setVisible(false);
+                    break;
+                    
+                case MSG_POST_SET_VISIBLE:
+                    if (mOwnerView.getWindowToken() == null) {
+                        // Doh, it is still null, throw an exception
+                        throw new IllegalArgumentException(
+                                "Cannot make the zoom ring visible if the owner view is " +
+                                "not attached to a window.");
+                    }
+                    setVisible(true);
+                    break;
+            }
+
+        }
+    };
+
+    public ZoomButtonsController(Context context, View ownerView) {
+        mContext = context;
+        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+        mOwnerView = ownerView;
+
+        mContainer = createContainer();
+    }
+
+    private FrameLayout createContainer() {
+        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+        lp.gravity = Gravity.BOTTOM | Gravity.CENTER;
+        lp.flags = LayoutParams.FLAG_NOT_TOUCHABLE |
+                LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+        lp.height = LayoutParams.WRAP_CONTENT;
+        lp.width = LayoutParams.FILL_PARENT;
+        lp.type = LayoutParams.TYPE_APPLICATION_PANEL;
+        lp.format = PixelFormat.TRANSPARENT;
+        // TODO: make a new animation for this
+        lp.windowAnimations = com.android.internal.R.style.Animation_InputMethodFancy;
+        mContainerLayoutParams = lp;
+        
+        FrameLayout container = new FrameLayout(mContext);
+        container.setLayoutParams(lp);
+        container.setMeasureAllChildren(true);
+        
+        LayoutInflater inflater = (LayoutInflater) mContext
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        inflater.inflate(com.android.internal.R.layout.zoom_magnify, container);
+        
+        mControls = (ZoomControls) container.findViewById(com.android.internal.R.id.zoomControls);
+        mControls.setOnZoomInClickListener(new OnClickListener() {
+            public void onClick(View v) {
+                dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
+                if (mCallback != null) mCallback.onZoom(true);
+            }
+        });
+        mControls.setOnZoomOutClickListener(new OnClickListener() {
+            public void onClick(View v) {
+                dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
+                if (mCallback != null) mCallback.onZoom(false);
+            }
+        });
+
+        View overview = container.findViewById(com.android.internal.R.id.zoomMagnify);
+        overview.setVisibility(View.GONE);
+        overview.setOnClickListener(new OnClickListener() {
+            public void onClick(View v) {
+                dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
+                if (mCallback != null) mCallback.onOverview();
+            }
+        });
+        
+        return container;
+    }
+    
+    public void setCallback(OnZoomListener callback) {
+        mCallback = callback;
+    }
+
+    public void setFocusable(boolean focusable) {
+        if (focusable) {
+            mContainerLayoutParams.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE; 
+        } else {
+            mContainerLayoutParams.flags |= LayoutParams.FLAG_NOT_FOCUSABLE;
+        }
+        
+        if (mIsVisible) {
+            mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams);
+        }
+    }
+    
+    public void setOverviewVisible(boolean visible) {
+        mContainer.findViewById(com.android.internal.R.id.zoomMagnify)
+                .setVisibility(visible ? View.VISIBLE : View.GONE);
+    }
+
+    public boolean isVisible() {
+        return mIsVisible;
+    }
+
+    public void setVisible(boolean visible) {
+
+        if (!useThisZoom(mContext)) return;
+        
+        if (visible) {
+            if (mOwnerView.getWindowToken() == null) {
+                /*
+                 * We need a window token to show ourselves, maybe the owner's
+                 * window hasn't been created yet but it will have been by the
+                 * time the looper is idle, so post the setVisible(true) call.
+                 */
+                if (!mHandler.hasMessages(MSG_POST_SET_VISIBLE)) {
+                    mHandler.sendEmptyMessage(MSG_POST_SET_VISIBLE);
+                }
+                return;
+            }
+            
+            dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
+        }
+
+        if (mIsVisible == visible) {
+            return;
+        }
+        mIsVisible = visible;
+
+        if (visible) {
+            if (mContainerLayoutParams.token == null) {
+                mContainerLayoutParams.token = mOwnerView.getWindowToken();
+            }
+
+            mWindowManager.addView(mContainer, mContainerLayoutParams);
+
+            if (mPostedVisibleInitializer == null) {
+                mPostedVisibleInitializer = new Runnable() {
+                    public void run() {
+                        refreshPositioningVariables();
+
+                        if (mCallback != null) {
+                            mCallback.onVisibilityChanged(true);
+                        }
+                    }
+                };
+            }
+
+            mHandler.post(mPostedVisibleInitializer);
+
+            // Handle configuration changes when visible
+            mContext.registerReceiver(mConfigurationChangedReceiver, mConfigurationChangedFilter);
+
+            // Steal touches events from the owner
+            mOwnerView.setOnTouchListener(this);
+            mReleaseTouchListenerOnUp = false;
+
+        } else {
+            // Don't want to steal any more touches
+            if (mTouchTargetView != null) {
+                // We are still stealing the touch events for this touch
+                // sequence, so release the touch listener later
+                mReleaseTouchListenerOnUp = true;
+            } else {
+                mOwnerView.setOnTouchListener(null);
+            }
+
+            // No longer care about configuration changes
+            mContext.unregisterReceiver(mConfigurationChangedReceiver);
+
+            mWindowManager.removeView(mContainer);
+            mHandler.removeCallbacks(mPostedVisibleInitializer);
+
+            if (mCallback != null) {
+                mCallback.onVisibilityChanged(false);
+            }
+        }
+
+    }
+
+    /**
+     * TODO: docs
+     *
+     * Notes:
+     * - Please ensure you set your View to INVISIBLE not GONE when hiding it.
+     *
+     * @return TODO
+     */
+    public FrameLayout getContainer() {
+        return mContainer;
+    }
+
+    public int getZoomRingId() {
+        return mControls.getId();
+    }
+
+    private void dismissControlsDelayed(int delay) {
+        mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
+        mHandler.sendEmptyMessageDelayed(MSG_DISMISS_ZOOM_RING, delay);
+    }
+
+    /**
+     * Should be called by the client for each event belonging to the second tap
+     * (the down, move, up, and cancel events).
+     *
+     * @param event The event belonging to the second tap.
+     * @return Whether the event was consumed.
+     */
+    public boolean handleDoubleTapEvent(MotionEvent event) {
+        if (!useThisZoom(mContext)) return false;
+        
+        int action = event.getAction();
+
+        if (action == MotionEvent.ACTION_DOWN) {
+            int x = (int) event.getX();
+            int y = (int) event.getY();
+
+            setVisible(true);
+            centerPoint(x, y);
+        }
+
+        return true;
+    }
+
+    private void refreshPositioningVariables() {
+        // Calculate the owner view's bounds
+        mOwnerView.getGlobalVisibleRect(mOwnerViewBounds);
+        mContainer.getLocationOnScreen(mContainerLocation);
+    }
+
+    /**
+     * Centers the point (in owner view's coordinates).
+     */
+    private void centerPoint(int x, int y) {
+        if (mCallback != null) {
+            mCallback.onCenter(x, y);
+        }
+    }
+
+    public boolean onTouch(View v, MotionEvent event) {
+        int action = event.getAction();
+
+        if (mReleaseTouchListenerOnUp) {
+            // The ring was dismissed but we need to throw away all events until the up
+            if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+                mOwnerView.setOnTouchListener(null);
+                setTouchTargetView(null);
+                mReleaseTouchListenerOnUp = false;
+            }
+
+            // Eat this event
+            return true;
+        }
+
+        // TODO: optimize this (it ends up removing message and queuing another)
+        dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
+        
+        View targetView = mTouchTargetView;
+
+        switch (action) {
+            case MotionEvent.ACTION_DOWN:
+                targetView = getViewForTouch((int) event.getRawX(), (int) event.getRawY());
+                setTouchTargetView(targetView);
+                break;
+
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                setTouchTargetView(null);
+                break;
+        }
+
+        if (targetView != null) {
+            // The upperleft corner of the target view in raw coordinates
+            int targetViewRawX = mContainerLocation[0] + mTouchTargetLocationInWindow[0];
+            int targetViewRawY = mContainerLocation[1] + mTouchTargetLocationInWindow[1];
+
+            MotionEvent containerEvent = MotionEvent.obtain(event);
+            // Convert the motion event into the target view's coordinates (from
+            // owner view's coordinates)
+            containerEvent.offsetLocation(mOwnerViewBounds.left - targetViewRawX,
+                    mOwnerViewBounds.top - targetViewRawY);
+            boolean retValue = targetView.dispatchTouchEvent(containerEvent);
+            containerEvent.recycle();
+            return retValue;
+
+        } else {
+            return false;
+        }
+    }
+
+    private void setTouchTargetView(View view) {
+        mTouchTargetView = view;
+        if (view != null) {
+            view.getLocationInWindow(mTouchTargetLocationInWindow);
+        }
+    }
+
+    /**
+     * Returns the View that should receive a touch at the given coordinates.
+     *
+     * @param rawX The raw X.
+     * @param rawY The raw Y.
+     * @return The view that should receive the touches, or null if there is not one.
+     */
+    private View getViewForTouch(int rawX, int rawY) {
+        // Reverse order so the child drawn on top gets first dibs.
+        int containerCoordsX = rawX - mContainerLocation[0];
+        int containerCoordsY = rawY - mContainerLocation[1];
+        Rect frame = mTempRect;
+        for (int i = mContainer.getChildCount() - 1; i >= 0; i--) {
+            View child = mContainer.getChildAt(i);
+            if (child.getVisibility() != View.VISIBLE) {
+                continue;
+            }
+
+            child.getHitRect(frame);
+            // Expand the touch region
+            frame.top -= ZOOM_CONTROLS_TOUCH_PADDING;
+            if (frame.contains(containerCoordsX, containerCoordsY)) {
+                return child;
+            }
+        }
+
+        return null;
+    }
+
+    private void onPostConfigurationChanged() {
+        dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
+        refreshPositioningVariables();
+    }
+
+    public static boolean useThisZoom(Context context) {
+        return ZoomRingController.getZoomType(context) == 2;
+    }
+    
+    public interface OnZoomListener {
+        void onCenter(int x, int y);
+        void onVisibilityChanged(boolean visible);
+        void onZoom(boolean zoomIn);
+        void onOverview();
+    }
+}
diff --git a/core/java/android/widget/ZoomRing.java b/core/java/android/widget/ZoomRing.java
index a29e1a0..a5a867b 100644
--- a/core/java/android/widget/ZoomRing.java
+++ b/core/java/android/widget/ZoomRing.java
@@ -77,7 +77,7 @@
     private int mPreviousWidgetDragX;
     private int mPreviousWidgetDragY;
 
-    private boolean mDrawThumb = true;
+    private boolean mThumbVisible = true;
     private Drawable mThumbDrawable;
     
     /** Shown beneath the thumb if we can still zoom in. */
@@ -91,6 +91,13 @@
     private static final int THUMB_ARROWS_FADE_DURATION = 300;
     private long mThumbArrowsFadeStartTime;
     private int mThumbArrowsAlpha = 255;
+
+    private static final int THUMB_PLUS_MINUS_DISTANCE = 69;
+    private static final int THUMB_PLUS_MINUS_OFFSET_ANGLE = TWO_PI_INT_MULTIPLIED / 11;
+    /** Drawn (without rotation) on top of the arrow. */
+    private Drawable mThumbPlusDrawable;
+    /** Drawn (without rotation) on top of the arrow. */
+    private Drawable mThumbMinusDrawable;
     
     private static final int MODE_IDLE = 0;
 
@@ -99,7 +106,7 @@
      * are waiting for him to move the slop amount before considering him in the
      * drag thumb state.
      */
-    private static final int MODE_WAITING_FOR_DRAG_THUMB = 5;
+    private static final int MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP = 5;
     private static final int MODE_DRAG_THUMB = 1;
     /**
      * User has his finger down, but we are waiting for him to pass the touch
@@ -109,11 +116,14 @@
     private static final int MODE_WAITING_FOR_MOVE_ZOOM_RING = 4;
     private static final int MODE_MOVE_ZOOM_RING = 2;
     private static final int MODE_TAP_DRAG = 3;
-    /** Ignore the touch interaction.  Reset to MODE_IDLE after up/cancel. */
-    private static final int MODE_IGNORE_UNTIL_UP = 6;
+    /** Ignore the touch interaction until the user touches the thumb again. */
+    private static final int MODE_IGNORE_UNTIL_TOUCHES_THUMB = 6;
     private int mMode;
-
-    private long mPreviousUpTime;
+    
+    /** Records the last mode the user was in. */
+    private int mPreviousMode;
+    
+    private long mPreviousCenterUpTime;
     private int mPreviousDownX;
     private int mPreviousDownY;
 
@@ -122,7 +132,9 @@
     private OnZoomRingCallback mCallback;
     private int mPreviousCallbackAngle;
     private int mCallbackThreshold = Integer.MAX_VALUE;
-
+    /** If the user drags to within __% of a tick, snap to that tick. */
+    private int mFuzzyCallbackThreshold = Integer.MAX_VALUE;
+    
     private boolean mResetThumbAutomatically = true;
     private int mThumbDragStartAngle;
 
@@ -133,6 +145,8 @@
     
     private Scroller mThumbScroller;
 
+    private boolean mVibration = true;
+    
     private static final int MSG_THUMB_SCROLLER_TICK = 1;
     private static final int MSG_THUMB_ARROWS_FADE_TICK = 2;
     private Handler mHandler = new Handler() {
@@ -163,6 +177,8 @@
                 mutate();
         mThumbMinusArrowDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_minus_arrow_rotatable).
                 mutate();
+        mThumbPlusDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_plus);
+        mThumbMinusDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_minus);
         if (DRAW_TRAIL) {
             mTrail = res.getDrawable(R.drawable.zoom_ring_trail).mutate();
         }
@@ -175,7 +191,7 @@
         mThumbHalfHeight = mThumbDrawable.getIntrinsicHeight() / 2;
         mThumbHalfWidth = mThumbDrawable.getIntrinsicWidth() / 2;
 
-        mCallbackThreshold = PI_INT_MULTIPLIED / 6;
+        setCallbackThreshold(PI_INT_MULTIPLIED / 6);
     }
 
     public ZoomRing(Context context, AttributeSet attrs) {
@@ -193,8 +209,20 @@
     // TODO: rename
     public void setCallbackThreshold(int callbackThreshold) {
         mCallbackThreshold = callbackThreshold;
+        mFuzzyCallbackThreshold = (int) (callbackThreshold * 0.65f);
     }
 
+    public void setVibration(boolean vibrate) {
+        mVibration = vibrate;
+    }
+    
+    public void setThumbVisible(boolean thumbVisible) {
+        if (mThumbVisible != thumbVisible) {
+            mThumbVisible = thumbVisible;
+            invalidate();
+        }
+    }
+    
     // TODO: from XML too
     public void setRingBounds(int innerRadius, int outerRadius) {
         mBoundInnerRadiusSquared = innerRadius * innerRadius;
@@ -306,15 +334,7 @@
     public void setThumbAngleAnimated(int angle, int duration) {
         // The angle when going from the current angle to the new angle
         int deltaAngle = getDelta(mThumbAngle, angle);
-        // Counter clockwise if the new angle is more the current angle
-        boolean counterClockwise = deltaAngle > 0;
-        
-        if (deltaAngle > PI_INT_MULTIPLIED || deltaAngle < -PI_INT_MULTIPLIED) {
-            // It's quicker to go the other direction
-            counterClockwise = !counterClockwise;
-        }
-        
-        setThumbAngleAnimated(angle, duration, counterClockwise);
+        setThumbAngleAnimated(angle, duration, deltaAngle > 0);
     }
     
     public void setThumbAngleAnimated(int angle, int duration, boolean counterClockwise) {
@@ -354,14 +374,10 @@
         return mThumbScroller.getCurrX() % TWO_PI_INT_MULTIPLIED;
     }
     
-    public void resetThumbAngle(int angle) {
-        mPreviousCallbackAngle = angle;
-        setThumbAngleInt(angle);
-    }
-
     public void resetThumbAngle() {
         if (mResetThumbAutomatically) {
-            resetThumbAngle(0);
+            mPreviousCallbackAngle = 0;
+            setThumbAngleInt(0);
         }
     }
     
@@ -394,101 +410,119 @@
             mTrail.setBounds(0, 0, right - left, bottom - top);
         }
         
+        // These drawables are the same size as the track
         mThumbPlusArrowDrawable.setBounds(0, 0, right - left, bottom - top);
         mThumbMinusArrowDrawable.setBounds(0, 0, right - left, bottom - top);
     }
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
+//        Log.d(TAG, "History size: " + event.getHistorySize());
+        
         return handleTouch(event.getAction(), event.getEventTime(),
                 (int) event.getX(), (int) event.getY(), (int) event.getRawX(),
                 (int) event.getRawY());
     }
 
-    private void resetState() {
-        mMode = MODE_IDLE;
+    private void resetToIdle() {
+        setMode(MODE_IDLE);
         mPreviousWidgetDragX = mPreviousWidgetDragY = Integer.MIN_VALUE;
         mAcculumalatedTrailAngle = 0.0;
     }
 
     public void setTapDragMode(boolean tapDragMode, int x, int y) {
-        resetState();
-        mMode = tapDragMode ? MODE_TAP_DRAG : MODE_IDLE;
-
+        resetToIdle();
         if (tapDragMode) {
+            setMode(MODE_TAP_DRAG);
+            mCallback.onUserInteractionStarted();
             onThumbDragStarted(getAngle(x - mCenterX, y - mCenterY));
+        } else {
+            onTouchUp(SystemClock.elapsedRealtime(), true);
         }
     }
 
     public boolean handleTouch(int action, long time, int x, int y, int rawX, int rawY) {
-        switch (action) {
+        // local{X,Y} will be where the center of the widget is (0,0)
+        int localX = x - mCenterX;
+        int localY = y - mCenterY;
 
+        /*
+         * If we are not drawing the thumb, there is no way for the user to be
+         * touching the thumb. Also, if this is the case, assume they are not
+         * touching the ring (so the user cannot absolute set the thumb, and
+         * there will be a larger touch region for going into the move-ring
+         * mode).
+         */
+        boolean isTouchingThumb = mThumbVisible;
+        boolean isTouchingRing = mThumbVisible;
+        
+        int touchAngle = getAngle(localX, localY);
+//        printAngle("touchAngle", touchAngle);
+//        printAngle("mThumbAngle", mThumbAngle);
+//        printAngle("mPreviousCallbackAngle", mPreviousCallbackAngle);
+//        Log.d(TAG, "");
+        		
+        
+        int radiusSquared = localX * localX + localY * localY;
+        if (radiusSquared < mBoundInnerRadiusSquared ||
+                radiusSquared > mBoundOuterRadiusSquared) {
+            // Out-of-bounds
+            isTouchingThumb = false;
+            isTouchingRing = false;
+        }
+
+        if (isTouchingThumb) {
+            int deltaThumbAndTouch = getDelta(mThumbAngle, touchAngle);
+            int absoluteDeltaThumbAndTouch = deltaThumbAndTouch >= 0 ?
+                    deltaThumbAndTouch : -deltaThumbAndTouch;
+            if (absoluteDeltaThumbAndTouch > THUMB_GRAB_SLOP) {
+                // Didn't grab close enough to the thumb
+                isTouchingThumb = false;
+            }
+        }
+
+        switch (action) {
             case MotionEvent.ACTION_DOWN:
-                if (time - mPreviousUpTime <= DOUBLE_TAP_DISMISS_TIMEOUT) {
+                if (!isTouchingRing &&
+                        (time - mPreviousCenterUpTime <= DOUBLE_TAP_DISMISS_TIMEOUT)) {
+                    // Make sure the double-tap is in the center of the widget (and not on the ring)
                     mCallback.onZoomRingDismissed(true);
-                    onTouchUp(time);
+                    onTouchUp(time, isTouchingRing);
                     
                     // Dismissing, so halt here
                     return true;
                 }
 
+                resetToIdle();
                 mCallback.onUserInteractionStarted();
                 mPreviousDownX = x;
                 mPreviousDownY = y;
-                resetState();
                 // Fall through to code below switch (since the down is used for
                 // jumping to the touched tick)
                 break;
 
             case MotionEvent.ACTION_MOVE:
-                if (mMode == MODE_IGNORE_UNTIL_UP) return true;
-                
                 // Fall through to code below switch
                 break;
 
             case MotionEvent.ACTION_CANCEL:
             case MotionEvent.ACTION_UP:
-                onTouchUp(time);
+                onTouchUp(time, isTouchingRing);
                 return true;
 
             default:
                 return false;
         }
 
-        // local{X,Y} will be where the center of the widget is (0,0)
-        int localX = x - mCenterX;
-        int localY = y - mCenterY;
-        boolean isTouchingThumb = true;
-        boolean isInRingBounds = true;
-        
-        int touchAngle = getAngle(localX, localY);
-        int radiusSquared = localX * localX + localY * localY;
-        if (radiusSquared < mBoundInnerRadiusSquared ||
-                radiusSquared > mBoundOuterRadiusSquared) {
-            // Out-of-bounds
-            isTouchingThumb = false;
-            isInRingBounds = false;
-        }
-
-        int deltaThumbAndTouch = getDelta(mThumbAngle, touchAngle);
-        int absoluteDeltaThumbAndTouch = deltaThumbAndTouch >= 0 ?
-                deltaThumbAndTouch : -deltaThumbAndTouch;
-        if (isTouchingThumb &&
-                absoluteDeltaThumbAndTouch > THUMB_GRAB_SLOP) {
-            // Didn't grab close enough to the thumb
-            isTouchingThumb = false;
-        }
-
         if (mMode == MODE_IDLE) {
             if (isTouchingThumb) {
                 // They grabbed the thumb
-                mMode = MODE_DRAG_THUMB;
+                setMode(MODE_DRAG_THUMB);
                 onThumbDragStarted(touchAngle);
                 
-            } else if (isInRingBounds) {
+            } else if (isTouchingRing) {
                 // They tapped somewhere else on the ring
                 int tickAngle = getClosestTickAngle(touchAngle);
-
                 int deltaThumbAndTick = getDelta(mThumbAngle, tickAngle);
                 int boundAngle = getBoundIfExceeds(mThumbAngle, deltaThumbAndTick);
 
@@ -497,12 +531,12 @@
                     if (deltaThumbAndTick > MAX_ABS_JUMP_DELTA_ANGLE ||
                             deltaThumbAndTick < -MAX_ABS_JUMP_DELTA_ANGLE) {
                         // Trying to jump too far, ignore this touch interaction                    
-                        mMode = MODE_IGNORE_UNTIL_UP;
+                        setMode(MODE_IGNORE_UNTIL_TOUCHES_THUMB);
                         return true;
                     }
 
-                    // Make sure we only let them jump within bounds
                     if (boundAngle != Integer.MIN_VALUE) {
+                        // Cap the user's jump to the bound
                         tickAngle = boundAngle;
                     }
                 } else {
@@ -515,47 +549,59 @@
                         deltaThumbAndTick = getDelta(mThumbAngle, tickAngle, !oldDirectionIsCcw);
                         boundAngle = getBoundIfExceeds(mThumbAngle, deltaThumbAndTick);
                         if (boundAngle != Integer.MIN_VALUE) {
-                            // Not allowed to be here, it is between two bounds
-                            mMode = MODE_IGNORE_UNTIL_UP;
+                            // Cannot get to the tapped location because it is out-of-bounds
+                            setMode(MODE_IGNORE_UNTIL_TOUCHES_THUMB);
                             return true;
                         }
                     }
                 }
 
-                mMode = MODE_WAITING_FOR_DRAG_THUMB;
+                setMode(MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP);
                 mWaitingForDragThumbDownAngle = touchAngle;
                 boolean ccw = deltaThumbAndTick > 0;
                 setThumbAngleAnimated(tickAngle, 0, ccw);
                 
-                // Our thumb scrolling animation takes us from mThumbAngle to tickAngle
+                /*
+                 * Our thumb scrolling animation takes us from mThumbAngle to
+                 * tickAngle, so manifest that as the user dragging the thumb
+                 * there.
+                 */
                 onThumbDragStarted(mThumbAngle);
+                // We know which direction we want to go
                 onThumbDragged(tickAngle, true, ccw);
                 
             } else {
-                // They tapped somewhere else
-                mMode = MODE_WAITING_FOR_MOVE_ZOOM_RING;
+                // They tapped somewhere else on the widget
+                setMode(MODE_WAITING_FOR_MOVE_ZOOM_RING);
                 mCallback.onZoomRingSetMovableHintVisible(true);
             }
 
-        } else if (mMode == MODE_WAITING_FOR_DRAG_THUMB) {
+        } else if (mMode == MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP) {
             int deltaDownAngle = getDelta(mWaitingForDragThumbDownAngle, touchAngle);
             if ((deltaDownAngle < -THUMB_DRAG_SLOP || deltaDownAngle > THUMB_DRAG_SLOP) &&
                     isDeltaInBounds(mWaitingForDragThumbDownAngle, deltaDownAngle)) {
-                mMode = MODE_DRAG_THUMB;
+                setMode(MODE_DRAG_THUMB);
+                
+                // No need to call onThumbDragStarted, since that was done when they tapped-to-jump
             }
 
         } else if (mMode == MODE_WAITING_FOR_MOVE_ZOOM_RING) {
             if (Math.abs(x - mPreviousDownX) > mTouchSlop ||
                     Math.abs(y - mPreviousDownY) > mTouchSlop) {
                 /* Make sure the user has moved the slop amount before going into that mode. */
-                mMode = MODE_MOVE_ZOOM_RING;
+                setMode(MODE_MOVE_ZOOM_RING);
                 mCallback.onZoomRingMovingStarted();
             }
+        } else if (mMode == MODE_IGNORE_UNTIL_TOUCHES_THUMB) {
+            if (isTouchingThumb) {
+                // The user is back on the thumb, let's go back to the previous mode
+                setMode(mPreviousMode);
+            }
         }
 
         // Purposefully not an "else if"
         if (mMode == MODE_DRAG_THUMB || mMode == MODE_TAP_DRAG) {
-            if (isInRingBounds) {
+            if (isTouchingRing) {
                 onThumbDragged(touchAngle, false, false);
             }
         } else if (mMode == MODE_MOVE_ZOOM_RING) {
@@ -565,24 +611,39 @@
         return true;
     }
     
-    private void onTouchUp(long time) {
-        if (mMode == MODE_MOVE_ZOOM_RING || mMode == MODE_WAITING_FOR_MOVE_ZOOM_RING) {
+    private void onTouchUp(long time, boolean isTouchingRing) {
+        int mode = mMode;
+        if (mode == MODE_IGNORE_UNTIL_TOUCHES_THUMB) {
+            // For cleaning up, pretend like the user was still in the previous mode
+            mode = mPreviousMode;
+        }
+        
+        if (mode == MODE_MOVE_ZOOM_RING || mode == MODE_WAITING_FOR_MOVE_ZOOM_RING) {
             mCallback.onZoomRingSetMovableHintVisible(false);
-            if (mMode == MODE_MOVE_ZOOM_RING) {
+            if (mode == MODE_MOVE_ZOOM_RING) {
                 mCallback.onZoomRingMovingStopped();
             }
-        } else if (mMode == MODE_DRAG_THUMB || mMode == MODE_TAP_DRAG ||
-                mMode == MODE_WAITING_FOR_DRAG_THUMB) {
+        } else if (mode == MODE_DRAG_THUMB || mode == MODE_TAP_DRAG ||
+                mode == MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP) {
             onThumbDragStopped();
             
-            if (mMode == MODE_DRAG_THUMB) {
+            if (mode == MODE_DRAG_THUMB || mode == MODE_TAP_DRAG) {
                 // Animate back to a tick
                 setThumbAngleAnimated(mPreviousCallbackAngle, 0);
             }
         }
-
-        mPreviousUpTime = time;
         mCallback.onUserInteractionStopped();
+        
+        if (!isTouchingRing) {
+            mPreviousCenterUpTime = time;
+        }
+    }
+    
+    private void setMode(int mode) {
+        if (mode != mMode) {
+            mPreviousMode = mMode;
+            mMode = mode;
+        }
     }
 
     private boolean isDeltaInBounds(int startAngle, int deltaAngle) {
@@ -681,9 +742,8 @@
         
         int totalDeltaAngle;
         totalDeltaAngle = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw);
-        int fuzzyCallbackThreshold = (int) (mCallbackThreshold * 0.65f);
-        if (totalDeltaAngle >= fuzzyCallbackThreshold
-                || totalDeltaAngle <= -fuzzyCallbackThreshold) {
+        if (totalDeltaAngle >= mFuzzyCallbackThreshold
+                || totalDeltaAngle <= -mFuzzyCallbackThreshold) {
 
             if (!useDirection) {
                 // Set ccw to match the direction found by getDelta
@@ -737,7 +797,7 @@
                 // We bounded the touch angle
                 totalDeltaAngle = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw);
                 animateThumbToNewAngle = true;
-                mMode = MODE_IGNORE_UNTIL_UP;
+                setMode(MODE_IGNORE_UNTIL_TOUCHES_THUMB);
             }
             
             
@@ -764,11 +824,13 @@
                 boolean canStillZoom = mCallback.onZoomRingThumbDragged(
                         deltaLevels, mThumbDragStartAngle, touchAngle);
                 
-                // TODO: we're trying the haptics to see how it goes with
-                // users, so we're ignoring the settings (for now)
-                performHapticFeedback(HapticFeedbackConstants.ZOOM_RING_TICK,
-                        HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING |
-                        HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
+                if (mVibration) {
+                    // TODO: we're trying the haptics to see how it goes with
+                    // users, so we're ignoring the settings (for now)
+                    performHapticFeedback(HapticFeedbackConstants.ZOOM_RING_TICK,
+                            HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING |
+                            HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
+                }
                 
                 // Set the callback angle to the actual angle based on how many delta levels we gave
                 mPreviousCallbackAngle = getValidAngle(
@@ -791,6 +853,134 @@
             setThumbAngleAuto(touchAngle, useDirection, ccw);
         }
     }
+//    private void onThumbDragged(int touchAngle, boolean useDirection, boolean ccw) {
+//        int deltaPrevCbAndTouch = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw);
+//        
+//        if (!useDirection) {
+//            // Set ccw to match the direction found by getDelta
+//            ccw = deltaPrevCbAndTouch > 0;
+//            useDirection = true;            
+//        }
+//
+//        boolean animateThumbToNewAngle = false;
+//        boolean animationCcw = ccw;
+//
+//        if (deltaPrevCbAndTouch >= mFuzzyCallbackThreshold
+//                || deltaPrevCbAndTouch <= -mFuzzyCallbackThreshold) {
+//
+//            /*
+//             * When the user slides the thumb through the tick that corresponds
+//             * to a zoom bound, we don't want to abruptly stop there. Instead,
+//             * let the user slide it to the next tick, and then animate it back
+//             * to the original zoom bound tick. Because of this, we make sure
+//             * the delta from the bound is more than halfway to the next tick.
+//             * We make sure the bound is between the touch and the previous
+//             * callback to ensure we JUST passed the bound.
+//             */ 
+//            int oldTouchAngle = touchAngle;
+//            if (ccw && mThumbCcwBound != Integer.MIN_VALUE) {
+//                int deltaCcwBoundAndTouch =
+//                        getDelta(mThumbCcwBound, touchAngle, true, ccw);
+//                if (deltaCcwBoundAndTouch >= mCallbackThreshold / 2) {
+//                    // The touch has past far enough from the bound
+//                    int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackAngle,
+//                            touchAngle, true, ccw);
+//                    if (deltaPreviousCbAndTouch >= deltaCcwBoundAndTouch) {
+//                        // The bound is between the previous callback angle and the touch
+//                        // Cap to the bound
+//                        touchAngle = mThumbCcwBound;
+//                        /*
+//                         * We're moving the touch BACK to the bound, so animate
+//                         * back in the opposite direction that passed the bound.
+//                         */
+//                        animationCcw = false;
+//                    }
+//                }
+//            } else if (!ccw && mThumbCwBound != Integer.MIN_VALUE) {
+//                // See block above for general comments
+//                int deltaCwBoundAndTouch =
+//                        getDelta(mThumbCwBound, touchAngle, true, ccw);
+//                if (deltaCwBoundAndTouch <= -mCallbackThreshold / 2) {
+//                    int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackAngle,
+//                            touchAngle, true, ccw);
+//                    /*
+//                     * Both of these will be negative since we got delta in
+//                     * clockwise direction, and we want the magnitude of
+//                     * deltaPreviousCbAndTouch to be greater than the magnitude
+//                     * of deltaCwBoundAndTouch
+//                     */
+//                    if (deltaPreviousCbAndTouch <= deltaCwBoundAndTouch) {
+//                        touchAngle = mThumbCwBound;
+//                        animationCcw = true;
+//                    }
+//                }
+//            }
+//            if (touchAngle != oldTouchAngle) {
+//                // We bounded the touch angle
+//                deltaPrevCbAndTouch = getDelta(mPreviousCallbackAngle, touchAngle, true, ccw);
+//                // Animate back to the bound
+//                animateThumbToNewAngle = true;
+//                // Disallow movement now
+//                setMode(MODE_IGNORE_UNTIL_UP);
+//            }
+//            
+//            
+//            /*
+//             * Prevent it from jumping too far (this could happen if the user
+//             * goes through the center)
+//             */
+//
+//            if (mEnforceMaxAbsJump) {
+//                if (deltaPrevCbAndTouch <= -MAX_ABS_JUMP_DELTA_ANGLE) {
+//                    deltaPrevCbAndTouch = -MAX_ABS_JUMP_DELTA_ANGLE;
+//                    animateThumbToNewAngle = true;
+//                } else if (deltaPrevCbAndTouch >= MAX_ABS_JUMP_DELTA_ANGLE) {
+//                    deltaPrevCbAndTouch = MAX_ABS_JUMP_DELTA_ANGLE;
+//                    animateThumbToNewAngle = true;
+//                }
+//            }
+//
+//            /*
+//             * We need to cover the edge case of a user grabbing the thumb,
+//             * going into the center of the widget, and then coming out from the
+//             * center to an angle that's slightly below the angle he's trying to
+//             * hit. If we do int division, we'll end up with one level lower
+//             * than the one he was going for.
+//             */
+//            int deltaLevels = Math.round((float) deltaPrevCbAndTouch / mCallbackThreshold); 
+//            if (deltaLevels != 0) {
+//                boolean canStillZoom = mCallback.onZoomRingThumbDragged(
+//                        deltaLevels, mThumbDragStartAngle, touchAngle);
+//                
+//                if (mVibration) {
+//                    // TODO: we're trying the haptics to see how it goes with
+//                    // users, so we're ignoring the settings (for now)
+//                    performHapticFeedback(HapticFeedbackConstants.ZOOM_RING_TICK,
+//                            HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING |
+//                            HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
+//                
+//                }
+//                // Set the callback angle to the actual angle based on how many delta levels we gave
+//                mPreviousCallbackAngle = getValidAngle(
+//                        mPreviousCallbackAngle + (deltaLevels * mCallbackThreshold));
+//            }
+//        }
+//
+//        if (DRAW_TRAIL) {
+//            int deltaAngle = getDelta(mThumbAngle, touchAngle, true, ccw);
+//            mAcculumalatedTrailAngle += Math.toDegrees(deltaAngle / (double) RADIAN_INT_MULTIPLIER);
+//        }
+//            
+//        if (animateThumbToNewAngle) {
+//            setThumbAngleAnimated(touchAngle, 0, animationCcw);
+//        } else {
+//            /*
+//             * Use regular ccw here because animationCcw will never have been
+//             * changed if animateThumbToNewAngle is false
+//             */
+//            setThumbAngleAuto(touchAngle, true, ccw);
+//        }
+//    }
     
     private int getValidAngle(int invalidAngle) {
         if (invalidAngle < 0) {
@@ -818,16 +1008,16 @@
         mCallback.onZoomRingThumbDraggingStopped();
     }
 
-    private void onZoomRingMoved(int x, int y) {
+    private void onZoomRingMoved(int rawX, int rawY) {
         if (mPreviousWidgetDragX != Integer.MIN_VALUE) {
-            int deltaX = x - mPreviousWidgetDragX;
-            int deltaY = y - mPreviousWidgetDragY;
+            int deltaX = rawX - mPreviousWidgetDragX;
+            int deltaY = rawY - mPreviousWidgetDragY;
 
-            mCallback.onZoomRingMoved(deltaX, deltaY);
+            mCallback.onZoomRingMoved(deltaX, deltaY, rawX, rawY);
         }
 
-        mPreviousWidgetDragX = x;
-        mPreviousWidgetDragY = y;
+        mPreviousWidgetDragX = rawX;
+        mPreviousWidgetDragY = rawY;
     }
 
     @Override
@@ -859,15 +1049,17 @@
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
 
-        if (mDrawThumb) {
+        if (mThumbVisible) {
             if (DRAW_TRAIL) {
                 mTrail.draw(canvas);
             }
             if ((mThumbArrowsToDraw & THUMB_ARROW_PLUS) != 0) {
                 mThumbPlusArrowDrawable.draw(canvas);
+                mThumbPlusDrawable.draw(canvas);
             }
             if ((mThumbArrowsToDraw & THUMB_ARROW_MINUS) != 0) {
                 mThumbMinusArrowDrawable.draw(canvas);
+                mThumbMinusDrawable.draw(canvas);
             }
             mThumbDrawable.draw(canvas);
         }
@@ -877,6 +1069,28 @@
         int level = -angle * 10000 / ZoomRing.TWO_PI_INT_MULTIPLIED;
         mThumbPlusArrowDrawable.setLevel(level);
         mThumbMinusArrowDrawable.setLevel(level);
+        
+        // Assume it is a square
+        int halfSideLength = mThumbPlusDrawable.getIntrinsicHeight() / 2;
+        int unoffsetAngle = angle + mZeroAngle;
+        
+        int plusCenterX = (int) (Math.cos(1f * (unoffsetAngle - THUMB_PLUS_MINUS_OFFSET_ANGLE)
+                / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) + mCenterX;
+        int plusCenterY = (int) (Math.sin(1f * (unoffsetAngle - THUMB_PLUS_MINUS_OFFSET_ANGLE)
+                / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) * -1 + mCenterY;
+        mThumbPlusDrawable.setBounds(plusCenterX - halfSideLength,
+                plusCenterY - halfSideLength,
+                plusCenterX + halfSideLength,
+                plusCenterY + halfSideLength);
+        
+        int minusCenterX = (int) (Math.cos(1f * (unoffsetAngle + THUMB_PLUS_MINUS_OFFSET_ANGLE)
+                / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) + mCenterX;
+        int minusCenterY = (int) (Math.sin(1f * (unoffsetAngle + THUMB_PLUS_MINUS_OFFSET_ANGLE)
+                / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) * -1 + mCenterY;
+        mThumbMinusDrawable.setBounds(minusCenterX - halfSideLength,
+                minusCenterY - halfSideLength,
+                minusCenterX + halfSideLength,
+                minusCenterY + halfSideLength);
     }
     
     public void setThumbArrowsVisible(boolean visible) {
@@ -886,6 +1100,7 @@
             if (callbackAngle < mThumbCwBound - RADIAN_INT_ERROR ||
                     callbackAngle > mThumbCwBound + RADIAN_INT_ERROR) {
                 mThumbPlusArrowDrawable.setAlpha(255);
+                mThumbPlusDrawable.setAlpha(255);
                 mThumbArrowsToDraw |= THUMB_ARROW_PLUS;                
             } else {
                 mThumbArrowsToDraw &= ~THUMB_ARROW_PLUS;
@@ -893,6 +1108,7 @@
             if (callbackAngle < mThumbCcwBound - RADIAN_INT_ERROR ||
                     callbackAngle > mThumbCcwBound + RADIAN_INT_ERROR) {
                 mThumbMinusArrowDrawable.setAlpha(255);
+                mThumbMinusDrawable.setAlpha(255);
                 mThumbArrowsToDraw |= THUMB_ARROW_MINUS;
             } else {
                 mThumbArrowsToDraw &= ~THUMB_ARROW_MINUS;
@@ -917,10 +1133,14 @@
         if (mThumbArrowsAlpha < 0) mThumbArrowsAlpha = 0;
         if ((mThumbArrowsToDraw & THUMB_ARROW_PLUS) != 0) {
             mThumbPlusArrowDrawable.setAlpha(mThumbArrowsAlpha);
+            mThumbPlusDrawable.setAlpha(mThumbArrowsAlpha);
+            invalidateDrawable(mThumbPlusDrawable);
             invalidateDrawable(mThumbPlusArrowDrawable);
         }
         if ((mThumbArrowsToDraw & THUMB_ARROW_MINUS) != 0) {
             mThumbMinusArrowDrawable.setAlpha(mThumbArrowsAlpha);
+            mThumbMinusDrawable.setAlpha(mThumbArrowsAlpha);
+            invalidateDrawable(mThumbMinusDrawable);
             invalidateDrawable(mThumbMinusArrowDrawable);
         }
             
@@ -941,7 +1161,7 @@
         void onZoomRingSetMovableHintVisible(boolean visible);
         
         void onZoomRingMovingStarted();
-        boolean onZoomRingMoved(int deltaX, int deltaY);
+        boolean onZoomRingMoved(int deltaX, int deltaY, int rawX, int rawY);
         void onZoomRingMovingStopped();
         
         void onZoomRingThumbDraggingStarted();
diff --git a/core/java/android/widget/ZoomRingController.java b/core/java/android/widget/ZoomRingController.java
index 2e97fda..19f66a0 100644
--- a/core/java/android/widget/ZoomRingController.java
+++ b/core/java/android/widget/ZoomRingController.java
@@ -33,6 +33,7 @@
 import android.util.Log;
 import android.view.Gravity;
 import android.view.KeyEvent;
+import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewConfiguration;
@@ -47,30 +48,36 @@
 
 /**
  * TODO: Docs
- * 
+ *
  * If you are using this with a custom View, please call
  * {@link #setVisible(boolean) setVisible(false)} from the
  * {@link View#onDetachedFromWindow}.
- * 
+ *
  * @hide
  */
 public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
         View.OnTouchListener, View.OnKeyListener {
-    
+
     private static final int ZOOM_RING_RADIUS_INSET = 24;
 
     private static final int ZOOM_RING_RECENTERING_DURATION = 500;
 
     private static final String TAG = "ZoomRing";
 
-    public static final boolean USE_OLD_ZOOM = false; 
-    public static boolean useOldZoom(Context context) {
-        return Settings.System.getInt(context.getContentResolver(), "zoom", 1) == 0;
+    public static final boolean USE_OLD_ZOOM = false;
+    static int getZoomType(Context context) {
+        return Settings.System.getInt(context.getContentResolver(), "zoom", 1);
     }
-    
+    public static boolean useOldZoom(Context context) {
+        return getZoomType(context) == 0;
+    }
+    private static boolean useThisZoom(Context context) {
+        return getZoomType(context) == 1;
+    }
+
     private static final int ZOOM_CONTROLS_TIMEOUT =
             (int) ViewConfiguration.getZoomControlsTimeout();
-    
+
     // TODO: move these to ViewConfiguration or re-use existing ones
     // TODO: scale px values based on latest from ViewConfiguration
     private static final int SECOND_TAP_TIMEOUT = 500;
@@ -80,12 +87,12 @@
     private static final int MAX_INITIATE_PAN_GAP = 10;
     // TODO view config
     private static final int INITIATE_PAN_DELAY = 300;
-    
+
     private static final String SETTING_NAME_SHOWN_TOAST = "shown_zoom_ring_toast";
-    
+
     private Context mContext;
     private WindowManager mWindowManager;
-    
+
     /**
      * The view that is being zoomed by this zoom ring.
      */
@@ -111,15 +118,15 @@
     /**
      * The {@link #mTouchTargetView}'s location in window, set on touch down.
      */
-    private int[] mTouchTargetLocationInWindow = new int[2];    
+    private int[] mTouchTargetLocationInWindow = new int[2];
     /**
      * If the zoom ring is dismissed but the user is still in a touch
      * interaction, we set this to true. This will ignore all touch events until
      * up/cancel, and then set the owner's touch listener to null.
      */
     private boolean mReleaseTouchListenerOnUp;
-    
-    
+
+
     /*
      * Tap-drag is an interaction where the user first taps and then (quickly)
      * does the clockwise or counter-clockwise drag. In reality, this is: (down,
@@ -132,30 +139,40 @@
      */
     private int mTapDragStartX;
     private int mTapDragStartY;
-    
+
     private static final int TOUCH_MODE_IDLE = 0;
     private static final int TOUCH_MODE_WAITING_FOR_SECOND_TAP = 1;
     private static final int TOUCH_MODE_WAITING_FOR_TAP_DRAG_MOVEMENT = 2;
     private static final int TOUCH_MODE_FORWARDING_FOR_TAP_DRAG = 3;
     private int mTouchMode;
-    
+
     private boolean mIsZoomRingVisible;
-    
+
     private ZoomRing mZoomRing;
     private int mZoomRingWidth;
     private int mZoomRingHeight;
-    
+
     /** Invokes panning of owner view if the zoom ring is touching an edge. */
     private Panner mPanner;
     private long mTouchingEdgeStartTime;
     private boolean mPanningEnabledForThisInteraction;
-    
+
+    /**
+     * When the finger moves the zoom ring to an edge, this is the horizontal
+     * accumulator for how much the finger has moved off of its original touch
+     * point on the zoom ring (OOB = out-of-bounds). If < 0, the finger has
+     * moved that many px to the left of its original touch point on the ring.
+     */
+    private int mMovingZoomRingOobX;
+    /** Vertical accumulator, see {@link #mMovingZoomRingOobX} */
+    private int mMovingZoomRingOobY;
+
     private ImageView mPanningArrows;
     private Animation mPanningArrowsEnterAnimation;
     private Animation mPanningArrowsExitAnimation;
-    
+
     private Rect mTempRect = new Rect();
-    
+
     private OnZoomListener mCallback;
 
     private ViewConfiguration mViewConfig;
@@ -171,7 +188,7 @@
      * for the container's layout params.
      */
     private int mCenteredContainerY = Integer.MIN_VALUE;
-    
+
     /**
      * Scroller used to re-center the zoom ring if the user had dragged it to a
      * corner and then double-taps any point on the owner view (the owner view
@@ -181,7 +198,7 @@
      * The (x,y) of the scroller is the (x,y) of the container's layout params.
      */
     private Scroller mScroller;
-    
+
     /**
      * When showing the zoom ring, we add the view as a new window. However,
      * there is logic that needs to know the size of the zoom ring which is
@@ -189,7 +206,7 @@
      * the UI thread so it will be exceuted AFTER the layout. This is the logic.
      */
     private Runnable mPostedVisibleInitializer;
-    
+
     /**
      * Only touch from the main thread.
      */
@@ -199,23 +216,29 @@
 
     private IntentFilter mConfigurationChangedFilter =
             new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED);
-    
+
     private BroadcastReceiver mConfigurationChangedReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             if (!mIsZoomRingVisible) return;
-            
+
             mHandler.removeMessages(MSG_POST_CONFIGURATION_CHANGED);
             mHandler.sendEmptyMessage(MSG_POST_CONFIGURATION_CHANGED);
         }
     };
-    
+
     /** Keeps the scroller going (or starts it). */
     private static final int MSG_SCROLLER_TICK = 1;
     /** When configuration changes, this is called after the UI thread is idle. */
     private static final int MSG_POST_CONFIGURATION_CHANGED = 2;
     /** Used to delay the zoom ring dismissal. */
     private static final int MSG_DISMISS_ZOOM_RING = 3;
+
+    /**
+     * If setVisible(true) is called and the owner view's window token is null,
+     * we delay the setVisible(true) call until it is not null.
+     */
+    private static final int MSG_POST_SET_VISIBLE = 4;
     
     private Handler mHandler = new Handler() {
         @Override
@@ -224,26 +247,36 @@
                 case MSG_SCROLLER_TICK:
                     onScrollerTick();
                     break;
-                    
+
                 case MSG_POST_CONFIGURATION_CHANGED:
                     onPostConfigurationChanged();
                     break;
-                    
+
                 case MSG_DISMISS_ZOOM_RING:
                     setVisible(false);
                     break;
+                    
+                case MSG_POST_SET_VISIBLE:
+                    if (mOwnerView.getWindowToken() == null) {
+                        // Doh, it is still null, throw an exception
+                        throw new IllegalArgumentException(
+                                "Cannot make the zoom ring visible if the owner view is " +
+                                "not attached to a window.");
+                    }
+                    setVisible(true);
+                    break;
             }
-        
-        }  
+
+        }
     };
-    
+
     public ZoomRingController(Context context, View ownerView) {
         mContext = context;
         mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 
         mPanner = new Panner();
         mOwnerView = ownerView;
-        
+
         mZoomRing = new ZoomRing(context);
         mZoomRing.setId(com.android.internal.R.id.zoomControls);
         mZoomRing.setLayoutParams(new FrameLayout.LayoutParams(
@@ -251,7 +284,7 @@
                 FrameLayout.LayoutParams.WRAP_CONTENT,
                 Gravity.CENTER));
         mZoomRing.setCallback(this);
-        
+
         createPanningArrows();
 
         mContainerLayoutParams = new LayoutParams();
@@ -269,12 +302,12 @@
         mContainer = new FrameLayout(context);
         mContainer.setLayoutParams(mContainerLayoutParams);
         mContainer.setMeasureAllChildren(true);
-        
+
         mContainer.addView(mZoomRing);
         mContainer.addView(mPanningArrows);
-        
+
         mScroller = new Scroller(context, new DecelerateInterpolator());
-        
+
         mViewConfig = ViewConfiguration.get(context);
     }
 
@@ -287,7 +320,7 @@
                 FrameLayout.LayoutParams.WRAP_CONTENT,
                 Gravity.CENTER));
         mPanningArrows.setVisibility(View.INVISIBLE);
-        
+
         mPanningArrowsEnterAnimation = AnimationUtils.loadAnimation(mContext,
                 com.android.internal.R.anim.fade_in);
         mPanningArrowsExitAnimation = AnimationUtils.loadAnimation(mContext,
@@ -299,7 +332,7 @@
      * get a callback. Once there is a callback, the accumulator resets. For
      * example, if you set this to PI/6, it will give a callback every time the
      * user moves PI/6 amount on the ring.
-     * 
+     *
      * @param callbackThreshold The angle for the callback threshold, in radians
      */
     public void setZoomCallbackThreshold(float callbackThreshold) {
@@ -308,7 +341,7 @@
 
     /**
      * Sets a drawable for the zoom ring track.
-     * 
+     *
      * @param drawable The drawable to use for the track.
      * @hide Need a better way of doing this, but this one-off for browser so it
      *       can have its final look for the usability study
@@ -316,11 +349,11 @@
     public void setZoomRingTrack(int drawable) {
         mZoomRing.setBackgroundResource(drawable);
     }
-    
+
     public void setCallback(OnZoomListener callback) {
         mCallback = callback;
     }
-    
+
     public void setThumbAngle(float angle) {
         mZoomRing.setThumbAngle((int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER));
     }
@@ -328,13 +361,21 @@
     public void setThumbAngleAnimated(float angle) {
         mZoomRing.setThumbAngleAnimated((int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER), 0);
     }
-    
+
     public void setResetThumbAutomatically(boolean resetThumbAutomatically) {
         mZoomRing.setResetThumbAutomatically(resetThumbAutomatically);
     }
+
+    public void setVibration(boolean vibrate) {
+        mZoomRing.setVibration(vibrate);
+    }
+    
+    public void setThumbVisible(boolean thumbVisible) {
+        mZoomRing.setThumbVisible(thumbVisible);
+    }
     
     public void setThumbClockwiseBound(float angle) {
-        mZoomRing.setThumbClockwiseBound(angle >= 0 ? 
+        mZoomRing.setThumbClockwiseBound(angle >= 0 ?
                 (int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER) :
                 Integer.MIN_VALUE);
     }
@@ -351,14 +392,26 @@
 
     public void setVisible(boolean visible) {
 
-        if (useOldZoom(mContext)) return;
+        if (!useThisZoom(mContext)) return;
         
         if (visible) {
+            if (mOwnerView.getWindowToken() == null) {
+                /*
+                 * We need a window token to show ourselves, maybe the owner's
+                 * window hasn't been created yet but it will have been by the
+                 * time the looper is idle, so post the setVisible(true) call.
+                 */
+                if (!mHandler.hasMessages(MSG_POST_SET_VISIBLE)) {
+                    mHandler.sendEmptyMessage(MSG_POST_SET_VISIBLE);
+                }
+                return;
+            }
+            
             dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT);
         } else {
             mPanner.stop();
         }
-        
+
         if (mIsZoomRingVisible == visible) {
             return;
         }
@@ -368,40 +421,40 @@
             if (mContainerLayoutParams.token == null) {
                 mContainerLayoutParams.token = mOwnerView.getWindowToken();
             }
-            
+
             mWindowManager.addView(mContainer, mContainerLayoutParams);
-            
+
             if (mPostedVisibleInitializer == null) {
                 mPostedVisibleInitializer = new Runnable() {
                     public void run() {
                         refreshPositioningVariables();
                         resetZoomRing();
-                        
+
                         // TODO: remove this 'update' and just center zoom ring before the
                         // 'add', but need to make sure we have the width and height (which
                         // probably can only be retrieved after it's measured, which happens
                         // after it's added).
                         mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams);
-                        
+
                         if (mCallback != null) {
                             mCallback.onVisibilityChanged(true);
                         }
                     }
-                };                
+                };
             }
-            
+
             mPanningArrows.setAnimation(null);
-            
+
             mHandler.post(mPostedVisibleInitializer);
-            
+
             // Handle configuration changes when visible
             mContext.registerReceiver(mConfigurationChangedReceiver, mConfigurationChangedFilter);
-            
+
             // Steal key/touches events from the owner
             mOwnerView.setOnKeyListener(this);
             mOwnerView.setOnTouchListener(this);
             mReleaseTouchListenerOnUp = false;
-            
+
         } else {
             // Don't want to steal any more keys/touches
             mOwnerView.setOnKeyListener(null);
@@ -415,45 +468,45 @@
 
             // No longer care about configuration changes
             mContext.unregisterReceiver(mConfigurationChangedReceiver);
-            
+
             mWindowManager.removeView(mContainer);
             mHandler.removeCallbacks(mPostedVisibleInitializer);
-            
+
             if (mCallback != null) {
                 mCallback.onVisibilityChanged(false);
             }
         }
-        
+
     }
-    
+
     /**
      * TODO: docs
-     * 
+     *
      * Notes:
      * - Touch dispatching is different.  Only direct children who are clickable are eligble for touch events.
      * - Please ensure you set your View to INVISIBLE not GONE when hiding it.
-     * 
+     *
      * @return
      */
     public FrameLayout getContainer() {
         return mContainer;
     }
-    
+
     public int getZoomRingId() {
         return mZoomRing.getId();
     }
-    
+
     private void dismissZoomRingDelayed(int delay) {
         mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
         mHandler.sendEmptyMessageDelayed(MSG_DISMISS_ZOOM_RING, delay);
     }
-    
+
     private void resetZoomRing() {
         mScroller.abortAnimation();
-        
+
         mContainerLayoutParams.x = mCenteredContainerX;
         mContainerLayoutParams.y = mCenteredContainerY;
-        
+
         // Reset the thumb
         mZoomRing.resetThumbAngle();
     }
@@ -461,13 +514,15 @@
     /**
      * Should be called by the client for each event belonging to the second tap
      * (the down, move, up, and cancel events).
-     * 
+     *
      * @param event The event belonging to the second tap.
      * @return Whether the event was consumed.
      */
     public boolean handleDoubleTapEvent(MotionEvent event) {
-        int action = event.getAction();
+        if (!useThisZoom(mContext)) return false;
         
+        int action = event.getAction();
+
         // TODO: make sure this works well with the
         // ownerView.setOnTouchListener(this) instead of window receiving
         // touches
@@ -475,19 +530,19 @@
             mTouchMode = TOUCH_MODE_WAITING_FOR_TAP_DRAG_MOVEMENT;
             int x = (int) event.getX();
             int y = (int) event.getY();
-            
+
             refreshPositioningVariables();
             setVisible(true);
             centerPoint(x, y);
-            ensureZoomRingIsCentered();            
-            
+            ensureZoomRingIsCentered();
+
             // Tap drag mode stuff
             mTapDragStartX = x;
             mTapDragStartY = y;
 
         } else if (action == MotionEvent.ACTION_CANCEL) {
             mTouchMode = TOUCH_MODE_IDLE;
-            
+
         } else { // action is move or up
             switch (mTouchMode) {
                 case TOUCH_MODE_WAITING_FOR_TAP_DRAG_MOVEMENT: {
@@ -503,29 +558,29 @@
                                 setTouchTargetView(mZoomRing);
                             }
                             return true;
-                            
+
                         case MotionEvent.ACTION_UP:
                             mTouchMode = TOUCH_MODE_IDLE;
                             break;
                     }
                     break;
                 }
-                
+
                 case TOUCH_MODE_FORWARDING_FOR_TAP_DRAG: {
                     switch (action) {
                         case MotionEvent.ACTION_MOVE:
                             giveTouchToZoomRing(event);
                             return true;
-                    
+
                         case MotionEvent.ACTION_UP:
                             mTouchMode = TOUCH_MODE_IDLE;
-                            
+
                             /*
                              * This is a power-user feature that only shows the
                              * zoom while the user is performing the tap-drag.
                              * That means once it is released, the zoom ring
                              * should disappear.
-                             */  
+                             */
                             mZoomRing.setTapDragMode(false, (int) event.getX(), (int) event.getY());
                             dismissZoomRingDelayed(0);
                             break;
@@ -534,13 +589,13 @@
                 }
             }
         }
-        
+
         return true;
     }
-    
+
     private void ensureZoomRingIsCentered() {
         LayoutParams lp = mContainerLayoutParams;
-        
+
         if (lp.x != mCenteredContainerX || lp.y != mCenteredContainerY) {
             int width = mContainer.getWidth();
             int height = mContainer.getHeight();
@@ -549,21 +604,21 @@
             mHandler.sendEmptyMessage(MSG_SCROLLER_TICK);
         }
     }
-    
+
     private void refreshPositioningVariables() {
         mZoomRingWidth = mZoomRing.getWidth();
         mZoomRingHeight = mZoomRing.getHeight();
-        
+
         // Calculate the owner view's bounds
         mOwnerView.getGlobalVisibleRect(mOwnerViewBounds);
-        
+
         // Get the center
         Gravity.apply(Gravity.CENTER, mContainer.getWidth(), mContainer.getHeight(),
                 mOwnerViewBounds, mTempRect);
         mCenteredContainerX = mTempRect.left;
         mCenteredContainerY = mTempRect.top;
     }
-    
+
     /**
      * Centers the point (in owner view's coordinates).
      */
@@ -572,7 +627,7 @@
             mCallback.onCenter(x, y);
         }
     }
-    
+
     private void giveTouchToZoomRing(MotionEvent event) {
         int rawX = (int) event.getRawX();
         int rawY = (int) event.getRawY();
@@ -580,11 +635,11 @@
         int y = rawY - mContainerLayoutParams.y - mZoomRing.getTop();
         mZoomRing.handleTouch(event.getAction(), event.getEventTime(), x, y, rawX, rawY);
     }
-    
+
     public void onZoomRingSetMovableHintVisible(boolean visible) {
-        setPanningArrowsVisible(visible); 
+        setPanningArrowsVisible(visible);
     }
-    
+
     public void onUserInteractionStarted() {
         mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
     }
@@ -596,24 +651,62 @@
     public void onZoomRingMovingStarted() {
         mScroller.abortAnimation();
         mTouchingEdgeStartTime = 0;
+        mMovingZoomRingOobX = 0;
+        mMovingZoomRingOobY = 0;
         if (mCallback != null) {
             mCallback.onBeginPan();
         }
     }
-    
+
     private void setPanningArrowsVisible(boolean visible) {
         mPanningArrows.startAnimation(visible ? mPanningArrowsEnterAnimation
                 : mPanningArrowsExitAnimation);
         mPanningArrows.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
     }
-    
-    public boolean onZoomRingMoved(int deltaX, int deltaY) {
+
+    public boolean onZoomRingMoved(int deltaX, int deltaY, int rawX, int rawY) {
+
+        if (mMovingZoomRingOobX != 0) {
+            /*
+             * The finger has moved off the point where it originally touched
+             * the zidget.
+             */
+            boolean wasOobLeft = mMovingZoomRingOobX < 0;
+            mMovingZoomRingOobX += deltaX;
+            if ((wasOobLeft && mMovingZoomRingOobX > 0) ||
+                    (!wasOobLeft && mMovingZoomRingOobX < 0)) {
+                /*
+                 * Woot, the finger is back on the original point. Infact, it
+                 * went PAST its original point, so take the amount it passed
+                 * and use that as the delta to move the zoom ring.
+                 */ 
+                deltaX = mMovingZoomRingOobX;
+                // No longer out-of-bounds, reset
+                mMovingZoomRingOobX = 0;
+            } else {
+                // The finger is still not back, eat this movement
+                deltaX = 0;
+            }
+        }
+        
+        if (mMovingZoomRingOobY != 0) {
+            // See above for comments
+            boolean wasOobUp = mMovingZoomRingOobY < 0;
+            mMovingZoomRingOobY += deltaY;
+            if ((wasOobUp && mMovingZoomRingOobY > 0) || (!wasOobUp && mMovingZoomRingOobY < 0)) {
+                deltaY = mMovingZoomRingOobY;
+                mMovingZoomRingOobY = 0;
+            } else {
+                deltaY = 0;
+            }
+        }
+        
         WindowManager.LayoutParams lp = mContainerLayoutParams;
         Rect ownerBounds = mOwnerViewBounds;
-        
+
         int zoomRingLeft = mZoomRing.getLeft();
         int zoomRingTop = mZoomRing.getTop();
-        
+
         int newX = lp.x + deltaX;
         int newZoomRingX = newX + zoomRingLeft;
         newZoomRingX = (newZoomRingX <= ownerBounds.left) ? ownerBounds.left :
@@ -627,19 +720,26 @@
             (newZoomRingY + mZoomRingHeight > ownerBounds.bottom) ?
                     ownerBounds.bottom - mZoomRingHeight : newZoomRingY;
         lp.y = newZoomRingY - zoomRingTop;
-        
+
         mWindowManager.updateViewLayout(mContainer, lp);
-        
+
         // Check for pan
         boolean horizontalPanning = true;
         int leftGap = newZoomRingX - ownerBounds.left;
         if (leftGap < MAX_PAN_GAP) {
+            if (leftGap == 0 && deltaX != 0 && mMovingZoomRingOobX == 0) {
+                // Future moves in this direction should be accumulated in mMovingZoomRingOobX
+                mMovingZoomRingOobX = deltaX / Math.abs(deltaX);
+            }
             if (shouldPan(leftGap)) {
                 mPanner.setHorizontalStrength(-getStrengthFromGap(leftGap));
             }
         } else {
             int rightGap = ownerBounds.right - (lp.x + mZoomRingWidth + zoomRingLeft);
             if (rightGap < MAX_PAN_GAP) {
+                if (rightGap == 0 && deltaX != 0 && mMovingZoomRingOobX == 0) {
+                    mMovingZoomRingOobX = deltaX / Math.abs(deltaX);
+                }
                 if (shouldPan(rightGap)) {
                     mPanner.setHorizontalStrength(getStrengthFromGap(rightGap));
                 }
@@ -648,15 +748,21 @@
                 horizontalPanning = false;
             }
         }
-        
+
         int topGap = newZoomRingY - ownerBounds.top;
         if (topGap < MAX_PAN_GAP) {
+            if (topGap == 0 && deltaY != 0 && mMovingZoomRingOobY == 0) {
+                mMovingZoomRingOobY = deltaY / Math.abs(deltaY);
+            }
             if (shouldPan(topGap)) {
                 mPanner.setVerticalStrength(-getStrengthFromGap(topGap));
             }
         } else {
             int bottomGap = ownerBounds.bottom - (lp.y + mZoomRingHeight + zoomRingTop);
             if (bottomGap < MAX_PAN_GAP) {
+                if (bottomGap == 0 && deltaY != 0 && mMovingZoomRingOobY == 0) {
+                    mMovingZoomRingOobY = deltaY / Math.abs(deltaY);
+                }
                 if (shouldPan(bottomGap)) {
                     mPanner.setVerticalStrength(getStrengthFromGap(bottomGap));
                 }
@@ -670,13 +776,13 @@
                 }
             }
         }
-        
+
         return true;
     }
-    
+
     private boolean shouldPan(int gap) {
         if (mPanningEnabledForThisInteraction) return true;
-        
+
         if (gap < MAX_INITIATE_PAN_GAP) {
             long time = SystemClock.elapsedRealtime();
             if (mTouchingEdgeStartTime != 0 &&
@@ -693,7 +799,7 @@
         }
         return false;
     }
-    
+
     public void onZoomRingMovingStopped() {
         mPanner.stop();
         setPanningArrowsVisible(false);
@@ -701,18 +807,18 @@
             mCallback.onEndPan();
         }
     }
-    
+
     private int getStrengthFromGap(int gap) {
         return gap > MAX_PAN_GAP ? 0 :
             (MAX_PAN_GAP - gap) * 100 / MAX_PAN_GAP;
     }
-    
+
     public void onZoomRingThumbDraggingStarted() {
         if (mCallback != null) {
             mCallback.onBeginDrag();
         }
     }
-    
+
     public boolean onZoomRingThumbDragged(int numLevels, int startAngle, int curAngle) {
         if (mCallback != null) {
             int deltaZoomLevel = -numLevels;
@@ -720,17 +826,17 @@
                     mZoomRingWidth / 2;
             int globalZoomCenterY = mContainerLayoutParams.y + mZoomRing.getTop() +
                     mZoomRingHeight / 2;
-            
+
             return mCallback.onDragZoom(deltaZoomLevel,
                     globalZoomCenterX - mOwnerViewBounds.left,
                     globalZoomCenterY - mOwnerViewBounds.top,
                     (float) startAngle / ZoomRing.RADIAN_INT_MULTIPLIER,
                     (float) curAngle / ZoomRing.RADIAN_INT_MULTIPLIER);
         }
-        
+
         return false;
     }
-    
+
     public void onZoomRingThumbDraggingStopped() {
         if (mCallback != null) {
             mCallback.onEndDrag();
@@ -740,35 +846,35 @@
     public void onZoomRingDismissed(boolean dismissImmediately) {
         if (dismissImmediately) {
             mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
-            setVisible(false);           
+            setVisible(false);
         } else {
             dismissZoomRingDelayed(ZOOM_RING_DISMISS_DELAY);
         }
     }
-    
+
     public void onRingDown(int tickAngle, int touchAngle) {
     }
-    
+
     public boolean onTouch(View v, MotionEvent event) {
         if (sTutorialDialog != null && sTutorialDialog.isShowing() &&
                 SystemClock.elapsedRealtime() - sTutorialShowTime >= TUTORIAL_MIN_DISPLAY_TIME) {
             finishZoomTutorial();
         }
-        
+
         int action = event.getAction();
 
         if (mReleaseTouchListenerOnUp) {
-            // The ring was dismissed but we need to throw away all events until the up 
+            // The ring was dismissed but we need to throw away all events until the up
             if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
                 mOwnerView.setOnTouchListener(null);
                 setTouchTargetView(null);
                 mReleaseTouchListenerOnUp = false;
             }
-            
+
             // Eat this event
             return true;
         }
-        
+
         View targetView = mTouchTargetView;
 
         switch (action) {
@@ -776,7 +882,7 @@
                 targetView = getViewForTouch((int) event.getRawX(), (int) event.getRawY());
                 setTouchTargetView(targetView);
                 break;
-                
+
             case MotionEvent.ACTION_UP:
             case MotionEvent.ACTION_CANCEL:
                 setTouchTargetView(null);
@@ -787,7 +893,7 @@
             // The upperleft corner of the target view in raw coordinates
             int targetViewRawX = mContainerLayoutParams.x + mTouchTargetLocationInWindow[0];
             int targetViewRawY = mContainerLayoutParams.y + mTouchTargetLocationInWindow[1];
-            
+
             MotionEvent containerEvent = MotionEvent.obtain(event);
             // Convert the motion event into the target view's coordinates (from
             // owner view's coordinates)
@@ -796,32 +902,32 @@
             boolean retValue = targetView.dispatchTouchEvent(containerEvent);
             containerEvent.recycle();
             return retValue;
-            
+
         } else {
             if (action == MotionEvent.ACTION_DOWN) {
                 dismissZoomRingDelayed(ZOOM_RING_DISMISS_DELAY);
             }
-            
+
             return false;
         }
     }
-    
+
     private void setTouchTargetView(View view) {
         mTouchTargetView = view;
         if (view != null) {
             view.getLocationInWindow(mTouchTargetLocationInWindow);
         }
     }
-    
+
     /**
      * Returns the View that should receive a touch at the given coordinates.
-     * 
+     *
      * @param rawX The raw X.
      * @param rawY The raw Y.
      * @return The view that should receive the touches, or null if there is not one.
      */
     private View getViewForTouch(int rawX, int rawY) {
-        // Check to see if it is touching the ring 
+        // Check to see if it is touching the ring
         int containerCenterX = mContainerLayoutParams.x + mContainer.getWidth() / 2;
         int containerCenterY = mContainerLayoutParams.y + mContainer.getHeight() / 2;
         int distanceFromCenterX = rawX - containerCenterX;
@@ -832,7 +938,7 @@
                 zoomRingRadius * zoomRingRadius) {
             return mZoomRing;
         }
-        
+
         // Check to see if it is touching any other clickable View.
         // Reverse order so the child drawn on top gets first dibs.
         int containerCoordsX = rawX - mContainerLayoutParams.x;
@@ -844,13 +950,13 @@
                     !child.isClickable()) {
                 continue;
             }
-            
+
             child.getHitRect(frame);
             if (frame.contains(containerCoordsX, containerCoordsY)) {
                 return child;
             }
         }
-        
+
         return null;
     }
 
@@ -861,34 +967,34 @@
             case KeyEvent.KEYCODE_DPAD_RIGHT:
                 // Eat these
                 return true;
-                
+
             case KeyEvent.KEYCODE_DPAD_UP:
             case KeyEvent.KEYCODE_DPAD_DOWN:
                 // Keep the zoom alive a little longer
                 dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT);
                 // They started zooming, hide the thumb arrows
                 mZoomRing.setThumbArrowsVisible(false);
-                
+
                 if (mCallback != null && event.getAction() == KeyEvent.ACTION_DOWN) {
                     mCallback.onSimpleZoom(keyCode == KeyEvent.KEYCODE_DPAD_UP);
                 }
-                
+
                 return true;
         }
-        
+
         return false;
     }
 
     private void onScrollerTick() {
         if (!mScroller.computeScrollOffset() || !mIsZoomRingVisible) return;
-        
+
         mContainerLayoutParams.x = mScroller.getCurrX();
         mContainerLayoutParams.y = mScroller.getCurrY();
         mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams);
 
         mHandler.sendEmptyMessage(MSG_SCROLLER_TICK);
     }
-    
+
     private void onPostConfigurationChanged() {
         dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT);
         refreshPositioningVariables();
@@ -908,7 +1014,7 @@
      * before. Furthermore, if the application does not have privilege to write
      * to the system settings, it will store this bit locally in a shared
      * preference.
-     * 
+     *
      * @hide This should only be used by our main apps--browser, maps, and
      *       gallery
      */
@@ -917,53 +1023,65 @@
         if (Settings.System.getInt(cr, SETTING_NAME_SHOWN_TOAST, 0) == 1) {
             return;
         }
-        
+
         SharedPreferences sp = context.getSharedPreferences("_zoom", Context.MODE_PRIVATE);
         if (sp.getInt(SETTING_NAME_SHOWN_TOAST, 0) == 1) {
             return;
         }
-        
+
         if (sTutorialDialog != null && sTutorialDialog.isShowing()) {
             sTutorialDialog.dismiss();
         }
+
+        LayoutInflater layoutInflater =
+                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        TextView textView = (TextView) layoutInflater.inflate(
+                com.android.internal.R.layout.alert_dialog_simple_text, null)
+                .findViewById(android.R.id.text1);
+        textView.setText(com.android.internal.R.string.tutorial_double_tap_to_zoom_message_short);
         
         sTutorialDialog = new AlertDialog.Builder(context)
-                .setMessage(
-                        com.android.internal.R.string.tutorial_double_tap_to_zoom_message_short)
+                .setView(textView)
                 .setIcon(0)
                 .create();
-        
+
         Window window = sTutorialDialog.getWindow();
         window.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND | 
+        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND |
                 WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
         window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                 WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
-        
+
         sTutorialDialog.show();
         sTutorialShowTime = SystemClock.elapsedRealtime();
     }
-    
-    public void finishZoomTutorial() {
+
+    public static void finishZoomTutorial(Context context, boolean userNotified) {
         if (sTutorialDialog == null) return;
-        
+
         sTutorialDialog.dismiss();
         sTutorialDialog = null;
-        
+
         // Record that they have seen the tutorial
-        try {
-            Settings.System.putInt(mContext.getContentResolver(), SETTING_NAME_SHOWN_TOAST, 1);
-        } catch (SecurityException e) {
-            /*
-             * The app does not have permission to clear this global flag, make
-             * sure the user does not see the message when he comes back to this
-             * same app at least.
-             */
-            SharedPreferences sp = mContext.getSharedPreferences("_zoom", Context.MODE_PRIVATE);
-            sp.edit().putInt(SETTING_NAME_SHOWN_TOAST, 1).commit();
+        if (userNotified) {
+            try {
+                Settings.System.putInt(context.getContentResolver(), SETTING_NAME_SHOWN_TOAST, 1);
+            } catch (SecurityException e) {
+                /*
+                 * The app does not have permission to clear this global flag, make
+                 * sure the user does not see the message when he comes back to this
+                 * same app at least.
+                 */
+                SharedPreferences sp = context.getSharedPreferences("_zoom", Context.MODE_PRIVATE);
+                sp.edit().putInt(SETTING_NAME_SHOWN_TOAST, 1).commit();
+            }
         }
     }
-    
+
+    public void finishZoomTutorial() {
+        finishZoomTutorial(mContext, true);
+    }
+
     public void setPannerStartVelocity(float startVelocity) {
         mPanner.mStartVelocity = startVelocity;
     }
@@ -983,27 +1101,27 @@
     private class Panner implements Runnable {
         private static final int RUN_DELAY = 15;
         private static final float STOP_SLOWDOWN = 0.8f;
-        
+
         private final Handler mUiHandler = new Handler();
-        
+
         private int mVerticalStrength;
         private int mHorizontalStrength;
 
         private boolean mStopping;
-        
+
         /** The time this current pan started. */
         private long mStartTime;
-        
+
         /** The time of the last callback to pan the map/browser/etc. */
         private long mPreviousCallbackTime;
-        
+
         // TODO Adjust to be DPI safe
         private float mStartVelocity = 135;
         private float mAcceleration = 160;
         private float mMaxVelocity = 1000;
         private int mStartAcceleratingDuration = 700;
         private float mVelocity;
-        
+
         /** -100 (full left) to 0 (none) to 100 (full right) */
         public void setHorizontalStrength(int horizontalStrength) {
             if (mHorizontalStrength == 0 && mVerticalStrength == 0 && horizontalStrength != 0) {
@@ -1011,7 +1129,7 @@
             } else if (mVerticalStrength == 0 && horizontalStrength == 0) {
                 stop();
             }
-            
+
             mHorizontalStrength = horizontalStrength;
             mStopping = false;
         }
@@ -1023,11 +1141,11 @@
             } else if (mHorizontalStrength == 0 && verticalStrength == 0) {
                 stop();
             }
-            
-            mVerticalStrength = verticalStrength;            
+
+            mVerticalStrength = verticalStrength;
             mStopping = false;
         }
-        
+
         private void start() {
             mUiHandler.post(this);
             mPreviousCallbackTime = 0;
@@ -1037,37 +1155,37 @@
         public void stop() {
             mStopping = true;
         }
-        
+
         public void run() {
             if (mStopping) {
                 mHorizontalStrength *= STOP_SLOWDOWN;
                 mVerticalStrength *= STOP_SLOWDOWN;
             }
-            
+
             if (mHorizontalStrength == 0 && mVerticalStrength == 0) {
                 return;
             }
-            
+
             boolean firstRun = mPreviousCallbackTime == 0;
             long curTime = SystemClock.elapsedRealtime();
             int panAmount = getPanAmount(mPreviousCallbackTime, curTime);
             mPreviousCallbackTime = curTime;
-            
+
             if (firstRun) {
                 mStartTime = curTime;
                 mVelocity = mStartVelocity;
             } else {
                 int panX = panAmount * mHorizontalStrength / 100;
                 int panY = panAmount * mVerticalStrength / 100;
-                
+
                 if (mCallback != null) {
                     mCallback.onPan(panX, panY);
                 }
             }
-            
+
             mUiHandler.postDelayed(this, RUN_DELAY);
         }
-        
+
         private int getPanAmount(long previousTime, long currentTime) {
             if (mVelocity > mMaxVelocity) {
                 mVelocity = mMaxVelocity;
@@ -1077,14 +1195,12 @@
                     mVelocity += (currentTime - previousTime) * mAcceleration / 1000;
                 }
             }
-    
+
             return (int) ((currentTime - previousTime) * mVelocity) / 1000;
         }
 
     }
 
-    
-    
     public interface OnZoomListener {
         void onBeginDrag();
         boolean onDragZoom(int deltaZoomLevel, int centerX, int centerY, float startAngle,
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index b502a6c..edda1d9 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -28,6 +28,8 @@
     void noteStopGps(int uid);
     void noteScreenOn();
     void noteScreenOff();
+    void notePhoneOn();
+    void notePhoneOff();
     void setOnBattery(boolean onBattery);
     long getAwakeTimeBattery();
     long getAwakeTimePlugged();
diff --git a/core/java/com/android/internal/app/UsbStorageStopActivity.java b/core/java/com/android/internal/app/UsbStorageStopActivity.java
index 30523c4..557a523 100644
--- a/core/java/com/android/internal/app/UsbStorageStopActivity.java
+++ b/core/java/com/android/internal/app/UsbStorageStopActivity.java
@@ -54,7 +54,7 @@
 
         // Set up the "dialog"
         final AlertController.AlertParams p = mAlertParams;
-        p.mIconId = com.android.internal.R.drawable.stat_sys_warning;
+        p.mIconId = com.android.internal.R.drawable.ic_dialog_alert;
         p.mTitle = getString(com.android.internal.R.string.usb_storage_stop_title);
         p.mMessage = getString(com.android.internal.R.string.usb_storage_stop_message);
         p.mPositiveButtonText = getString(com.android.internal.R.string.usb_storage_stop_button_mount);
diff --git a/core/java/com/android/internal/gadget/IGadgetService.aidl b/core/java/com/android/internal/gadget/IGadgetService.aidl
index a22f3f3..9c66b95 100644
--- a/core/java/com/android/internal/gadget/IGadgetService.aidl
+++ b/core/java/com/android/internal/gadget/IGadgetService.aidl
@@ -44,6 +44,7 @@
     List<GadgetProviderInfo> getInstalledProviders();
     GadgetProviderInfo getGadgetInfo(int gadgetId);
     void bindGadgetId(int gadgetId, in ComponentName provider);
+    int[] getGadgetIds(in ComponentName provider);
 
 }
 
diff --git a/core/java/com/android/internal/logging/AndroidConfig.java b/core/java/com/android/internal/logging/AndroidConfig.java
index d8be889..f8002c6 100644
--- a/core/java/com/android/internal/logging/AndroidConfig.java
+++ b/core/java/com/android/internal/logging/AndroidConfig.java
@@ -34,11 +34,14 @@
         super();
         
         try {
-            Logger.global.addHandler(new AndroidHandler());
-            Logger.global.setLevel(Level.ALL);
+            Logger rootLogger = Logger.getLogger("");
+            rootLogger.addHandler(new AndroidHandler());
+            rootLogger.setLevel(Level.INFO);
+
+            // Turn down logging in Apache libraries.
+            Logger.getLogger("org.apache").setLevel(Level.WARNING);
         } catch (Exception ex) {
             ex.printStackTrace();
         }
-    }
-    
+    }    
 }
diff --git a/core/java/com/android/internal/logging/AndroidHandler.java b/core/java/com/android/internal/logging/AndroidHandler.java
index a6a4c64..d9fcf60 100644
--- a/core/java/com/android/internal/logging/AndroidHandler.java
+++ b/core/java/com/android/internal/logging/AndroidHandler.java
@@ -18,14 +18,14 @@
 
 import android.util.Log;
 
-import java.util.logging.Formatter;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import java.util.logging.SimpleFormatter;
+import java.util.logging.*;
+import java.util.Date;
+import java.text.MessageFormat;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 
 /**
- * Implements a {@link java.util.Logger} handler that writes to the Android log. The
+ * Implements a {@link java.util.logging.Logger} handler that writes to the Android log. The
  * implementation is rather straightforward. The name of the logger serves as
  * the log tag. Only the log levels need to be converted appropriately. For
  * this purpose, the following mapping is being used:
@@ -81,8 +81,24 @@
     /**
      * Holds the formatter for all Android log handlers.
      */
-    private static final Formatter THE_FORMATTER = new SimpleFormatter();
-    
+    private static final Formatter THE_FORMATTER = new Formatter() {
+        @Override
+        public String format(LogRecord r) {
+            Throwable thrown = r.getThrown();
+            if (thrown != null) {
+                StringWriter sw = new StringWriter();
+                PrintWriter pw = new PrintWriter(sw);
+                sw.write(r.getMessage());
+                sw.write("\n");
+                thrown.printStackTrace(pw);
+                pw.flush();
+                return sw.toString();
+            } else {
+                return r.getMessage();
+            }
+        }
+    };
+
     /**
      * Constructs a new instance of the Android log handler.
      */
@@ -106,27 +122,40 @@
             int level = getAndroidLevel(record.getLevel());
             String tag = record.getLoggerName();
 
+            if (tag == null) {
+                // Anonymous logger.
+                tag = "null";    
+            } else {
+                // Tags must be <= 23 characters.
+                int length = tag.length();
+                if (length > 23) {
+                    // Most loggers use the full class name. Try dropping the
+                    // package.
+                    int lastPeriod = tag.lastIndexOf(".");
+                    if (length - lastPeriod - 1 <= 23) {
+                        tag = tag.substring(lastPeriod + 1);
+                    } else {
+                        // Use last 23 chars.
+                        tag = tag.substring(tag.length() - 23);
+                    }
+                }
+            }
+
             if (!Log.isLoggable(tag, level)) {
                 return;
             }
-        
-            String msg;
-            try {
-                msg = getFormatter().format(record);
-            } catch (RuntimeException e) {
-                Log.e("AndroidHandler", "Error formatting log record", e);
-                msg = record.getMessage();
-            }
-            Log.println(level, tag, msg);
+
+            String message = getFormatter().format(record);
+            Log.println(level, tag, message);
         } catch (RuntimeException e) {
-            Log.e("AndroidHandler", "Error publishing log record", e);
+            Log.e("AndroidHandler", "Error logging message.", e);
         }
     }
     
     /**
-     * Converts a {@link java.util.Logger} logging level into an Android one.
+     * Converts a {@link java.util.logging.Logger} logging level into an Android one.
      * 
-     * @param level The {@link java.util.Logger} logging level.
+     * @param level The {@link java.util.logging.Logger} logging level.
      * 
      * @return The resulting Android logging level. 
      */
diff --git a/core/java/com/android/internal/net/DbSSLSessionCache.java b/core/java/com/android/internal/net/DbSSLSessionCache.java
new file mode 100644
index 0000000..06e4ca8
--- /dev/null
+++ b/core/java/com/android/internal/net/DbSSLSessionCache.java
@@ -0,0 +1,269 @@
+// Copyright 2009 The Android Open Source Project
+
+package com.android.internal.net;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.net.ssl.SSLSession;
+
+/**
+ * Hook into harmony SSL cache to persist the SSL sessions.
+ * 
+ * Current implementation is suitable for saving a small number of hosts -
+ * like google services. It can be extended with expiration and more features
+ * to support more hosts.  
+ * 
+ * {@hide}
+ */
+public class DbSSLSessionCache implements SSLClientSessionCache {
+    private static final String TAG = "DbSSLSessionCache";
+
+    /** 
+     * Table where sessions are stored. 
+     */
+    public static final String SSL_CACHE_TABLE = "ssl_sessions";
+
+    private static final String SSL_CACHE_ID = "_id";
+    
+    /**
+     * Key is host:port - port is not optional.
+     */
+    private static final String SSL_CACHE_HOSTPORT = "hostport";
+    
+    /**
+     * Base64-encoded DER value of the session.
+     */
+    private static final String SSL_CACHE_SESSION = "session";
+    
+    /**
+     * Time when the record was added - should be close to the time 
+     * of the initial session negotiation.
+     */
+    private static final String SSL_CACHE_TIME_SEC = "time_sec";
+
+    public static final String DATABASE_NAME = "ssl_sessions.db";
+
+    public static final int DATABASE_VERSION = 2;
+    
+    /** public for testing 
+     */
+    public static final int SSL_CACHE_ID_COL = 0;
+    public static final int SSL_CACHE_HOSTPORT_COL = 1;
+    public static final int SSL_CACHE_SESSION_COL = 2;
+    public static final int SSL_CACHE_TIME_SEC_COL = 3;
+    
+    public static final int MAX_CACHE_SIZE = 256;
+    
+    private final Map<String, byte[]> mExternalCache =
+        new HashMap<String, byte[]>();
+        
+        
+    private DatabaseHelper mDatabaseHelper;
+
+    private boolean mNeedsCacheLoad = true;
+    
+    public static final String[] PROJECTION = new String[] {
+      SSL_CACHE_ID, 
+      SSL_CACHE_HOSTPORT,
+      SSL_CACHE_SESSION,
+      SSL_CACHE_TIME_SEC
+    };
+    
+    /**
+     * Create a SslSessionCache instance, using the specified context to 
+     * initialize the database.
+     * 
+     * This constructor will use the default database - created for the application
+     * context.
+     * 
+     * @param activityContext
+     */
+    public DbSSLSessionCache(Context activityContext) {
+        Context appContext = activityContext.getApplicationContext();
+        mDatabaseHelper = new DatabaseHelper(appContext);
+    }
+    
+    /**
+     * Create a SslSessionCache that uses a specific database.
+     * 
+     * 
+     * @param database
+     */
+    public DbSSLSessionCache(DatabaseHelper database) {
+        this.mDatabaseHelper = database;
+    }
+    
+    public void putSessionData(SSLSession session, byte[] der) {
+        if (mDatabaseHelper == null) {
+            return;
+        }
+        synchronized (this.getClass()) {
+            SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
+            if (mExternalCache.size() == MAX_CACHE_SIZE) {
+                // remove oldest.
+                // TODO: check if the new one is in cached already ( i.e. update ).
+                Cursor byTime = mDatabaseHelper.getReadableDatabase().query(SSL_CACHE_TABLE, 
+                        PROJECTION, null, null, null, null, SSL_CACHE_TIME_SEC);
+                if (byTime.moveToFirst()) {
+                    // TODO: can I do byTime.deleteRow() ? 
+                    String hostPort = byTime.getString(SSL_CACHE_HOSTPORT_COL);
+                    db.delete(SSL_CACHE_TABLE, 
+                            SSL_CACHE_HOSTPORT + "= ?" , new String[] { hostPort });
+                    mExternalCache.remove(hostPort);
+                } else {
+                    Log.w(TAG, "No rows found");
+                    // something is wrong, clear it
+                    clear();
+                }
+            }
+            // Serialize native session to standard DER encoding    
+            long t0 = System.currentTimeMillis();
+
+            String b64 = new String(Base64.encodeBase64(der));
+            String key = session.getPeerHost() + ":" + session.getPeerPort();
+
+            ContentValues values = new ContentValues();
+            values.put(SSL_CACHE_HOSTPORT, key);
+            values.put(SSL_CACHE_SESSION, b64);
+            values.put(SSL_CACHE_TIME_SEC, System.currentTimeMillis() / 1000);
+
+            mExternalCache.put(key, der);
+
+            try {
+                db.insert(SSL_CACHE_TABLE, null /*nullColumnHack */ , values);
+            } catch(SQLException ex) {
+                // Ignore - nothing we can do to recover, and caller shouldn't 
+                // be affected.
+                Log.w(TAG, "Ignoring SQL exception when caching session", ex);
+            }
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                long t1 = System.currentTimeMillis();
+                Log.d(TAG, "New SSL session " + session.getPeerHost() +
+                        " DER len: " + der.length + " " + (t1 - t0));
+            }
+        }
+
+    }
+
+    public byte[] getSessionData(String host, int port) {
+        // Current (simple) implementation does a single lookup to DB, then saves 
+        // all entries to the cache. 
+
+        // This works for google services - i.e. small number of certs.
+        // If we extend this to all processes - we should hold a separate cache 
+        // or do lookups to DB each time. 
+        if (mDatabaseHelper == null) {
+            return null;
+        }
+        synchronized(this.getClass()) {
+            if (mNeedsCacheLoad) {
+                // Don't try to load again, if something is wrong on the first 
+                // request it'll likely be wrong each time.
+                mNeedsCacheLoad = false;
+                long t0 = System.currentTimeMillis();
+
+                Cursor cur = null;
+                try {
+                    cur = mDatabaseHelper.getReadableDatabase().query(SSL_CACHE_TABLE, 
+                            PROJECTION, null, null, null, null, null);
+                    if (cur.moveToFirst()) {
+                        do {
+                            String hostPort = cur.getString(SSL_CACHE_HOSTPORT_COL);
+                            String value = cur.getString(SSL_CACHE_SESSION_COL);
+
+                            if (hostPort == null || value == null) {
+                                continue;
+                            }
+                            // TODO: blob support ?
+                            byte[] der = Base64.decodeBase64(value.getBytes());
+                            mExternalCache.put(hostPort, der);
+                        } while (cur.moveToNext());
+
+                    }
+                } catch (SQLException ex) {
+                    Log.d(TAG, "Error loading SSL cached entries ", ex);
+                } finally {
+                    if (cur != null) {
+                        cur.close();
+                    }
+                    if (Log.isLoggable(TAG, Log.DEBUG)) {
+                        long t1 = System.currentTimeMillis();
+                        Log.d(TAG, "LOADED CACHED SSL " + (t1 - t0) + " ms");
+                    }
+                }
+            }
+
+            String key = host + ":" + port;
+
+            return mExternalCache.get(key);
+        }
+    }
+
+    /** 
+     * Reset the database and internal state. 
+     * Used for testing or to free space.
+     */
+    public void clear() {
+        synchronized(this) {
+            try {
+                mExternalCache.clear();
+                mNeedsCacheLoad = true;
+                mDatabaseHelper.getWritableDatabase().delete(SSL_CACHE_TABLE, 
+                        null, null);
+            } catch (SQLException ex) {
+                Log.d(TAG, "Error removing SSL cached entries ", ex);
+                // ignore - nothing we can do about it
+            }
+        } 
+    }
+
+    public byte[] getSessionData(byte[] id) {
+        // We support client side only - the cache will do nothing for 
+        // server-side sessions. 
+        return null;
+    }
+
+    /** Visible for testing. 
+     */
+    public static class DatabaseHelper extends SQLiteOpenHelper {
+
+        public DatabaseHelper(Context context) {
+            super(context, DATABASE_NAME, null /* factory */, DATABASE_VERSION);
+        }   
+
+        @Override
+        public void onCreate(SQLiteDatabase db) {
+            db.execSQL("CREATE TABLE " + SSL_CACHE_TABLE + " (" +
+                    SSL_CACHE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
+                    SSL_CACHE_HOSTPORT + " TEXT UNIQUE ON CONFLICT REPLACE," +
+                    SSL_CACHE_SESSION + " TEXT," +
+                    SSL_CACHE_TIME_SEC + " INTEGER" +
+            ");");
+            
+            // No index - we load on startup, index would slow down inserts.
+            // If we want to scale this to lots of rows - we could use 
+            // index, but then we'll hit DB a bit too often ( including 
+            // negative hits )
+        }
+
+        @Override
+        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+            db.execSQL("DROP TABLE IF EXISTS " + SSL_CACHE_TABLE );
+            onCreate(db);
+        }
+
+    }
+    
+}
diff --git a/core/java/com/android/internal/net/SSLSessionCache.java b/core/java/com/android/internal/net/SSLSessionCache.java
new file mode 100644
index 0000000..ec02fe5
--- /dev/null
+++ b/core/java/com/android/internal/net/SSLSessionCache.java
@@ -0,0 +1,101 @@
+// Copyright 2009 The Android Open Source Project
+package com.android.internal.net;
+
+import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
+import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
+
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.util.Log;
+
+/**
+ * Utility class to configure SSL session caching. 
+ * 
+ * 
+ * 
+ * {@hide}
+ */
+public class SSLSessionCache {
+    private static final String TAG = "SSLSessionCache";
+
+    private static final String CACHE_TYPE_DB = "db";
+    
+    private static boolean sInitializationDone = false;
+    
+    // One per process
+    private static DbSSLSessionCache sDbCache;
+    
+    /**
+     * Check settings for ssl session caching. 
+     * 
+     * @return false if disabled.
+     */
+    public static boolean isEnabled(ContentResolver resolver) {
+        String sslCache = Settings.Gservices.getString(resolver,
+                Settings.Gservices.SSL_SESSION_CACHE);
+        
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "enabled " + sslCache);
+        }
+
+        return CACHE_TYPE_DB.equals(sslCache);
+    }
+
+    /**
+     * Return the configured session cache, or null if not enabled.
+     */
+    public static SSLClientSessionCache getSessionCache(Context context) {
+        if (context == null) {
+            return null;
+        }
+        if (!sInitializationDone) {
+            if (isEnabled(context.getContentResolver())) {
+                sDbCache = new DbSSLSessionCache(context);
+                return sDbCache;
+            }
+            // Don't check again.
+            sInitializationDone = true;
+        }
+        return sDbCache;
+    }
+    
+    /**
+     * Construct the factory, using default constructor if caching is disabled.
+     * Refactored here to avoid duplication, used in tests.
+     */
+    public static SSLSocketFactory getSocketFactory(Context androidContext,
+             TrustManager[] trustManager) {
+        try {
+            if (androidContext != null) {
+                SSLClientSessionCache sessionCache = getSessionCache(androidContext);
+                
+                if (sessionCache != null) {
+                    SSLContextImpl sslContext = new SSLContextImpl();
+                    sslContext.engineInit(null /* kms */, 
+                            trustManager, new java.security.SecureRandom(), 
+                            sessionCache, null /* serverCache */);
+                    return sslContext.engineGetSocketFactory(); 
+                }
+            }
+            // default
+            SSLContext context = SSLContext.getInstance("TLS");
+            context.init(null, trustManager, new java.security.SecureRandom());
+            return context.getSocketFactory();
+            
+        } catch (NoSuchAlgorithmException e) {
+            throw new AssertionError(e);
+        } catch (KeyManagementException e) {
+            throw new AssertionError(e);
+        }
+    }
+    
+
+}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 558a122..7eea8b7 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -23,6 +23,7 @@
 import android.os.Parcelable;
 import android.os.SystemClock;
 import android.util.Log;
+import android.util.Printer;
 import android.util.SparseArray;
 
 import java.io.File;
@@ -39,14 +40,14 @@
  * otherwise.
  */
 public final class BatteryStatsImpl extends BatteryStats {
-    
     private static final String TAG = "BatteryStatsImpl";
+    private static final boolean DEBUG = false;
 
     // In-memory Parcel magic number, used to detect attempts to unmarshall bad data
     private static final int MAGIC = 0xBA757475; // 'BATSTATS' 
 
     // Current on-disk Parcel version
-    private static final int VERSION = 23;
+    private static final int VERSION = 25;
 
     private final File mFile;
     private final File mBackupFile;
@@ -86,9 +87,11 @@
     long mLastRealtime;
     
     boolean mScreenOn;
-    long mLastScreenOnTimeMillis;
-    long mBatteryScreenOnTimeMillis;
-    long mPluggedScreenOnTimeMillis;
+    Timer mScreenOnTimer;
+    
+    boolean mPhoneOn;
+    Timer mPhoneOnTimer;
+    
     /**
      * These provide time bases that discount the time the device is plugged
      * in to power.
@@ -132,16 +135,45 @@
         // Times are in microseconds for better accuracy when dividing by the
         // lock count, and are in "battery realtime" units.
         
+        /**
+         * The total time we have accumulated since the start of the original
+         * boot, to the last time something interesting happened in the
+         * current run.
+         */
         long mTotalTime;
-        long mLoadedTotalTime;
-        long mLastTotalTime;
+        
+        /**
+         * The total time we loaded for the previous runs.  Subtract this from
+         * mTotalTime to find the time for the current run of the system.
+         */
+        long mLoadedTime;
+        
+        /**
+         * The run time of the last run of the system, as loaded from the
+         * saved data.
+         */
+        long mLastTime;
+        
+        /**
+         * The value of mTotalTime when unplug() was last called.  Subtract
+         * this from mTotalTime to find the time since the last unplug from
+         * power.
+         */
+        long mUnpluggedTime;
+
+        /**
+         * The last time at which we updated the timer.  If mNesting is > 0,
+         * subtract this from the current battery time to find the amount of
+         * time we have been running since we last computed an update.
+         */
         long mUpdateTime;
         
         /**
-         * The value of mTotalTime when unplug() was last called, initially 0.
+         * The total time at which the timer was acquired, to determine if
+         * was actually held for an interesting duration.
          */
-        long mUnpluggedTotalTime;
-
+        long mAcquireTime;
+        
         Timer(int type, ArrayList<Timer> timerPool,
                 ArrayList<Unpluggable> unpluggables, Parcel in) {
             mType = type;
@@ -151,10 +183,10 @@
             mLastCount = in.readInt();
             mUnpluggedCount = in.readInt();
             mTotalTime = in.readLong();
-            mLoadedTotalTime = in.readLong();
-            mLastTotalTime = in.readLong();
+            mLoadedTime = in.readLong();
+            mLastTime = in.readLong();
             mUpdateTime = in.readLong();
-            mUnpluggedTotalTime = in.readLong();
+            mUnpluggedTime = in.readLong();
             unpluggables.add(this);
         }
 
@@ -171,21 +203,41 @@
             out.writeInt(mLastCount);
             out.writeInt(mUnpluggedCount);
             out.writeLong(computeRunTimeLocked(batteryRealtime));
-            out.writeLong(mLoadedTotalTime);
-            out.writeLong(mLastTotalTime);
+            out.writeLong(mLoadedTime);
+            out.writeLong(mLastTime);
             out.writeLong(mUpdateTime);
-            out.writeLong(mUnpluggedTotalTime);
+            out.writeLong(mUnpluggedTime);
         }
 
         public void unplug(long batteryUptime, long batteryRealtime) {
-            mUnpluggedTotalTime = computeRunTimeLocked(batteryRealtime);
+            if (DEBUG && mType < 0) {
+                Log.v(TAG, "unplug #" + mType + ": realtime=" + batteryRealtime
+                        + " old mUnpluggedTime=" + mUnpluggedTime
+                        + " old mUnpluggedCount=" + mUnpluggedCount);
+            }
+            mUnpluggedTime = computeRunTimeLocked(batteryRealtime);
             mUnpluggedCount = mCount;
+            if (DEBUG && mType < 0) {
+                Log.v(TAG, "unplug #" + mType
+                        + ": new mUnpluggedTime=" + mUnpluggedTime
+                        + " new mUnpluggedCount=" + mUnpluggedCount);
+            }
         }
 
         public void plug(long batteryUptime, long batteryRealtime) {
             if (mNesting > 0) {
+                if (DEBUG && mType < 0) {
+                    Log.v(TAG, "plug #" + mType + ": realtime=" + batteryRealtime
+                            + " old mTotalTime=" + mTotalTime
+                            + " old mUpdateTime=" + mUpdateTime);
+                }
                 mTotalTime = computeRunTimeLocked(batteryRealtime);
                 mUpdateTime = batteryRealtime;
+                if (DEBUG && mType < 0) {
+                    Log.v(TAG, "plug #" + mType
+                            + ": new mTotalTime=" + mTotalTime
+                            + " old mUpdateTime=" + mUpdateTime);
+                }
             }
         }
         
@@ -207,16 +259,16 @@
         }
 
         @Override
-        public long getTotalTime(long now, int which) {
+        public long getTotalTime(long batteryRealtime, int which) {
             long val;
             if (which == STATS_LAST) {
-                val = mLastTotalTime;
+                val = mLastTime;
             } else {
-                val = computeRunTimeLocked(now);
+                val = computeRunTimeLocked(batteryRealtime);
                 if (which == STATS_UNPLUGGED) {
-                    val -= mUnpluggedTotalTime;
+                    val -= mUnpluggedTime;
                 } else if (which != STATS_TOTAL) {
-                    val -= mLoadedTotalTime;
+                    val -= mLoadedTime;
                 }
             }
 
@@ -245,22 +297,32 @@
                     + " mLoadedCount=" + mLoadedCount + " mLastCount=" + mLastCount
                     + " mUnpluggedCount=" + mUnpluggedCount);
             Log.i("foo", "mTotalTime=" + mTotalTime
-                    + " mLoadedTotalTime=" + mLoadedTotalTime);
-            Log.i("foo", "mLastTotalTime=" + mLastTotalTime
-                    + " mUpdateTime=" + mUpdateTime);
+                    + " mLoadedTime=" + mLoadedTime);
+            Log.i("foo", "mLastTime=" + mLastTime
+                    + " mUnpluggedTime=" + mUnpluggedTime);
+            Log.i("foo", "mUpdateTime=" + mUpdateTime
+                    + " mAcquireTime=" + mAcquireTime);
         }
         
         void startRunningLocked(BatteryStatsImpl stats) {
             if (mNesting++ == 0) {
                 mUpdateTime = stats.getBatteryRealtimeLocked(
                         SystemClock.elapsedRealtime() * 1000);
-                // Accumulate time to all currently active timers before adding
-                // this new one to the pool.
-                refreshTimersLocked(stats, mTimerPool);
-                // Add this timer to the active pool
-                mTimerPool.add(this);
+                if (mTimerPool != null) {
+                    // Accumulate time to all currently active timers before adding
+                    // this new one to the pool.
+                    refreshTimersLocked(stats, mTimerPool);
+                    // Add this timer to the active pool
+                    mTimerPool.add(this);
+                }
                 // Increment the count
                 mCount++;
+                mAcquireTime = mTotalTime;
+                if (DEBUG && mType < 0) {
+                    Log.v(TAG, "start #" + mType + ": mUpdateTime=" + mUpdateTime
+                            + " mTotalTime=" + mTotalTime + " mCount=" + mCount
+                            + " mAcquireTime=" + mAcquireTime);
+                }
             }
         }
 
@@ -270,11 +332,31 @@
                 return;
             }
             if (--mNesting == 0) {
-                // Accumulate time to all active counters, scaled by the total
-                // active in the pool, before taking this one out of the pool.
-                refreshTimersLocked(stats, mTimerPool);
-                // Remove this timer from the active pool
-                mTimerPool.remove(this);
+                if (mTimerPool != null) {
+                    // Accumulate time to all active counters, scaled by the total
+                    // active in the pool, before taking this one out of the pool.
+                    refreshTimersLocked(stats, mTimerPool);
+                    // Remove this timer from the active pool
+                    mTimerPool.remove(this);
+                } else {
+                    final long realtime = SystemClock.elapsedRealtime() * 1000; 
+                    final long batteryRealtime = stats.getBatteryRealtimeLocked(realtime);
+                    mNesting = 1;
+                    mTotalTime = computeRunTimeLocked(batteryRealtime);
+                    mNesting = 0;
+                }
+                
+                if (DEBUG && mType < 0) {
+                    Log.v(TAG, "stop #" + mType + ": mUpdateTime=" + mUpdateTime
+                            + " mTotalTime=" + mTotalTime + " mCount=" + mCount
+                            + " mAcquireTime=" + mAcquireTime);
+                }
+                
+                if (mTotalTime == mAcquireTime) {
+                    // If there was no change in the time, then discard this
+                    // count.  A somewhat cheezy strategy, but hey.
+                    mCount--;
+                }
             }
         }
 
@@ -297,24 +379,28 @@
 
         private long computeRunTimeLocked(long curBatteryRealtime) {
             return mTotalTime + (mNesting > 0
-                    ? (curBatteryRealtime - mUpdateTime) / mTimerPool.size() : 0);
+                    ? (curBatteryRealtime - mUpdateTime)
+                            / (mTimerPool != null ? mTimerPool.size() : 1)
+                    : 0);
         }
 
-        void writeSummaryFromParcelLocked(Parcel out, long curBatteryUptime) {
-            long runTime = computeRunTimeLocked(curBatteryUptime);
+        void writeSummaryFromParcelLocked(Parcel out, long batteryRealtime) {
+            long runTime = computeRunTimeLocked(batteryRealtime);
             // Divide by 1000 for backwards compatibility
             out.writeLong((runTime + 500) / 1000);
-            out.writeLong(((runTime - mLoadedTotalTime) + 500) / 1000);
+            out.writeLong(((runTime - mLoadedTime) + 500) / 1000);
             out.writeInt(mCount);
             out.writeInt(mCount - mLoadedCount);
         }
 
         void readSummaryFromParcelLocked(Parcel in) {
             // Multiply by 1000 for backwards compatibility
-            mTotalTime = mLoadedTotalTime = in.readLong() * 1000;
-            mLastTotalTime = in.readLong();
+            mTotalTime = mLoadedTime = in.readLong() * 1000;
+            mLastTime = in.readLong() * 1000;
+            mUnpluggedTime = mTotalTime;
             mCount = mLoadedCount = in.readInt();
             mLastCount = in.readInt();
+            mUnpluggedCount = mCount;
             mNesting = 0;
         }
     }
@@ -357,47 +443,40 @@
         mUidStats.get(uid).noteStopGps();
     }
     
-    /**
-     * When the device screen or battery state changes, update the appropriate "screen on time"
-     * counter.
-     */
-    private void updateScreenOnTimeLocked(boolean screenOn) {
-        if (!mScreenOn) {
-            Log.w(TAG, "updateScreenOnTime without mScreenOn, ignored");
-            return;
-        }
-        long now = SystemClock.elapsedRealtime();
-        long elapsed = now - mLastScreenOnTimeMillis;
-        if (mOnBattery) {
-            mBatteryScreenOnTimeMillis += elapsed;
-        } else {
-            mPluggedScreenOnTimeMillis += elapsed;
-        }
-        if (screenOn) {
-            mLastScreenOnTimeMillis = now;
-        }
-    }
-    
     public void noteScreenOnLocked() {
-        mScreenOn = true;
-        mLastScreenOnTimeMillis = SystemClock.elapsedRealtime();
+        if (!mScreenOn) {
+            mScreenOn = true;
+            mScreenOnTimer.startRunningLocked(this);
+        }
     }
     
     public void noteScreenOffLocked() {
-        if (!mScreenOn) {
-            Log.w(TAG, "noteScreenOff without mScreenOn, ignored");
-            return;
+        if (mScreenOn) {
+            mScreenOn = false;
+            mScreenOnTimer.stopRunningLocked(this);
         }
-        updateScreenOnTimeLocked(false);
-        mScreenOn = false;
     }
     
-    @Override public long getBatteryScreenOnTime() {
-        return mBatteryScreenOnTimeMillis;
+    public void notePhoneOnLocked() {
+        if (!mPhoneOn) {
+            mPhoneOn = true;
+            mPhoneOnTimer.startRunningLocked(this);
+        }
     }
     
-    @Override public long getPluggedScreenOnTime() {
-        return mPluggedScreenOnTimeMillis;
+    public void notePhoneOffLocked() {
+        if (mPhoneOn) {
+            mPhoneOn = false;
+            mPhoneOnTimer.stopRunningLocked(this);
+        }
+    }
+    
+    @Override public long getScreenOnTime(long batteryRealtime, int which) {
+        return mScreenOnTimer.getTotalTime(batteryRealtime, which);
+    }
+    
+    @Override public long getPhoneOnTime(long batteryRealtime, int which) {
+        return mPhoneOnTimer.getTotalTime(batteryRealtime, which);
     }
     
     @Override public boolean getIsOnBattery() {
@@ -1381,6 +1460,8 @@
         mFile = new File(filename);
         mBackupFile = new File(filename + ".bak");
         mStartCount++;
+        mScreenOnTimer = new Timer(-1, null, mUnpluggables);
+        mPhoneOnTimer = new Timer(-2, null, mUnpluggables);
         mOnBattery = mOnBatteryInternal = false;
         mTrackBatteryPastUptime = 0;
         mTrackBatteryPastRealtime = 0;
@@ -1407,10 +1488,6 @@
     public void setOnBattery(boolean onBattery) {
         synchronized(this) {
             if (mOnBattery != onBattery) {
-                if (mScreenOn) {
-                    updateScreenOnTimeLocked(true);
-                }
-                
                 mOnBattery = mOnBatteryInternal = onBattery;
                 
                 long uptime = SystemClock.uptimeMillis() * 1000;
@@ -1425,7 +1502,7 @@
                 } else {
                     mTrackBatteryPastUptime += uptime - mTrackBatteryUptimeStart;
                     mTrackBatteryPastRealtime += realtime - mTrackBatteryRealtimeStart;
-                    doPlug(mUnpluggedBatteryUptime, mUnpluggedBatteryRealtime);
+                    doPlug(getBatteryUptimeLocked(uptime), getBatteryRealtimeLocked(realtime));
                 }
                 if ((mLastWriteTime + (60 * 1000)) < mSecRealtime) {
                     if (mFile != null) {
@@ -1447,10 +1524,10 @@
     @Override
     public long computeUptime(long curTime, int which) {
         switch (which) {
-        case STATS_TOTAL: return mUptime + (curTime-mUptimeStart);
-        case STATS_LAST: return mLastUptime;
-        case STATS_CURRENT: return (curTime-mUptimeStart);
-        case STATS_UNPLUGGED: return (curTime-mTrackBatteryUptimeStart);
+            case STATS_TOTAL: return mUptime + (curTime-mUptimeStart);
+            case STATS_LAST: return mLastUptime;
+            case STATS_CURRENT: return (curTime-mUptimeStart);
+            case STATS_UNPLUGGED: return (curTime-mTrackBatteryUptimeStart);
         }
         return 0;
     }
@@ -1458,26 +1535,25 @@
     @Override
     public long computeRealtime(long curTime, int which) {
         switch (which) {
-        case STATS_TOTAL: return mRealtime + (curTime-mRealtimeStart);
-        case STATS_LAST: return mLastRealtime;
-        case STATS_CURRENT: return (curTime-mRealtimeStart);
-        case STATS_UNPLUGGED: return (curTime-mTrackBatteryRealtimeStart);
+            case STATS_TOTAL: return mRealtime + (curTime-mRealtimeStart);
+            case STATS_LAST: return mLastRealtime;
+            case STATS_CURRENT: return (curTime-mRealtimeStart);
+            case STATS_UNPLUGGED: return (curTime-mTrackBatteryRealtimeStart);
         }
         return 0;
     }
 
     @Override
     public long computeBatteryUptime(long curTime, int which) {
-        long uptime = getBatteryUptime(curTime);
         switch (which) {
-        case STATS_TOTAL:
-            return mBatteryUptime + uptime;
-        case STATS_LAST:
-            return mBatteryLastUptime;
-        case STATS_CURRENT:
-            return uptime;
-        case STATS_UNPLUGGED:
-            return getBatteryUptimeLocked(curTime) - mUnpluggedBatteryUptime;
+            case STATS_TOTAL:
+                return mBatteryUptime + getBatteryUptime(curTime);
+            case STATS_LAST:
+                return mBatteryLastUptime;
+            case STATS_CURRENT:
+                return getBatteryUptime(curTime);
+            case STATS_UNPLUGGED:
+                return getBatteryUptimeLocked(curTime) - mUnpluggedBatteryUptime;
         }
         return 0;
     }
@@ -1485,14 +1561,14 @@
     @Override
     public long computeBatteryRealtime(long curTime, int which) {
         switch (which) {
-        case STATS_TOTAL:
-            return mBatteryRealtime + getBatteryRealtimeLocked(curTime);
-        case STATS_LAST:
-            return mBatteryLastRealtime;
-        case STATS_CURRENT:
-            return getBatteryRealtimeLocked(curTime);
-        case STATS_UNPLUGGED:
-            return getBatteryRealtimeLocked(curTime) - mUnpluggedBatteryRealtime;
+            case STATS_TOTAL:
+                return mBatteryRealtime + getBatteryRealtimeLocked(curTime);
+            case STATS_LAST:
+                return mBatteryLastRealtime;
+            case STATS_CURRENT:
+                return getBatteryRealtimeLocked(curTime);
+            case STATS_UNPLUGGED:
+                return getBatteryRealtimeLocked(curTime) - mUnpluggedBatteryRealtime;
         }
         return 0;
     }
@@ -1688,9 +1764,10 @@
         mLastRealtime = in.readLong();
         mStartCount++;
         
-        mBatteryScreenOnTimeMillis = in.readLong();
-        mPluggedScreenOnTimeMillis = in.readLong();
         mScreenOn = false;
+        mScreenOnTimer.readSummaryFromParcelLocked(in);
+        mPhoneOn = false;
+        mPhoneOnTimer.readSummaryFromParcelLocked(in);
 
         final int NU = in.readInt();
         for (int iu = 0; iu < NU; iu++) {
@@ -1764,9 +1841,10 @@
      * @param out the Parcel to be written to.
      */
     public void writeSummaryToParcel(Parcel out) {
-        final long NOW = getBatteryUptimeLocked();
         final long NOW_SYS = SystemClock.uptimeMillis() * 1000;
         final long NOWREAL_SYS = SystemClock.elapsedRealtime() * 1000;
+        final long NOW = getBatteryUptimeLocked(NOW_SYS);
+        final long NOWREAL = getBatteryRealtimeLocked(NOWREAL_SYS);
 
         out.writeInt(VERSION);
 
@@ -1780,8 +1858,8 @@
         out.writeLong(computeRealtime(NOWREAL_SYS, STATS_TOTAL));
         out.writeLong(computeRealtime(NOWREAL_SYS, STATS_CURRENT));
         
-        out.writeLong(mBatteryScreenOnTimeMillis);
-        out.writeLong(mPluggedScreenOnTimeMillis);
+        mScreenOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+        mPhoneOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
 
         final int NU = mUidStats.size();
         out.writeInt(NU);
@@ -1798,19 +1876,19 @@
                     Uid.Wakelock wl = ent.getValue();
                     if (wl.mTimerFull != null) {
                         out.writeInt(1);
-                        wl.mTimerFull.writeSummaryFromParcelLocked(out, NOW);
+                        wl.mTimerFull.writeSummaryFromParcelLocked(out, NOWREAL);
                     } else {
                         out.writeInt(0);
                     }
                     if (wl.mTimerPartial != null) {
                         out.writeInt(1);
-                        wl.mTimerPartial.writeSummaryFromParcelLocked(out, NOW);
+                        wl.mTimerPartial.writeSummaryFromParcelLocked(out, NOWREAL);
                     } else {
                         out.writeInt(0);
                     }
                     if (wl.mTimerWindow != null) {
                         out.writeInt(1);
-                        wl.mTimerWindow.writeSummaryFromParcelLocked(out, NOW);
+                        wl.mTimerWindow.writeSummaryFromParcelLocked(out, NOWREAL);
                     } else {
                         out.writeInt(0);
                     }
@@ -1826,7 +1904,7 @@
                     Uid.Sensor se = ent.getValue();
                     if (se.mTimer != null) {
                         out.writeInt(1);
-                        se.mTimer.writeSummaryFromParcelLocked(out, NOW);
+                        se.mTimer.writeSummaryFromParcelLocked(out, NOWREAL);
                     } else {
                         out.writeInt(0);
                     }
@@ -1897,9 +1975,10 @@
         mBatteryLastUptime = in.readLong();
         mBatteryRealtime = in.readLong();
         mBatteryLastRealtime = in.readLong();
-        mBatteryScreenOnTimeMillis = in.readLong();
-        mPluggedScreenOnTimeMillis = in.readLong();
         mScreenOn = false;
+        mScreenOnTimer = new Timer(-1, null, mUnpluggables, in);
+        mPhoneOn = false;
+        mPhoneOnTimer = new Timer(-2, null, mUnpluggables, in);
         mUptime = in.readLong();
         mUptimeStart = in.readLong();
         mLastUptime = in.readLong();
@@ -1912,6 +1991,8 @@
         mTrackBatteryUptimeStart = in.readLong();
         mTrackBatteryPastRealtime = in.readLong();
         mTrackBatteryRealtimeStart = in.readLong();
+        mUnpluggedBatteryUptime = in.readLong();
+        mUnpluggedBatteryRealtime = in.readLong();
         mLastWriteTime = in.readLong();
 
         mPartialTimers.clear();
@@ -1945,8 +2026,8 @@
         out.writeLong(mBatteryLastUptime);
         out.writeLong(mBatteryRealtime);
         out.writeLong(mBatteryLastRealtime);
-        out.writeLong(mBatteryScreenOnTimeMillis);
-        out.writeLong(mPluggedScreenOnTimeMillis);
+        mScreenOnTimer.writeToParcel(out, batteryRealtime);
+        mPhoneOnTimer.writeToParcel(out, batteryRealtime);
         out.writeLong(mUptime);
         out.writeLong(mUptimeStart);
         out.writeLong(mLastUptime);
@@ -1954,10 +2035,12 @@
         out.writeLong(mRealtimeStart);
         out.writeLong(mLastRealtime);
         out.writeInt(mOnBattery ? 1 : 0);
-        out.writeLong(mTrackBatteryPastUptime);
+        out.writeLong(batteryUptime);
         out.writeLong(mTrackBatteryUptimeStart);
-        out.writeLong(mTrackBatteryPastRealtime);
+        out.writeLong(batteryRealtime);
         out.writeLong(mTrackBatteryRealtimeStart);
+        out.writeLong(mUnpluggedBatteryUptime);
+        out.writeLong(mUnpluggedBatteryRealtime);
         out.writeLong(mLastWriteTime);
 
         int size = mUidStats.size();
@@ -1980,4 +2063,14 @@
             return new BatteryStatsImpl[size];
         }
     };
+    
+    public void dumpLocked(Printer pw) {
+        if (DEBUG) {
+            Log.i(TAG, "*** Screen timer:");
+            mScreenOnTimer.logState();
+            Log.i(TAG, "*** Phone timer:");
+            mPhoneOnTimer.logState();
+        }
+        super.dumpLocked(pw);
+    }
 }
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index f21b62f..ac8b589 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -19,6 +19,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.ColorStateList;
 import android.graphics.drawable.Drawable;
 import android.net.LocalServerSocket;
 import android.os.Debug;
@@ -335,32 +336,18 @@
             mResources.startPreloading();
             if (PRELOAD_RESOURCES) {
                 Log.i(TAG, "Preloading resources...");
+
                 long startTime = SystemClock.uptimeMillis();
                 TypedArray ar = mResources.obtainTypedArray(
                         com.android.internal.R.array.preloaded_drawables);
-                int N = ar.length();
-                for (int i=0; i<N; i++) {
-                    if (Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
-                        if (Config.LOGV) {
-                            Log.v(TAG, " GC at " + Debug.getGlobalAllocSize());
-                        }
-                        runtime.gcSoftReferences();
-                        runtime.runFinalizationSync();
-                        Debug.resetGlobalAllocSize();
-                    }
-                    int id = ar.getResourceId(i, 0);
-                    if (Config.LOGV) {
-                        Log.v(TAG, "Preloading resource #" + Integer.toHexString(id));
-                    }
-                    if (id != 0) {
-                        Drawable dr = mResources.getDrawable(id);
-                        if ((dr.getChangingConfigurations()&~ActivityInfo.CONFIG_FONT_SCALE) != 0) {
-                            Log.w(TAG, "Preloaded drawable resource #0x"
-                                    + Integer.toHexString(id)
-                                    + " that varies with configuration!!");
-                        }
-                    }
-                }
+                int N = preloadDrawables(runtime, ar);
+                Log.i(TAG, "...preloaded " + N + " resources in "
+                        + (SystemClock.uptimeMillis()-startTime) + "ms.");
+
+                startTime = SystemClock.uptimeMillis();
+                ar = mResources.obtainTypedArray(
+                        com.android.internal.R.array.preloaded_color_state_lists);
+                N = preloadColorStateLists(runtime, ar);
                 Log.i(TAG, "...preloaded " + N + " resources in "
                         + (SystemClock.uptimeMillis()-startTime) + "ms.");
             }
@@ -372,6 +359,56 @@
         }
     }
 
+    private static int preloadColorStateLists(VMRuntime runtime, TypedArray ar) {
+        int N = ar.length();
+        for (int i=0; i<N; i++) {
+            if (Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
+                if (Config.LOGV) {
+                    Log.v(TAG, " GC at " + Debug.getGlobalAllocSize());
+                }
+                runtime.gcSoftReferences();
+                runtime.runFinalizationSync();
+                Debug.resetGlobalAllocSize();
+            }
+            int id = ar.getResourceId(i, 0);
+            if (Config.LOGV) {
+                Log.v(TAG, "Preloading resource #" + Integer.toHexString(id));
+            }
+            if (id != 0) {
+                mResources.getColorStateList(id);
+            }
+        }
+        return N;
+    }
+
+
+    private static int preloadDrawables(VMRuntime runtime, TypedArray ar) {
+        int N = ar.length();
+        for (int i=0; i<N; i++) {
+            if (Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
+                if (Config.LOGV) {
+                    Log.v(TAG, " GC at " + Debug.getGlobalAllocSize());
+                }
+                runtime.gcSoftReferences();
+                runtime.runFinalizationSync();
+                Debug.resetGlobalAllocSize();
+            }
+            int id = ar.getResourceId(i, 0);
+            if (Config.LOGV) {
+                Log.v(TAG, "Preloading resource #" + Integer.toHexString(id));
+            }
+            if (id != 0) {
+                Drawable dr = mResources.getDrawable(id);
+                if ((dr.getChangingConfigurations()&~ActivityInfo.CONFIG_FONT_SCALE) != 0) {
+                    Log.w(TAG, "Preloaded drawable resource #0x"
+                            + Integer.toHexString(id)
+                            + " (" + ar.getString(i) + ") that varies with configuration!!");
+                }
+            }
+        }
+        return N;
+    }
+
     /**
      * Runs several special GCs to try to clean up a few generations of
      * softly- and final-reachable objects, along with any other garbage.
diff --git a/core/java/com/android/internal/view/IInputConnectionWrapper.java b/core/java/com/android/internal/view/IInputConnectionWrapper.java
index 4f98cee..8e65177 100644
--- a/core/java/com/android/internal/view/IInputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/IInputConnectionWrapper.java
@@ -23,7 +23,8 @@
     private static final int DO_COMMIT_TEXT = 50;
     private static final int DO_COMMIT_COMPLETION = 55;
     private static final int DO_SET_SELECTION = 57;
-    private static final int DO_PERFORM_CONTEXT_MENU_ACTION = 58;
+    private static final int DO_PERFORM_EDITOR_ACTION = 58;
+    private static final int DO_PERFORM_CONTEXT_MENU_ACTION = 59;
     private static final int DO_SET_COMPOSING_TEXT = 60;
     private static final int DO_FINISH_COMPOSING_TEXT = 65;
     private static final int DO_SEND_KEY_EVENT = 70;
@@ -97,6 +98,10 @@
         dispatchMessage(obtainMessageII(DO_SET_SELECTION, start, end));
     }
 
+    public void performEditorAction(int id) {
+        dispatchMessage(obtainMessageII(DO_PERFORM_EDITOR_ACTION, id, 0));
+    }
+    
     public void performContextMenuAction(int id) {
         dispatchMessage(obtainMessageII(DO_PERFORM_CONTEXT_MENU_ACTION, id, 0));
     }
@@ -235,6 +240,15 @@
                 ic.setSelection(msg.arg1, msg.arg2);
                 return;
             }
+            case DO_PERFORM_EDITOR_ACTION: {
+                InputConnection ic = mInputConnection.get();
+                if (ic == null || !isActive()) {
+                    Log.w(TAG, "performEditorAction on inactive InputConnection");
+                    return;
+                }
+                ic.performEditorAction(msg.arg1);
+                return;
+            }
             case DO_PERFORM_CONTEXT_MENU_ACTION: {
                 InputConnection ic = mInputConnection.get();
                 if (ic == null || !isActive()) {
diff --git a/core/java/com/android/internal/view/IInputContext.aidl b/core/java/com/android/internal/view/IInputContext.aidl
index 02b6044..02cb9e4 100644
--- a/core/java/com/android/internal/view/IInputContext.aidl
+++ b/core/java/com/android/internal/view/IInputContext.aidl
@@ -50,6 +50,8 @@
 
     void setSelection(int start, int end);
     
+    void performEditorAction(int actionCode);
+    
     void performContextMenuAction(int id);
     
     void beginBatchEdit();
diff --git a/core/java/com/android/internal/view/InputConnectionWrapper.java b/core/java/com/android/internal/view/InputConnectionWrapper.java
index 32d9f3d..b92cb45 100644
--- a/core/java/com/android/internal/view/InputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/InputConnectionWrapper.java
@@ -250,6 +250,15 @@
         }
     }
     
+    public boolean performEditorAction(int actionCode) {
+        try {
+            mIInputContext.performEditorAction(actionCode);
+            return true;
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+    
     public boolean performContextMenuAction(int id) {
         try {
             mIInputContext.performContextMenuAction(id);
diff --git a/core/java/com/android/internal/view/menu/ExpandedMenuView.java b/core/java/com/android/internal/view/menu/ExpandedMenuView.java
index c16c165..9e4b4ce 100644
--- a/core/java/com/android/internal/view/menu/ExpandedMenuView.java
+++ b/core/java/com/android/internal/view/menu/ExpandedMenuView.java
@@ -80,6 +80,11 @@
         setChildrenDrawingCacheEnabled(false);
     }
 
+    @Override
+    protected boolean recycleOnMeasure() {
+        return false;
+    }
+
     public boolean invokeItem(MenuItemImpl item) {
         return mMenu.performItemAction(item, 0);
     }
diff --git a/core/java/com/android/internal/widget/EditableInputConnection.java b/core/java/com/android/internal/widget/EditableInputConnection.java
index 44cf0ed..f2ec064 100644
--- a/core/java/com/android/internal/widget/EditableInputConnection.java
+++ b/core/java/com/android/internal/widget/EditableInputConnection.java
@@ -59,7 +59,14 @@
         final Editable content = getEditable();
         if (content == null) return false;
         KeyListener kl = mTextView.getKeyListener();
-        if (kl != null) kl.clearMetaKeyState(mTextView, content, states);
+        if (kl != null) {
+            try {
+                kl.clearMetaKeyState(mTextView, content, states);
+            } catch (AbstractMethodError e) {
+                // This is an old listener that doesn't implement the
+                // new method.
+            }
+        }
         return true;
     }
     
@@ -71,6 +78,12 @@
         return true;
     }
 
+    public boolean performEditorAction(int actionCode) {
+        if (DEBUG) Log.v(TAG, "performEditorAction " + actionCode);
+        mTextView.onEditorAction(actionCode);
+        return true;
+    }
+    
     public boolean performContextMenuAction(int id) {
         if (DEBUG) Log.v(TAG, "performContextMenuAction " + id);
         mTextView.beginBatchEdit();
diff --git a/core/java/com/android/internal/widget/TextProgressBar.java b/core/java/com/android/internal/widget/TextProgressBar.java
index 5bf4601..aee7b76 100644
--- a/core/java/com/android/internal/widget/TextProgressBar.java
+++ b/core/java/com/android/internal/widget/TextProgressBar.java
@@ -115,8 +115,10 @@
         
         // Update the ProgressBar maximum relative to Chronometer base
         mDuration = (int) (durationBase - mChronometer.getBase());
+        if (mDuration <= 0) {
+            mDuration = 1;
+        }
         mProgressBar.setMax(mDuration);
-        
     }
     
     /**
diff --git a/core/java/com/google/android/gdata/client/AndroidGDataClient.java b/core/java/com/google/android/gdata/client/AndroidGDataClient.java
index 1d8e9c5..fe7d860 100644
--- a/core/java/com/google/android/gdata/client/AndroidGDataClient.java
+++ b/core/java/com/google/android/gdata/client/AndroidGDataClient.java
@@ -21,6 +21,7 @@
 import org.apache.http.entity.AbstractHttpEntity;
 
 import android.content.ContentResolver;
+import android.content.Context;
 import android.net.http.AndroidHttpClient;
 import android.text.TextUtils;
 import android.util.Config;
@@ -117,10 +118,7 @@
     }
 
     /**
-     * Creates a new AndroidGDataClient.
-     * 
-     * @param resolver The ContentResolver to get URL rewriting rules from
-     * through the Android proxy server, using null to indicate not using proxy.
+     * @deprecated Use AndroidGDAtaClient(Context) instead.
      */
     public AndroidGDataClient(ContentResolver resolver) {
         mHttpClient = new GoogleHttpClient(resolver, USER_AGENT_APP_VERSION,
@@ -129,6 +127,21 @@
         mResolver = resolver;
     }
 
+    /**
+     * Creates a new AndroidGDataClient.
+     * 
+     * @param context The ContentResolver to get URL rewriting rules from
+     * through the Android proxy server, using null to indicate not using proxy.
+     * The context will also be used by GoogleHttpClient for configuration of 
+     * SSL session persistence.
+     */
+    public AndroidGDataClient(Context context) {
+        mHttpClient = new GoogleHttpClient(context, USER_AGENT_APP_VERSION,
+                true /* gzip capable */);
+        mHttpClient.enableCurlLogging(TAG, Log.VERBOSE);
+        mResolver = context.getContentResolver();
+    }
+
     public void close() {
         mHttpClient.close();
     }
diff --git a/core/java/com/google/android/net/GoogleHttpClient.java b/core/java/com/google/android/net/GoogleHttpClient.java
index 2fcb0c3..ae78ba8 100644
--- a/core/java/com/google/android/net/GoogleHttpClient.java
+++ b/core/java/com/google/android/net/GoogleHttpClient.java
@@ -16,8 +16,12 @@
 
 package com.google.android.net;
 
+import com.android.internal.net.DbSSLSessionCache;
+import com.android.internal.net.SSLSessionCache;
+
 import android.content.ContentResolver;
 import android.content.ContentValues;
+import android.content.Context;
 import android.net.http.AndroidHttpClient;
 import android.os.Build;
 import android.os.NetStat;
@@ -79,21 +83,10 @@
     }
 
     /**
-     * Create an HTTP client.  Normaly this client is shared throughout an app.
-     * The HTTP client will construct its User-Agent as follows:
-     *
-     * <appAndVersion> (<build device> <build id>)
-     * or
-     * <appAndVersion> (<build device> <build id>); gzip
-     * (if gzip capable)
-     *
-     * @param resolver to use for acccessing URL rewriting rules.
-     * @param appAndVersion Base app and version to use in the User-Agent.
-     * e.g., "MyApp/1.0"
-     * @param gzipCapable Whether or not this client is able to consume gzip'd
-     * responses.  Only used to modify the User-Agent, not other request
-     * headers.  Needed because Google servers require gzip in the User-Agent
-     * in order to return gzip'd content.
+     * GoogleHttpClient(Context, String, boolean) - without SSL session 
+     * persistence. 
+     * 
+     * @deprecated use Context instead of ContentResolver.
      */
     public GoogleHttpClient(ContentResolver resolver, String appAndVersion,
             boolean gzipCapable) {
@@ -108,6 +101,41 @@
     }
 
     /**
+     * Create an HTTP client.  Normaly this client is shared throughout an app.
+     * The HTTP client will construct its User-Agent as follows:
+     *
+     * <appAndVersion> (<build device> <build id>)
+     * or
+     * <appAndVersion> (<build device> <build id>); gzip
+     * (if gzip capable)
+     *
+     * The context has settings for URL rewriting rules and is used to enable
+     *  SSL session persistence.  
+     *    
+     * @param context application context.
+     * @param appAndVersion Base app and version to use in the User-Agent.
+     * e.g., "MyApp/1.0"
+     * @param gzipCapable Whether or not this client is able to consume gzip'd
+     * responses.  Only used to modify the User-Agent, not other request
+     * headers.  Needed because Google servers require gzip in the User-Agent
+     * in order to return gzip'd content.
+     */
+    public GoogleHttpClient(Context context, String appAndVersion,
+        boolean gzipCapable) {
+      
+        String userAgent = appAndVersion
+                + " (" + Build.DEVICE + " " + Build.ID + ")";
+        if (gzipCapable) {
+            userAgent = userAgent + "; gzip";
+        }
+        mClient = AndroidHttpClient.newInstance(userAgent, 
+                SSLSessionCache.getSessionCache(context));
+        
+        mResolver = context.getContentResolver();
+        mUserAgent = userAgent;
+    }
+
+    /**
      * Release resources associated with this client.  You must call this,
      * or significant resources (sockets and memory) may be leaked.
      */
diff --git a/core/jni/android_database_SQLiteDatabase.cpp b/core/jni/android_database_SQLiteDatabase.cpp
index 66f0118..66858f9 100644
--- a/core/jni/android_database_SQLiteDatabase.cpp
+++ b/core/jni/android_database_SQLiteDatabase.cpp
@@ -45,6 +45,8 @@
 #define INVALID_VERSION -1
 #define SQLITE_SOFT_HEAP_LIMIT (4 * 1024 * 1024)
 #define ANDROID_TABLE "android_metadata"
+/* uncomment the next line to force-enable logging of all statements */
+// #define DB_LOG_STATEMENTS
 
 namespace android {
 
@@ -197,7 +199,11 @@
             env->ReleaseStringUTFChars(sqlString, sql8);
 
         }
-    } else IF_LOGV() {
+    } else
+#ifndef DB_LOG_STATEMENTS
+    IF_LOGV()
+#endif
+    {
         char const * sql8 = env->GetStringUTFChars(sqlString, NULL);
         LOGV("Success on %p when executing '%s'\n", handle, sql8);
         env->ReleaseStringUTFChars(sqlString, sql8);
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 2f1f9b8..f6cd211 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -15,7 +15,9 @@
 ** limitations under the License.
 */
 
+//#define LOG_NDEBUG 0
 #define LOG_TAG "Camera-JNI"
+#include <utils/Log.h>
 
 #include "jni.h"
 #include "JNIHelp.h"
@@ -45,38 +47,43 @@
 struct fields_t {
     jfieldID    context;
     jfieldID    surface;
-    jfieldID    listener_context;
     jmethodID   post_event;
 };
 
 static fields_t fields;
 static Mutex sLock;
-static jclass sCameraClass;
 
-struct callback_cookie {
-    jobject     camera_ref;
+struct camera_context_t {
+    jobject     mCameraJObjectWeak;     // weak reference to java object
+    jclass      mCameraJClass;          // strong reference to java class
+    sp<Camera>  mCamera;                // strong reference to native object 
 };
 
-sp<Camera> get_native_camera(JNIEnv *env, jobject thiz)
+sp<Camera> get_native_camera(JNIEnv *env, jobject thiz, camera_context_t** pContext)
 {
+    sp<Camera> camera;
     Mutex::Autolock _l(sLock);
-    sp<Camera> c = reinterpret_cast<Camera*>(env->GetIntField(thiz, fields.context));
-    if (c == 0)
+    camera_context_t* context = reinterpret_cast<camera_context_t*>(env->GetIntField(thiz, fields.context));
+    if (context != NULL) {
+        camera = context->mCamera;
+    }
+    LOGV("get_native_camera: context=%p, camera=%p", context, camera.get());
+    if (camera == 0) {
         jniThrowException(env, "java/lang/RuntimeException", "Method called after release()");
+    }
 
-    return c;
+    if (pContext != NULL) *pContext = context;
+    return camera;
 }
 
 static void err_callback(status_t err, void *cookie)
 {
-    JNIEnv *env = AndroidRuntime::getJNIEnv();
-    if (env == NULL) {
-        LOGE("err_callback on dead VM");
-        return;
-    }
-    callback_cookie *c = (callback_cookie *)cookie;
-    int error;
+    camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
+    if ((context == NULL) || (context->mCamera == 0)) return;
 
+    LOGV("err_callback: context=%p, camera=%p", context, context->mCamera.get());
+
+    int error;
     switch (err) {
     case DEAD_OBJECT:
         error = kCameraErrorMediaServer;
@@ -85,29 +92,32 @@
         error = kCameraErrorUnknown;
         break;
     }
-    LOGV("err_callback: camera_ref=%x, cookie=%x", (int)c->camera_ref, (int)cookie);
 
-    env->CallStaticVoidMethod(sCameraClass, fields.post_event,
-                              c->camera_ref, kErrorCallback, error, 0, NULL);
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    if (env == NULL) {
+        LOGE("err_callback on dead VM");
+        return;
+    }
+    env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
+            context->mCameraJObjectWeak, kErrorCallback, error, 0, NULL);
 }
 
 // connect to camera service
 static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
 {
-    sp<Camera> c = Camera::connect();
+    sp<Camera> camera = Camera::connect();
 
-    if (c == NULL) {
+    if (camera == NULL) {
         jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
         return;
     }
 
     // make sure camera hardware is alive
-    if (c->getStatus() != NO_ERROR) {
+    if (camera->getStatus() != NO_ERROR) {
         jniThrowException(env, "java/io/IOException", "Camera initialization failed");
         return;
     }
 
-    callback_cookie *cookie = new callback_cookie;
     jclass clazz = env->GetObjectClass(thiz);
     if (clazz == NULL) {
         LOGE("Can't find android/hardware/Camera");
@@ -118,71 +128,84 @@
 
     // We use a weak reference so the Camera object can be garbage collected.
     // The reference is only used as a proxy for callbacks.
-    cookie->camera_ref = env->NewGlobalRef(weak_this);
-    env->SetIntField(thiz, fields.listener_context, (int)cookie);
+    camera_context_t* context = new camera_context_t;
+    context->mCameraJObjectWeak = env->NewGlobalRef(weak_this);
+    context->mCameraJClass = (jclass)env->NewGlobalRef(clazz);
+    context->mCamera = camera;
 
-    LOGV("native_setup: camera_ref=%x, camera_obj=%x, cookie=%x", (int)cookie->camera_ref, (int)thiz, (int)cookie);
+    // save context in opaque field
+    env->SetIntField(thiz, fields.context, (int)context);
 
-    // save camera object in opaque field
-    env->SetIntField(thiz, fields.context, reinterpret_cast<int>(c.get()));
+    LOGV("native_setup: mCameraJObjectWeak=%x, camera_obj=%x, context=%p",
+            (int)context->mCameraJObjectWeak, (int)thiz, context);
 
-    c->setErrorCallback(err_callback, cookie);
-
-    // hold a strong reference so the camera doesn't go away while the app is still running
-    c->incStrong(thiz);
+    // set error callback
+    camera->setErrorCallback(err_callback, context);
 }
 
 // disconnect from camera service
+// It's okay to call this when the native camera context is already null.
+// This handles the case where the user has called release() and the
+// finalizer is invoked later.
 static void android_hardware_Camera_release(JNIEnv *env, jobject thiz)
 {
-    Mutex::Autolock _l(sLock);
-    sp<Camera> c = reinterpret_cast<Camera*>(env->GetIntField(thiz, fields.context));
-    // It's okay to call this when the native camera context is already null.
-    // This handles the case where the user has called release() and the
-    // finalizer is invoked later.
-    if (c != 0) {
-        // Make sure that we do not attempt to deliver an eror callback on a deleted
-        // Java object.
-        c->setErrorCallback(NULL, NULL);
-        c->disconnect();
+    camera_context_t* context = NULL;
+    sp<Camera> camera;
+    {
+        Mutex::Autolock _l(sLock);
+        context = reinterpret_cast<camera_context_t*>(env->GetIntField(thiz, fields.context));
 
-        // remove our strong reference created in native setup
-        c->decStrong(thiz);
+        // Make sure we do not attempt to callback on a deleted Java object.
         env->SetIntField(thiz, fields.context, 0);
+    }
 
-        callback_cookie *cookie = (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
+    // clean up if release has not been called before
+    if (context != NULL) {
+        camera = context->mCamera;
+        context->mCamera.clear();
+        LOGV("native_release: context=%p camera=%p", context, camera.get());
 
-        LOGV("release: camera_ref=%x, camera_obj=%x, cookie=%x", (int)cookie->camera_ref, (int)thiz, (int)cookie);
-
-        if (cookie) {
-            env->DeleteGlobalRef(cookie->camera_ref);
-            delete cookie;
-            env->SetIntField(thiz, fields.listener_context, 0);
+        // clear callbacks
+        if (camera != NULL) {
+            camera->setPreviewCallback(NULL, NULL, FRAME_CALLBACK_FLAG_NOOP);
+            camera->setErrorCallback(NULL, NULL);
+            camera->disconnect();
+            env->DeleteGlobalRef(context->mCameraJObjectWeak);
+            env->DeleteGlobalRef(context->mCameraJClass);
         }
+
+        // remove context to prevent further Java access
+        delete context;
     }
 }
 
-static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, jobject surface)
+static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, jobject jSurface)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
+    LOGV("setPreviewDisplay");
+    sp<Camera> camera = get_native_camera(env, thiz, NULL);
+    if (camera == 0) return;
 
-    sp<Surface> s = (Surface *)env->GetIntField(surface, fields.surface);
-    if (c->setPreviewDisplay(s) != NO_ERROR) {
+    sp<Surface> surface = reinterpret_cast<Surface*>(env->GetIntField(jSurface, fields.surface));
+    if (camera->setPreviewDisplay(surface) != NO_ERROR) {
         jniThrowException(env, "java/io/IOException", "setPreviewDisplay failed");
-        return;
     }
 }
 
 static void preview_callback(const sp<IMemory>& mem, void *cookie)
 {
+    LOGV("preview_callback");
     JNIEnv *env = AndroidRuntime::getJNIEnv();
     if (env == NULL) {
         LOGE("preview_callback on dead VM");
         return;
     }
-    callback_cookie *c = (callback_cookie *)cookie;
+    camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
+    if ((context == NULL) || (context->mCamera == 0)) {
+        LOGW("context or camera is NULL in preview_callback");
+        return;
+    }
+    LOGV("native_release: context=%p camera=%p", context, context->mCamera.get());
+
     int arg1 = 0, arg2 = 0;
     jobject obj = NULL;
 
@@ -205,18 +228,18 @@
 
     obj = array;
 
-    env->CallStaticVoidMethod(sCameraClass, fields.post_event,
-                              c->camera_ref, kPreviewCallback, arg1, arg2, obj);
+    env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
+            context->mCameraJObjectWeak, kPreviewCallback, arg1, arg2, obj);
     env->DeleteLocalRef(array);
 }
 
 static void android_hardware_Camera_startPreview(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
+    LOGV("startPreview");
+    sp<Camera> camera = get_native_camera(env, thiz, NULL);
+    if (camera == 0) return;
 
-    if (c->startPreview() != NO_ERROR) {
+    if (camera->startPreview() != NO_ERROR) {
         jniThrowException(env, "java/io/IOException", "startPreview failed");
         return;
     }
@@ -224,32 +247,30 @@
 
 static void android_hardware_Camera_stopPreview(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
+    LOGV("stopPreview");
+    sp<Camera> c = get_native_camera(env, thiz, NULL);
+    if (c == 0) return;
 
     c->stopPreview();
 }
 
 static bool android_hardware_Camera_previewEnabled(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return false;
+    LOGV("previewEnabled");
+    sp<Camera> c = get_native_camera(env, thiz, NULL);
+    if (c == 0) return false;
 
     return c->previewEnabled();
 }
 
 static void android_hardware_Camera_setHasPreviewCallback(JNIEnv *env, jobject thiz, jboolean installed, jboolean oneshot)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
-
     // Important: Only install preview_callback if the Java code has called
     // setPreviewCallback() with a non-null value, otherwise we'd pay to memcpy
     // each preview frame for nothing.
-    callback_cookie *cookie = (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
+    camera_context_t* context;
+    sp<Camera> camera = get_native_camera(env, thiz, &context);
+    if (camera == 0) return;
 
     int callback_flag;
     if (installed) {
@@ -257,29 +278,31 @@
     } else {
         callback_flag = FRAME_CALLBACK_FLAG_NOOP;
     }
-    c->setPreviewCallback(installed ? preview_callback : NULL, cookie, callback_flag);
+    camera->setPreviewCallback(installed ? preview_callback : NULL, context, callback_flag);
 }
 
 static void autofocus_callback_impl(bool success, void *cookie)
 {
+    LOGV("autoFocusCallback");
+    camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
+
     JNIEnv *env = AndroidRuntime::getJNIEnv();
     if (env == NULL) {
         LOGE("autofocus_callback on dead VM");
         return;
     }
-    callback_cookie *c = (callback_cookie *)cookie;
-    env->CallStaticVoidMethod(sCameraClass, fields.post_event,
-                              c->camera_ref, kAutoFocusCallback,
-                              success, 0, NULL);
+    env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
+            context->mCameraJObjectWeak, kAutoFocusCallback, success, 0, NULL);
 }
 
 static void android_hardware_Camera_autoFocus(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
-    callback_cookie *cookie = (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
-    c->setAutoFocusCallback(autofocus_callback_impl, cookie);
+    LOGV("autoFocus");
+    camera_context_t* context;
+    sp<Camera> c = get_native_camera(env, thiz, &context);
+    if (c == 0) return;
+
+    c->setAutoFocusCallback(autofocus_callback_impl, context);
     if (c->autoFocus() != NO_ERROR) {
         jniThrowException(env, "java/io/IOException", "autoFocus failed");
     }
@@ -287,18 +310,20 @@
 
 static void jpeg_callback(const sp<IMemory>& mem, void *cookie)
 {
+    LOGV("jpegCallback");
+    camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
+
     JNIEnv *env = AndroidRuntime::getJNIEnv();
     if (env == NULL) {
         LOGE("jpeg`_callback on dead VM");
         return;
     }
-    callback_cookie *c = (callback_cookie *)cookie;
     int arg1 = 0, arg2 = 0;
     jobject obj = NULL;
 
     if (mem == NULL) {
-        env->CallStaticVoidMethod(sCameraClass, fields.post_event,
-                                  c->camera_ref, kJpegCallback, arg1, arg2, NULL);
+        env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
+                                  context->mCameraJObjectWeak, kJpegCallback, arg1, arg2, NULL);
         return;
     }
     ssize_t offset;
@@ -327,48 +352,51 @@
 
     obj = array;
 
-    env->CallStaticVoidMethod(sCameraClass, fields.post_event,
-                              c->camera_ref, kJpegCallback, arg1, arg2, obj);
+    env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
+                              context->mCameraJObjectWeak, kJpegCallback, arg1, arg2, obj);
     env->DeleteLocalRef(array);
 }
 
 static void shutter_callback_impl(void *cookie)
 {
+    LOGV("shutterCallback");
+    camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
+
     JNIEnv *env = AndroidRuntime::getJNIEnv();
     if (env == NULL) {
         LOGE("shutter_callback on dead VM");
         return;
     }
-    callback_cookie *c = (callback_cookie *)cookie;
-    env->CallStaticVoidMethod(sCameraClass, fields.post_event,
-                              c->camera_ref, kShutterCallback, 0, 0, NULL);
+    env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
+                              context->mCameraJObjectWeak, kShutterCallback, 0, 0, NULL);
 }
 
 static void raw_callback(const sp<IMemory>& mem __attribute__((unused)),
                          void *cookie)
 {
+    LOGV("rawCallback");
+    camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
+
     JNIEnv *env = AndroidRuntime::getJNIEnv();
     if (env == NULL) {
         LOGE("raw_callback on dead VM");
         return;
     }
-    callback_cookie *c = (callback_cookie *)cookie;
-    env->CallStaticVoidMethod(sCameraClass, fields.post_event,
-                              c->camera_ref, kRawCallback, 0, 0, NULL);
+    env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
+                              context->mCameraJObjectWeak, kRawCallback, 0, 0, NULL);
 }
 
 static void android_hardware_Camera_takePicture(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
+    LOGV("takePicture");
+    camera_context_t* context;
+    sp<Camera> camera = get_native_camera(env, thiz, &context);
+    if (camera == 0) return;
 
-    callback_cookie *cookie =
-        (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
-    c->setShutterCallback(shutter_callback_impl, cookie);
-    c->setRawCallback(raw_callback, cookie);
-    c->setJpegCallback(jpeg_callback, cookie);
-    if (c->takePicture() != NO_ERROR) {
+    camera->setShutterCallback(shutter_callback_impl, context);
+    camera->setRawCallback(raw_callback, context);
+    camera->setJpegCallback(jpeg_callback, context);
+    if (camera->takePicture() != NO_ERROR) {
         jniThrowException(env, "java/io/IOException", "takePicture failed");
         return;
     }
@@ -378,9 +406,9 @@
 
 static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jstring params)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
+    LOGV("setParameters");
+    sp<Camera> camera = get_native_camera(env, thiz, NULL);
+    if (camera == 0) return;
 
     const jchar* str = env->GetStringCritical(params, 0);
     String8 params8;
@@ -388,7 +416,7 @@
         params8 = String8(str, env->GetStringLength(params));
         env->ReleaseStringCritical(params, str);
     }
-    if (c->setParameters(params8) != NO_ERROR) {
+    if (camera->setParameters(params8) != NO_ERROR) {
         jniThrowException(env, "java/lang/IllegalArgumentException", "setParameters failed");
         return;
     }
@@ -396,20 +424,20 @@
 
 static jstring android_hardware_Camera_getParameters(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return 0;
+    LOGV("getParameters");
+    sp<Camera> camera = get_native_camera(env, thiz, NULL);
+    if (camera == 0) return 0;
 
-    return env->NewStringUTF(c->getParameters().string());
+    return env->NewStringUTF(camera->getParameters().string());
 }
 
 static void android_hardware_Camera_reconnect(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return;
+    LOGV("reconnect");
+    sp<Camera> camera = get_native_camera(env, thiz, NULL);
+    if (camera == 0) return;
 
-    if (c->reconnect() != NO_ERROR) {
+    if (camera->reconnect() != NO_ERROR) {
         jniThrowException(env, "java/io/IOException", "reconnect failed");
         return;
     }
@@ -417,18 +445,18 @@
 
 static jint android_hardware_Camera_lock(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return INVALID_OPERATION;
-    return (jint) c->lock();
+    LOGV("lock");
+    sp<Camera> camera = get_native_camera(env, thiz, NULL);
+    if (camera == 0) return INVALID_OPERATION;
+    return (jint) camera->lock();
 }
 
 static jint android_hardware_Camera_unlock(JNIEnv *env, jobject thiz)
 {
-    sp<Camera> c = get_native_camera(env, thiz);
-    if (c == 0)
-        return INVALID_OPERATION;
-    return (jint) c->unlock();
+    LOGV("unlock");
+    sp<Camera> camera = get_native_camera(env, thiz, NULL);
+    if (camera == 0) return INVALID_OPERATION;
+    return (jint) camera->unlock();
 }
 
 //-------------------------------------------------
@@ -512,7 +540,6 @@
 {
     field fields_to_find[] = {
         { "android/hardware/Camera", "mNativeContext",   "I", &fields.context },
-        { "android/hardware/Camera", "mListenerContext", "I", &fields.listener_context },
         { "android/view/Surface",    "mSurface",         "I", &fields.surface }
     };
 
@@ -520,7 +547,6 @@
         return -1;
 
     jclass clazz = env->FindClass("android/hardware/Camera");
-    sCameraClass = (jclass)env->NewGlobalRef(clazz);
     fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative",
                                                "(Ljava/lang/Object;IIILjava/lang/Object;)V");
     if (fields.post_event == NULL) {
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index d9effee..f625ffb 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -688,15 +688,33 @@
 
 
 // ----------------------------------------------------------------------------
-static jint android_media_AudioTrack_get_output_sample_rate(JNIEnv *env,  jobject thiz) {
-    int afSamplingRate;    
-    AudioTrackJniStorage* lpJniStorage = (AudioTrackJniStorage *)env->GetIntField(
-        thiz, javaAudioTrackFields.jniData);
-    if (lpJniStorage == NULL) {
-        return DEFAULT_OUTPUT_SAMPLE_RATE;
+static jint android_media_AudioTrack_get_output_sample_rate(JNIEnv *env,  jobject thiz,
+        jint javaStreamType) {
+    int afSamplingRate;
+    // convert the stream type from Java to native value
+    // FIXME: code duplication with android_media_AudioTrack_native_setup()
+    AudioSystem::stream_type nativeStreamType;
+    if (javaStreamType == javaAudioTrackFields.STREAM_VOICE_CALL) {
+        nativeStreamType = AudioSystem::VOICE_CALL;
+    } else if (javaStreamType == javaAudioTrackFields.STREAM_SYSTEM) {
+        nativeStreamType = AudioSystem::SYSTEM;
+    } else if (javaStreamType == javaAudioTrackFields.STREAM_RING) {
+        nativeStreamType = AudioSystem::RING;
+    } else if (javaStreamType == javaAudioTrackFields.STREAM_MUSIC) {
+        nativeStreamType = AudioSystem::MUSIC;
+    } else if (javaStreamType == javaAudioTrackFields.STREAM_ALARM) {
+        nativeStreamType = AudioSystem::ALARM;
+    } else if (javaStreamType == javaAudioTrackFields.STREAM_NOTIFICATION) {
+        nativeStreamType = AudioSystem::NOTIFICATION;
+    } else if (javaStreamType == javaAudioTrackFields.STREAM_BLUETOOTH_SCO) {
+        nativeStreamType = AudioSystem::BLUETOOTH_SCO;
+    } else {
+        nativeStreamType = AudioSystem::DEFAULT;
     }
 
-    if (AudioSystem::getOutputSamplingRate(&afSamplingRate, lpJniStorage->mStreamType) != NO_ERROR) {
+    if (AudioSystem::getOutputSamplingRate(&afSamplingRate, nativeStreamType) != NO_ERROR) {
+        LOGE("AudioSystem::getOutputSamplingRate() for stream type %d failed in AudioTrack JNI",
+            nativeStreamType);
         return DEFAULT_OUTPUT_SAMPLE_RATE;
     } else {
         return afSamplingRate;
@@ -766,7 +784,7 @@
     {"native_set_loop",      "(III)I",   (void *)android_media_AudioTrack_set_loop},
     {"native_reload_static", "()I",      (void *)android_media_AudioTrack_reload},
     {"native_get_output_sample_rate",
-                             "()I",      (void *)android_media_AudioTrack_get_output_sample_rate},
+                             "(I)I",      (void *)android_media_AudioTrack_get_output_sample_rate},
     {"native_get_min_buff_size",
                              "(III)I",   (void *)android_media_AudioTrack_get_min_buff_size},
 };
diff --git a/core/jni/android_os_ParcelFileDescriptor.cpp b/core/jni/android_os_ParcelFileDescriptor.cpp
index 465e233..1429f58 100644
--- a/core/jni/android_os_ParcelFileDescriptor.cpp
+++ b/core/jni/android_os_ParcelFileDescriptor.cpp
@@ -60,9 +60,37 @@
     return fileDescriptorClone;
 }
 
+static jlong android_os_ParcelFileDescriptor_getStatSize(JNIEnv* env,
+    jobject clazz)
+{
+    jint fd = env->GetIntField(clazz, gFileDescriptorOffsets.mDescriptor);
+    
+    struct stat st;
+    if (fstat(fd, &st) != 0) {
+        return -1;
+    }
+    
+    if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) {
+        return st.st_size;
+    }
+    
+    return -1;
+}
+
+static jlong android_os_ParcelFileDescriptor_seekTo(JNIEnv* env,
+    jobject clazz, jlong pos)
+{
+    jint fd = env->GetIntField(clazz, gFileDescriptorOffsets.mDescriptor);
+    return lseek(fd, pos, SEEK_SET);
+}
+
 static const JNINativeMethod gParcelFileDescriptorMethods[] = {
     {"getFileDescriptorFromSocket", "(Ljava/net/Socket;)Ljava/io/FileDescriptor;",
-        (void*)android_os_ParcelFileDescriptor_getFileDescriptorFromSocket}
+        (void*)android_os_ParcelFileDescriptor_getFileDescriptorFromSocket},
+    {"getStatSize", "()J",
+        (void*)android_os_ParcelFileDescriptor_getStatSize},
+    {"seekTo", "(J)J",
+        (void*)android_os_ParcelFileDescriptor_seekTo}
 };
 
 const char* const kParcelFileDescriptorPathName = "android/os/ParcelFileDescriptor";
diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp
index 9100e81..adfd912 100644
--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -721,6 +721,7 @@
 #define BOND_RESULT_AUTH_REJECTED 2
 #define BOND_RESULT_AUTH_CANCELED 3
 #define BOND_RESULT_REMOTE_DEVICE_DOWN 4
+#define BOND_RESULT_DISCOVERY_IN_PROGRESS 5
 void onCreateBondingResult(DBusMessage *msg, void *user) {
     LOGV(__FUNCTION__);
 
@@ -755,10 +756,14 @@
             // already bonded
             LOGV("... error = %s (%s)\n", err.name, err.message);
             result = BOND_RESULT_SUCCESS;
-        } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.InProgress")) {
-            // don't make the java callback
+        } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.InProgress") &&
+                   !strcmp(err.message, "Bonding in progress")) {
             LOGV("... error = %s (%s)\n", err.name, err.message);
             goto done;
+        } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.InProgress") &&
+                   !strcmp(err.message, "Discover in progress")) {
+            LOGV("... error = %s (%s)\n", err.name, err.message);
+            result = BOND_RESULT_DISCOVERY_IN_PROGRESS;
         } else {
             LOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message);
             result = BOND_RESULT_ERROR;
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 24404a87..7325432 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -1223,6 +1223,7 @@
 
     if (mode&0x08000000) flags |= O_CREAT;
     if (mode&0x04000000) flags |= O_TRUNC;
+    if (mode&0x02000000) flags |= O_APPEND;
 
     int realMode = S_IRWXU|S_IRWXG;
     if (mode&0x00000001) realMode |= S_IROTH;
diff --git a/core/jni/server/com_android_server_AlarmManagerService.cpp b/core/jni/server/com_android_server_AlarmManagerService.cpp
index 0f37921..1d66fb1 100644
--- a/core/jni/server/com_android_server_AlarmManagerService.cpp
+++ b/core/jni/server/com_android_server_AlarmManagerService.cpp
@@ -52,12 +52,17 @@
     tz.tz_minuteswest = minswest;
     tz.tz_dsttime = 0;
 
-    int result = ioctl(fd, ANDROID_ALARM_SET_TIMEZONE, &tz);
+    int result = settimeofday(NULL, &tz);
     if (result < 0) {
         LOGE("Unable to set kernel timezone to %d: %s\n", minswest, strerror(errno));
         return -1;
+    } else {
+        LOGD("Kernel timezone updated to %d minutes west of GMT\n", minswest);
     }
+
     return 0;
+#else
+    return -ENOSYS;
 #endif
 }
 
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 2c3b590..e9db5f0 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -704,7 +704,7 @@
     <permission android:name="android.permission.STATUS_BAR"
         android:label="@string/permlab_statusBar"
         android:description="@string/permdesc_statusBar"
-        android:protectionLevel="signature" />
+        android:protectionLevel="signatureOrSystem" />
 
     <!-- Allows an application to force any currently running process to be
          in the foreground. -->
diff --git a/core/res/res/drawable-land/title_bar.9.png b/core/res/res/drawable-land/title_bar.9.png
deleted file mode 100644
index a48d967..0000000
--- a/core/res/res/drawable-land/title_bar.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/activity_title_bar.9.png b/core/res/res/drawable/activity_title_bar.9.png
new file mode 100644
index 0000000..bd0680d
--- /dev/null
+++ b/core/res/res/drawable/activity_title_bar.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_check_off.png b/core/res/res/drawable/btn_check_off.png
index 3a137d9..56d3861 100644
--- a/core/res/res/drawable/btn_check_off.png
+++ b/core/res/res/drawable/btn_check_off.png
Binary files differ
diff --git a/core/res/res/drawable/btn_check_off_disable_focused.png b/core/res/res/drawable/btn_check_off_disable_focused.png
index 47d225d..0837bbd 100644
--- a/core/res/res/drawable/btn_check_off_disable_focused.png
+++ b/core/res/res/drawable/btn_check_off_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable/btn_check_off_selected.png b/core/res/res/drawable/btn_check_off_selected.png
index 6854550..20842d4 100644
--- a/core/res/res/drawable/btn_check_off_selected.png
+++ b/core/res/res/drawable/btn_check_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_check_on_disable_focused.png b/core/res/res/drawable/btn_check_on_disable_focused.png
index 4b6064d..8a73b33 100644
--- a/core/res/res/drawable/btn_check_on_disable_focused.png
+++ b/core/res/res/drawable/btn_check_on_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_normal.9.png b/core/res/res/drawable/btn_default_normal.9.png
index a337eb5..a2d5ccd 100644
--- a/core/res/res/drawable/btn_default_normal.9.png
+++ b/core/res/res/drawable/btn_default_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_normal_disable.9.png b/core/res/res/drawable/btn_default_normal_disable.9.png
index e414d76..edd3a3e 100644
--- a/core/res/res/drawable/btn_default_normal_disable.9.png
+++ b/core/res/res/drawable/btn_default_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_normal_disable_focused.9.png b/core/res/res/drawable/btn_default_normal_disable_focused.9.png
index b2d45e5..f506179 100644
--- a/core/res/res/drawable/btn_default_normal_disable_focused.9.png
+++ b/core/res/res/drawable/btn_default_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_pressed.9.png b/core/res/res/drawable/btn_default_pressed.9.png
index 92d5ab5..033bf89 100644
--- a/core/res/res/drawable/btn_default_pressed.9.png
+++ b/core/res/res/drawable/btn_default_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_selected.9.png b/core/res/res/drawable/btn_default_selected.9.png
index 5405fa0..1e900bf 100644
--- a/core/res/res/drawable/btn_default_selected.9.png
+++ b/core/res/res/drawable/btn_default_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_normal.9.png b/core/res/res/drawable/btn_default_small_normal.9.png
index 963ecb3..bcedd5f 100644
--- a/core/res/res/drawable/btn_default_small_normal.9.png
+++ b/core/res/res/drawable/btn_default_small_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_normal_disable.9.png b/core/res/res/drawable/btn_default_small_normal_disable.9.png
index 15bb123..ac6260f 100644
--- a/core/res/res/drawable/btn_default_small_normal_disable.9.png
+++ b/core/res/res/drawable/btn_default_small_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png
index a343515..4ee1b3f 100644
--- a/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png
+++ b/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_pressed.9.png b/core/res/res/drawable/btn_default_small_pressed.9.png
index 8476e12..25e38f4 100644
--- a/core/res/res/drawable/btn_default_small_pressed.9.png
+++ b/core/res/res/drawable/btn_default_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_selected.9.png b/core/res/res/drawable/btn_default_small_selected.9.png
index 8ab8d63..cc209c6 100644
--- a/core/res/res/drawable/btn_default_small_selected.9.png
+++ b/core/res/res/drawable/btn_default_small_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_radio_on.png b/core/res/res/drawable/btn_radio_on.png
index 7bf696d..25a3ccc 100644
--- a/core/res/res/drawable/btn_radio_on.png
+++ b/core/res/res/drawable/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_off_normal.png b/core/res/res/drawable/btn_rating_star_off_normal.png
index bb15404..a99441d 100644
--- a/core/res/res/drawable/btn_rating_star_off_normal.png
+++ b/core/res/res/drawable/btn_rating_star_off_normal.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_off_pressed.png b/core/res/res/drawable/btn_rating_star_off_pressed.png
index 45482b9..f47a4541 100644
--- a/core/res/res/drawable/btn_rating_star_off_pressed.png
+++ b/core/res/res/drawable/btn_rating_star_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_off_selected.png b/core/res/res/drawable/btn_rating_star_off_selected.png
index 3fbe92a..5f71e08 100644
--- a/core/res/res/drawable/btn_rating_star_off_selected.png
+++ b/core/res/res/drawable/btn_rating_star_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_on_normal.png b/core/res/res/drawable/btn_rating_star_on_normal.png
index 1c329a1..b7825d3 100644
--- a/core/res/res/drawable/btn_rating_star_on_normal.png
+++ b/core/res/res/drawable/btn_rating_star_on_normal.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_on_pressed.png b/core/res/res/drawable/btn_rating_star_on_pressed.png
index 2a965a7..4052445 100644
--- a/core/res/res/drawable/btn_rating_star_on_pressed.png
+++ b/core/res/res/drawable/btn_rating_star_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_on_selected.png b/core/res/res/drawable/btn_rating_star_on_selected.png
index 2c1e207..5d139b6 100644
--- a/core/res/res/drawable/btn_rating_star_on_selected.png
+++ b/core/res/res/drawable/btn_rating_star_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_off.png b/core/res/res/drawable/btn_star_big_off.png
index 21ba557..7e9342b 100755
--- a/core/res/res/drawable/btn_star_big_off.png
+++ b/core/res/res/drawable/btn_star_big_off.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_off_pressed.png b/core/res/res/drawable/btn_star_big_off_pressed.png
index 2c704ee..f1b8912 100755
--- a/core/res/res/drawable/btn_star_big_off_pressed.png
+++ b/core/res/res/drawable/btn_star_big_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_off_selected.png b/core/res/res/drawable/btn_star_big_off_selected.png
index 101357d..0be64c4 100755
--- a/core/res/res/drawable/btn_star_big_off_selected.png
+++ b/core/res/res/drawable/btn_star_big_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_on.png b/core/res/res/drawable/btn_star_big_on.png
index 9c2f7d2..a9bdb05 100755
--- a/core/res/res/drawable/btn_star_big_on.png
+++ b/core/res/res/drawable/btn_star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_on_pressed.png b/core/res/res/drawable/btn_star_big_on_pressed.png
index 8ac4bab..159a84b 100755
--- a/core/res/res/drawable/btn_star_big_on_pressed.png
+++ b/core/res/res/drawable/btn_star_big_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_on_selected.png b/core/res/res/drawable/btn_star_big_on_selected.png
index d453eab..0592d51 100755
--- a/core/res/res/drawable/btn_star_big_on_selected.png
+++ b/core/res/res/drawable/btn_star_big_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_airplane_mode.png b/core/res/res/drawable/ic_lock_airplane_mode.png
new file mode 100755
index 0000000..caafcb2
--- /dev/null
+++ b/core/res/res/drawable/ic_lock_airplane_mode.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_airplane_mode_off.png b/core/res/res/drawable/ic_lock_airplane_mode_off.png
new file mode 100755
index 0000000..cb2cbdf
--- /dev/null
+++ b/core/res/res/drawable/ic_lock_airplane_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_power_off.png b/core/res/res/drawable/ic_lock_power_off.png
index 14c002e..4405b43 100644
--- a/core/res/res/drawable/ic_lock_power_off.png
+++ b/core/res/res/drawable/ic_lock_power_off.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_silent_mode.png b/core/res/res/drawable/ic_lock_silent_mode.png
index c89291a..439a6f5 100644
--- a/core/res/res/drawable/ic_lock_silent_mode.png
+++ b/core/res/res/drawable/ic_lock_silent_mode.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_silent_mode_off.png b/core/res/res/drawable/ic_lock_silent_mode_off.png
index 4748b9e..fc7e960 100644
--- a/core/res/res/drawable/ic_lock_silent_mode_off.png
+++ b/core/res/res/drawable/ic_lock_silent_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable/keyboard_accessory_bg_landscape.9.png b/core/res/res/drawable/keyboard_accessory_bg_landscape.9.png
new file mode 100644
index 0000000..8f828f6
--- /dev/null
+++ b/core/res/res/drawable/keyboard_accessory_bg_landscape.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_default.9.png b/core/res/res/drawable/textfield_default.9.png
index 12cdd4c..cc78e6c 100644
--- a/core/res/res/drawable/textfield_default.9.png
+++ b/core/res/res/drawable/textfield_default.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_disabled.9.png b/core/res/res/drawable/textfield_disabled.9.png
index ad8ba70..9c77149 100644
--- a/core/res/res/drawable/textfield_disabled.9.png
+++ b/core/res/res/drawable/textfield_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_disabled_selected.9.png b/core/res/res/drawable/textfield_disabled_selected.9.png
index 04b6b6b..6d47708 100644
--- a/core/res/res/drawable/textfield_disabled_selected.9.png
+++ b/core/res/res/drawable/textfield_disabled_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_pressed.9.png b/core/res/res/drawable/textfield_pressed.9.png
index bcc0152..c909ad2 100644
--- a/core/res/res/drawable/textfield_pressed.9.png
+++ b/core/res/res/drawable/textfield_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_selected.9.png b/core/res/res/drawable/textfield_selected.9.png
index 47115b6..0c1b446 100644
--- a/core/res/res/drawable/textfield_selected.9.png
+++ b/core/res/res/drawable/textfield_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_disabled.9.png b/core/res/res/drawable/timepicker_down_disabled.9.png
index af72d22..7d8e0b9 100755
--- a/core/res/res/drawable/timepicker_down_disabled.9.png
+++ b/core/res/res/drawable/timepicker_down_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_disabled_focused.9.png b/core/res/res/drawable/timepicker_down_disabled_focused.9.png
index 2d80424..6f2373e 100755
--- a/core/res/res/drawable/timepicker_down_disabled_focused.9.png
+++ b/core/res/res/drawable/timepicker_down_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_normal.9.png b/core/res/res/drawable/timepicker_down_normal.9.png
index c427fc3..a946355 100755
--- a/core/res/res/drawable/timepicker_down_normal.9.png
+++ b/core/res/res/drawable/timepicker_down_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_pressed.9.png b/core/res/res/drawable/timepicker_down_pressed.9.png
index ac6ac53..fb4d817 100755
--- a/core/res/res/drawable/timepicker_down_pressed.9.png
+++ b/core/res/res/drawable/timepicker_down_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_selected.9.png b/core/res/res/drawable/timepicker_down_selected.9.png
index f710b57..1db8bc1 100755
--- a/core/res/res/drawable/timepicker_down_selected.9.png
+++ b/core/res/res/drawable/timepicker_down_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_disabled.9.png b/core/res/res/drawable/timepicker_input_disabled.9.png
index 97da87a..f73658e 100755
--- a/core/res/res/drawable/timepicker_input_disabled.9.png
+++ b/core/res/res/drawable/timepicker_input_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_normal.9.png b/core/res/res/drawable/timepicker_input_normal.9.png
index eb101c5..8032ada 100755
--- a/core/res/res/drawable/timepicker_input_normal.9.png
+++ b/core/res/res/drawable/timepicker_input_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_pressed.9.png b/core/res/res/drawable/timepicker_input_pressed.9.png
index c83b1eb..30d8d5f 100755
--- a/core/res/res/drawable/timepicker_input_pressed.9.png
+++ b/core/res/res/drawable/timepicker_input_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_selected.9.png b/core/res/res/drawable/timepicker_input_selected.9.png
index e152848..874f18f 100755
--- a/core/res/res/drawable/timepicker_input_selected.9.png
+++ b/core/res/res/drawable/timepicker_input_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_disabled.9.png b/core/res/res/drawable/timepicker_up_disabled.9.png
index 1814bb4..93d0db4 100755
--- a/core/res/res/drawable/timepicker_up_disabled.9.png
+++ b/core/res/res/drawable/timepicker_up_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_disabled_focused.9.png b/core/res/res/drawable/timepicker_up_disabled_focused.9.png
index 9ad5b85..b5bf68d 100755
--- a/core/res/res/drawable/timepicker_up_disabled_focused.9.png
+++ b/core/res/res/drawable/timepicker_up_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_normal.9.png b/core/res/res/drawable/timepicker_up_normal.9.png
index 35fc221..978251d 100755
--- a/core/res/res/drawable/timepicker_up_normal.9.png
+++ b/core/res/res/drawable/timepicker_up_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_pressed.9.png b/core/res/res/drawable/timepicker_up_pressed.9.png
index c910777..924b03c 100755
--- a/core/res/res/drawable/timepicker_up_pressed.9.png
+++ b/core/res/res/drawable/timepicker_up_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_selected.9.png b/core/res/res/drawable/timepicker_up_selected.9.png
index 549a7e5..5c94d0d 100755
--- a/core/res/res/drawable/timepicker_up_selected.9.png
+++ b/core/res/res/drawable/timepicker_up_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/title_bar.9.png b/core/res/res/drawable/title_bar.9.png
deleted file mode 100644
index 482d82e..0000000
--- a/core/res/res/drawable/title_bar.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/title_bar.xml b/core/res/res/drawable/title_bar.xml
new file mode 100644
index 0000000..24402dc
--- /dev/null
+++ b/core/res/res/drawable/title_bar.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/activity_title_bar"
+    android:dither="true"
+/>
diff --git a/core/res/res/drawable/zoom_ring_overview_tab.9.png b/core/res/res/drawable/zoom_ring_overview_tab.9.png
index 4056f73..d2658d8 100644
--- a/core/res/res/drawable/zoom_ring_overview_tab.9.png
+++ b/core/res/res/drawable/zoom_ring_overview_tab.9.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_minus.png b/core/res/res/drawable/zoom_ring_thumb_minus.png
new file mode 100644
index 0000000..faed674
--- /dev/null
+++ b/core/res/res/drawable/zoom_ring_thumb_minus.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png b/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png
index c7b87ef..abe1b8a 100644
--- a/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png
+++ b/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_plus.png b/core/res/res/drawable/zoom_ring_thumb_plus.png
new file mode 100644
index 0000000..ba7aff2
--- /dev/null
+++ b/core/res/res/drawable/zoom_ring_thumb_plus.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png b/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png
index 0591d39..d01ccb4 100644
--- a/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png
+++ b/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_track.png b/core/res/res/drawable/zoom_ring_track.png
index 60a15b7..1d5a44c 100644
--- a/core/res/res/drawable/zoom_ring_track.png
+++ b/core/res/res/drawable/zoom_ring_track.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_track_absolute.png b/core/res/res/drawable/zoom_ring_track_absolute.png
index 0195b9e..2b87699 100644
--- a/core/res/res/drawable/zoom_ring_track_absolute.png
+++ b/core/res/res/drawable/zoom_ring_track_absolute.png
Binary files differ
diff --git a/core/res/res/layout/alert_dialog_simple_text.xml b/core/res/res/layout/alert_dialog_simple_text.xml
new file mode 100644
index 0000000..ab82be7
--- /dev/null
+++ b/core/res/res/layout/alert_dialog_simple_text.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- This layout can be set as the AlertDialog's view to display vertically centered text. -->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:textAppearance="?android:attr/textAppearanceMedium"
+    android:padding="10dip"
+    />
+
+
diff --git a/core/res/res/layout/global_actions_item.xml b/core/res/res/layout/global_actions_item.xml
index 4383127..63bb0f4 100644
--- a/core/res/res/layout/global_actions_item.xml
+++ b/core/res/res/layout/global_actions_item.xml
@@ -14,38 +14,48 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:paddingTop="10dip"
-    android:paddingBottom="10dip"
-    android:minHeight="?android:attr/listPreferredItemHeight"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="?android:attr/listPreferredItemHeight"
+
+    android:paddingLeft="11dip"
+    android:paddingTop="6dip"
+    android:paddingBottom="6dip"
     >
 
     <ImageView android:id="@+id/icon"
         android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentBottom="true"
+        android:layout_marginRight="9dip"
+            />
+
+
+    <TextView android:id="@+id/status"
+        android:layout_width="fill_parent"
+        android:layout_height="26dip"
+
+        android:layout_toRightOf="@id/icon"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentRight="true"
+
+        android:textAppearance="?android:attr/textAppearanceSmallInverse"
+        />
+
+
+    <TextView android:id="@+id/message"
+        android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:layout_marginRight="6dip"
-        android:layout_gravity="center_vertical"
-            />
 
-    <LinearLayout android:orientation="vertical"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical">
+        android:layout_toRightOf="@id/icon"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentTop="true"
+        android:layout_above="@id/status"
+        android:layout_alignWithParentIfMissing="true"
+        android:gravity="center_vertical"
+        android:textAppearance="?android:attr/textAppearanceLargeInverse"
+        />
 
-        <TextView android:id="@+id/message"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceLargeInverse"
-            />
 
-        <TextView android:id="@+id/status"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmallInverse" 
-            />
-    </LinearLayout>
-
-</LinearLayout>
+</RelativeLayout>
diff --git a/core/res/res/layout/input_method_extract_view.xml b/core/res/res/layout/input_method_extract_view.xml
index 3f68bd3..13b619a 100644
--- a/core/res/res/layout/input_method_extract_view.xml
+++ b/core/res/res/layout/input_method_extract_view.xml
@@ -18,13 +18,38 @@
 */
 -->
 
-<android.inputmethodservice.ExtractEditText
+<LinearLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/inputExtractEditText"
-        android:scrollbars="vertical"
-        android:gravity="top"
-        android:minLines="1"
-        android:inputType="text"
-        android:background="@android:drawable/extract_edit_text"
-    >
-</android.inputmethodservice.ExtractEditText>
+        android:orientation="horizontal">
+        
+    <android.inputmethodservice.ExtractEditText
+            android:id="@+id/inputExtractEditText"
+            android:layout_width="0px"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:scrollbars="vertical"
+            android:gravity="top"
+            android:minLines="1"
+            android:inputType="text"
+            android:background="@android:drawable/extract_edit_text"
+        >
+    </android.inputmethodservice.ExtractEditText>
+
+    <FrameLayout
+            android:id="@+id/inputExtractAccessories"
+            android:layout_width="wrap_content"
+            android:layout_height="fill_parent"
+            android:paddingLeft="10dip"
+            android:paddingRight="10dip"
+            android:background="@android:drawable/keyboard_accessory_bg_landscape"
+        >
+        
+        <Button android:id="@+id/inputExtractAction"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            />
+            
+    </FrameLayout>
+    
+</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_glogin_unlock.xml b/core/res/res/layout/keyguard_screen_glogin_unlock.xml
index beaa926..b78bb94 100644
--- a/core/res/res/layout/keyguard_screen_glogin_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_glogin_unlock.xml
@@ -20,7 +20,7 @@
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical"
-    android:background="#FF000000"
+    android:background="#A0000000"
         >
     <ScrollView
         android:layout_width="fill_parent"
diff --git a/core/res/res/layout/keyguard_screen_lock.xml b/core/res/res/layout/keyguard_screen_lock.xml
index 907859a..fbbc1a4 100644
--- a/core/res/res/layout/keyguard_screen_lock.xml
+++ b/core/res/res/layout/keyguard_screen_lock.xml
@@ -24,7 +24,6 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:gravity="bottom"
-    android:background="#FF000000"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
         >
@@ -37,6 +36,8 @@
         android:layout_marginBottom="15dip"
         android:layout_marginLeft="15dip"
         android:layout_marginRight="15dip"
+	android:paddingTop="20dip"
+	android:paddingBottom="20dip"
         android:background="@android:drawable/popup_full_dark"
         >
 
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml b/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
index 00a6487..19305c5 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
@@ -20,7 +20,7 @@
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
-    android:background="#FF000000"
+    android:background="#A0000000"
         >
 
     <!-- displays dots as user enters pin -->
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
index d47ca5f..6a05488 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
@@ -20,7 +20,7 @@
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
-    android:background="#FF000000"
+    android:background="#A0000000"
         >
 
     <!-- header text ('Enter Pin Code') -->
diff --git a/core/res/res/layout/keyguard_screen_unlock_landscape.xml b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
index 175a3a5..ba1640a 100644
--- a/core/res/res/layout/keyguard_screen_unlock_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
@@ -23,9 +23,9 @@
 
 <com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal"
-    android:background="#FF000000"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
+    android:background="#A0000000"
         >
 
     <!-- left side: instructions and emergency call button -->
@@ -114,11 +114,11 @@
         </FrameLayout>
     </LinearLayout>
 
-    <View
+    <!--View
          android:background="@android:drawable/code_lock_left"
          android:layout_width="2dip"
-         android:layout_height="fill_parent" />
-    
+         android:layout_height="fill_parent" /-->
+
     <!-- right side: lock pattern -->
     <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
          android:layout_width="wrap_content"
diff --git a/core/res/res/layout/keyguard_screen_unlock_portrait.xml b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
index b591b10..f09c422 100644
--- a/core/res/res/layout/keyguard_screen_unlock_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
@@ -23,9 +23,9 @@
 <com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
-    android:background="#FF000000"
     android:layout_width="wrap_content"
     android:layout_height="fill_parent"
+    android:background="#A0000000"
         >
 
     <!-- lock icon and header message -->
@@ -53,17 +53,18 @@
             android:textSize="18sp"/>
     </LinearLayout>
 
-    <View
+    <!--View
          android:background="@android:drawable/code_lock_top"
          android:layout_width="fill_parent"
-         android:layout_height="2dip" />
+         android:layout_height="2dip" /-->
     <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
          android:layout_width="wrap_content"
-         android:layout_height="wrap_content" />
-    <View
+         android:layout_height="wrap_content"
+         />
+    <!--View
          android:background="@android:drawable/code_lock_bottom"
          android:layout_width="fill_parent"
-         android:layout_height="8dip" />
+         android:layout_height="8dip" /-->
 
     <!-- footer -->
     <FrameLayout
@@ -100,6 +101,10 @@
                 android:layout_width="0dip"
                 android:layout_height="fill_parent"
                 android:layout_weight="1.0"
+                android:layout_marginTop="4dip"
+                android:layout_marginBottom="4dip"
+                android:layout_marginLeft="4dip"
+                android:layout_marginRight="2dip"
                 android:text="@android:string/lockscreen_emergency_call"
                 android:textSize="14sp"
                 android:drawableLeft="@drawable/ic_emergency"
@@ -109,6 +114,10 @@
                 android:layout_width="0dip"
                 android:layout_height="fill_parent"
                 android:layout_weight="1.0"
+                android:layout_marginTop="4dip"
+                android:layout_marginBottom="4dip"
+                android:layout_marginLeft="2dip"
+                android:layout_marginRight="4dip"
                 android:textSize="14sp"
                 android:visibility="invisible"
                 />
diff --git a/core/res/res/layout/search_bar.xml b/core/res/res/layout/search_bar.xml
index 657ee1f..ef347da 100644
--- a/core/res/res/layout/search_bar.xml
+++ b/core/res/res/layout/search_bar.xml
@@ -33,6 +33,7 @@
          shadow, plus the desired padding of "8" against the user-visible (grey)
          pixels, minus "1" to correct for positioning of the edittext & button. -->
     <LinearLayout
+        android:id="@+id/search_plate"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
@@ -77,7 +78,11 @@
                 android:layout_weight="1.0"
                 android:paddingLeft="8dip"
                 android:paddingRight="6dip"
-                android:inputType="text|textAutoComplete" />
+                android:inputType="text|textAutoComplete"
+                android:dropDownWidth="fill_parent"
+                android:dropDownAnchor="@id/search_plate"
+                android:dropDownVerticalOffset="-15dip"
+                />
                 <!-- android:focusableInTouchMode="false" -->
                 <!-- android:singleLine="true" -->
                 <!-- android:selectAllOnFocus="true" -->
diff --git a/core/res/res/layout/select_dialog_item.xml b/core/res/res/layout/select_dialog_item.xml
index 0983b66..f1840ba 100644
--- a/core/res/res/layout/select_dialog_item.xml
+++ b/core/res/res/layout/select_dialog_item.xml
@@ -28,7 +28,8 @@
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
-    android:textAppearance="?android:attr/textAppearanceLargeInverse"
+    android:textAppearance="?android:attr/textAppearanceLarge"
+    android:textColor="@android:color/bright_foreground_light"
     android:gravity="center_vertical"
     android:paddingLeft="14dip"
     android:paddingRight="15dip"
diff --git a/core/res/res/layout/status_bar_latest_event_content.xml b/core/res/res/layout/status_bar_latest_event_content.xml
index fbe4c32..eeb9d9d 100644
--- a/core/res/res/layout/status_bar_latest_event_content.xml
+++ b/core/res/res/layout/status_bar_latest_event_content.xml
@@ -22,6 +22,8 @@
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:singleLine="true"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal"
             android:textStyle="bold"
             android:textSize="18sp"
             android:paddingLeft="4dp"
@@ -38,6 +40,8 @@
             android:layout_weight="1"
             android:textColor="#ff000000"
             android:singleLine="true"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal"
             android:textSize="14sp"
             android:paddingLeft="4dp"
             />
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 672c4b9..13aca371 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"Tichý režim"</string>
     <string name="global_action_silent_mode_on_status">"Zvuk je VYPNUTÝ."</string>
     <string name="global_action_silent_mode_off_status">"Zvuk je zapnutý"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Nouzový režim"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Zpoplatněné služby"</string>
     <string name="permgroupdesc_costMoney">"Umožňuje aplikacím provádět činnosti, které vás mohou stát peníze."</string>
     <string name="permgrouplab_messages">"Vaše zprávy"</string>
@@ -389,9 +397,10 @@
     <string name="lockscreen_emergency_call">"Tísňové volání"</string>
     <string name="lockscreen_pattern_correct">"Správně!"</string>
     <string name="lockscreen_pattern_wrong">"Zkuste to prosím znovu"</string>
-    <string name="lockscreen_plugged_in">"Nabíjení (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Připojte dobíjecí zařízení."</string>
-    <string name="lockscreen_missing_sim_message_short">"Není vložena karta SIM."</string>
+    <string name="lockscreen_missing_sim_message_short">"Není vložena SIM karta."</string>
     <string name="lockscreen_missing_sim_message">"V telefonu není žádná karta SIM."</string>
     <string name="lockscreen_missing_sim_instructions">"Prosím vložte kartu SIM."</string>
     <string name="lockscreen_network_locked_message">"Síť je blokována"</string>
@@ -399,8 +408,8 @@
     <string name="lockscreen_sim_puk_locked_instructions">"Prosím kontaktujte podporu zákazníků."</string>
     <string name="lockscreen_sim_locked_message">"Karta SIM je zablokována."</string>
     <string name="lockscreen_sim_unlock_progress_dialog_message">"Odblokování karty SIM..."</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste použili nesprávné gesto pro odemčení. "\n\n"Opakujte prosím akci za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své gesto odemknutí. Po dalších neúspěšných pokusech (<xliff:g id="NUMBER_1">%d</xliff:g>) budete požádání o odemčení telefonu pomocí přihlášení Google."\n\n" Akci prosím opakujte za několik sekund (<xliff:g id="NUMBER_2">%d</xliff:g>)."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste nakreslili nesprávné bezpečnostní gesto. "\n\n"Opakujte prosím akci za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své bezpečnostní gesto. Po dalších neúspěšných pokusech (<xliff:g id="NUMBER_1">%d</xliff:g>) budete požádáni o odemčení telefonu pomocí přihlášení do účtu Google."\n\n" Akci prosím opakujte za několik sekund (<xliff:g id="NUMBER_2">%d</xliff:g>)."</string>
     <string name="lockscreen_too_many_failed_attempts_countdown">"Sekundy zbývající do dalšího pokusu: <xliff:g id="NUMBER">%d</xliff:g>."</string>
     <string name="lockscreen_forgot_pattern_button_text">"Zapomněli jste gesto?"</string>
     <string name="lockscreen_glogin_too_many_attempts">"Gesta: Příliš mnoho pokusů"</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Vymazat oznámení"</string>
     <string name="status_bar_no_notifications_title">"Žádná oznámení"</string>
     <string name="status_bar_ongoing_events_title">"Probíhající"</string>
     <string name="status_bar_latest_events_title">"Oznámení"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"Nabíjení..."</string>
     <string name="battery_low_title">"Prosím připojte dobíjecí zařízení"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"Poledne"</string>
     <string name="midnight">"půlnoc"</string>
     <string name="Midnight">"Půlnoc"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"neděle"</string>
     <string name="day_of_week_long_monday">"pondělí"</string>
@@ -713,8 +722,8 @@
     <string name="aerr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> byl neočekávaně ukončen. Opakujte prosím akci."</string>
     <string name="anr_title">"Omlouváme se"</string>
     <string name="anr_activity_application">"Činnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (v aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>) neodpovídá."</string>
-    <string name="anr_activity_process">"Činnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (v procesu <xliff:g id="PROCESS">%2$s</xliff:g>) neodpovídá."</string>
-    <string name="anr_application_process">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (v procesu <xliff:g id="PROCESS">%2$s</xliff:g>) neodpovídá."</string>
+    <string name="anr_activity_process">"Služba <xliff:g id="ACTIVITY">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g>) nereaguje."</string>
+    <string name="anr_application_process">"Služba <xliff:g id="APPLICATION">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g>) nereaguje."</string>
     <string name="anr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> neodpovídá."</string>
     <string name="force_close">"Ukončit aplikaci"</string>
     <string name="wait">"Počkat"</string>
@@ -734,11 +743,11 @@
     <string name="ringtone_picker_title">"Vyzváněcí tóny"</string>
     <string name="ringtone_unknown">"Neznámý vyzváněcí tón"</string>
   <plurals name="wifi_available">
-    <item quantity="one">"Je k dispozici síť WiFi."</item>
+    <item quantity="one">"K dispozici je síť WiFi."</item>
     <item quantity="other">"Jsou k dispozici sítě WiFi."</item>
   </plurals>
   <plurals name="wifi_available_detailed">
-    <item quantity="one">"Je k dispozici veřejná síť WiFi"</item>
+    <item quantity="one">"K dispozici je veřejná síť WiFi"</item>
     <item quantity="other">"Jsou k dispozici veřejné sítě WiFi"</item>
   </plurals>
     <string name="select_character">"Vkládání znaků"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"Opravdu chcete kartu SD naformátovat? Všechna data na kartě budou ztracena."</string>
     <string name="extmedia_format_button_format">"Formátovat"</string>
     <string name="select_input_method">"Výběr metody zadávání dat"</string>
-    <string name="fast_scroll_alphabet">"AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
+    <string name="fast_scroll_alphabet">" AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
     <string name="candidates_style"><u>"kandidáti"</u></string>
     <string name="ext_media_checking_notification_title">"Příprava karty SD"</string>
     <string name="ext_media_checking_notification_message">"Kontrola chyb"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"Nebyly nalezeny žádné odpovídající aktivity."</string>
     <string name="permlab_pkgUsageStats">"aktualizovat statistiku použití součástí"</string>
     <string name="permdesc_pkgUsageStats">"Umožňuje změnu shromážděných statistických údajů o použití součástí. Není určeno pro běžné aplikace."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 113c226..cda8cbc 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"Lautlos"</string>
     <string name="global_action_silent_mode_on_status">"Ton ist bereits AUS"</string>
     <string name="global_action_silent_mode_off_status">"Ton ist momentan AN"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Abgesicherter Modus"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Kostenpflichtige Dienste"</string>
     <string name="permgroupdesc_costMoney">"Ermöglicht Anwendungen die Ausführung eventuell kostenpflichtiger Aktionen."</string>
     <string name="permgrouplab_messages">"Ihre Nachrichten"</string>
@@ -389,7 +397,8 @@
     <string name="lockscreen_emergency_call">"Notruf"</string>
     <string name="lockscreen_pattern_correct">"Korrekt!"</string>
     <string name="lockscreen_pattern_wrong">"Tut uns leid. Versuchen Sie es noch einmal."</string>
-    <string name="lockscreen_plugged_in">"Wird aufgeladen (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Bitte Ladegerät anschließen"</string>
     <string name="lockscreen_missing_sim_message_short">"Keine SIM-Karte."</string>
     <string name="lockscreen_missing_sim_message">"Keine SIM-Karte im Telefon."</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Benachrichtigungen löschen"</string>
     <string name="status_bar_no_notifications_title">"Keine Benachrichtigungen"</string>
     <string name="status_bar_ongoing_events_title">"Aktuell"</string>
     <string name="status_bar_latest_events_title">"Benachrichtigungen"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"Wird aufgeladen..."</string>
     <string name="battery_low_title">"Ladegerät anschließen"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"Mittag"</string>
     <string name="midnight">"Mitternacht"</string>
     <string name="Midnight">"Mitternacht"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"Sonntag"</string>
     <string name="day_of_week_long_monday">"Montag"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"Möchten Sie die SD-Karte wirklich formatieren? Alle Daten auf Ihrer Karte gehen dann verloren."</string>
     <string name="extmedia_format_button_format">"Format"</string>
     <string name="select_input_method">"Eingabemethode auswählen"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"Kandidaten"</u></string>
     <string name="ext_media_checking_notification_title">"SD-Karte wird vorbereitet"</string>
     <string name="ext_media_checking_notification_message">"Nach Fehlern wird gesucht"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"Keine passenden Aktivitäten gefunden"</string>
     <string name="permlab_pkgUsageStats">"Nutzungsstatistik der Komponente aktualisieren"</string>
     <string name="permdesc_pkgUsageStats">"Ermöglicht die Änderung von gesammelten Nutzungsstatistiken der Komponente. Nicht für normale Anwendungen vorgesehen."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index dc3fcd5..495f8aa 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -101,9 +101,17 @@
     <string name="global_action_lock">"Bloqueo de pantalla"</string>
     <string name="global_action_power_off">"Apagar"</string>
     <string name="global_action_toggle_silent_mode">"Modo silencio"</string>
-    <string name="global_action_silent_mode_on_status">"El sonido está desactivado."</string>
-    <string name="global_action_silent_mode_off_status">"El sonido está activado."</string>
+    <string name="global_action_silent_mode_on_status">"El sonido está desactivado. Activar."</string>
+    <string name="global_action_silent_mode_off_status">"El sonido está activado. Desactivar."</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Modo seguro"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Servicios por los que tienes que pagar"</string>
     <string name="permgroupdesc_costMoney">"Permite que las aplicaciones realicen acciones por las que puede que tengas que pagar."</string>
     <string name="permgrouplab_messages">"Tus mensajes"</string>
@@ -260,8 +268,8 @@
     <string name="permdesc_brick">"Permite que la aplicación inhabilite todas las funciones del teléfono de forma permanente. Este permiso es muy peligroso."</string>
     <string name="permlab_reboot">"forzar reinicio del teléfono"</string>
     <string name="permdesc_reboot">"Permite que la aplicación fuerce al teléfono a reiniciarse."</string>
-    <string name="permlab_mount_unmount_filesystems">"montar y desmontar sistemas de archivos"</string>
-    <string name="permdesc_mount_unmount_filesystems">"Permite que las aplicaciones monten y desmonten sistemas de archivos para un almacenamiento extraíble."</string>
+    <string name="permlab_mount_unmount_filesystems">"activar y desactivar sistemas de archivos"</string>
+    <string name="permdesc_mount_unmount_filesystems">"Permite que las aplicaciones activen y desactiven sistemas de archivos para un almacenamiento extraíble."</string>
     <string name="permlab_mount_format_filesystems">"formatear almacenamiento externo"</string>
     <string name="permdesc_mount_format_filesystems">"Permite a la aplicación formatear un almacenamiento extraíble."</string>
     <string name="permlab_vibrate">"controlar vibración"</string>
@@ -275,13 +283,13 @@
     <string name="permlab_callPrivileged">"llamar directamente a cualquier número de teléfono"</string>
     <string name="permdesc_callPrivileged">"Permite que la aplicación llame a cualquier número de teléfono, incluidos los números de emergencia, sin que el usuario intervenga. Las aplicaciones malintencionadas pueden realizar llamadas innecesarias e ilícitas a los servicios de emergencias."</string>
     <string name="permlab_locationUpdates">"controlar las notificaciones de actualización de la ubicación"</string>
-    <string name="permdesc_locationUpdates">"Permite habilitar/inhabilitar las notificaciones de actualización de la ubicación de la radio. No está destinado al uso por parte de aplicaciones normales."</string>
+    <string name="permdesc_locationUpdates">"Permite habilitar/inhabilitar las notificaciones de actualización de la señal móvil. No está destinado al uso por parte de aplicaciones normales."</string>
     <string name="permlab_checkinProperties">"acceder a propiedades de registro"</string>
     <string name="permdesc_checkinProperties">"Permite el acceso de lectura/escritura a las propiedades cargadas por el servicio de registro. No está destinado al uso por parte de aplicaciones normales."</string>
     <string name="permlab_bindGadget">"seleccionar gadgets"</string>
     <string name="permdesc_bindGadget">"Permite a la aplicación indicar al sistema qué gadgets puede utilizar cada aplicación. Con este permiso, las aplicaciones pueden permitir a otras aplicaciones acceder a datos personales. No está destinado al uso por parte de aplicaciones normales."</string>
     <string name="permlab_modifyPhoneState">"modificar estado del teléfono"</string>
-    <string name="permdesc_modifyPhoneState">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Una aplicación con este permiso puede cambiar redes, activar y desactivar la radio, etc., sin necesidad de notificar al usuario."</string>
+    <string name="permdesc_modifyPhoneState">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Una aplicación con este permiso puede cambiar redes, activar y desactivar la señal móvil, etc., sin necesidad de notificar al usuario."</string>
     <string name="permlab_readPhoneState">"leer el estado del teléfono"</string>
     <string name="permdesc_readPhoneState">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. Una aplicación con este permiso puede determinar el número de teléfono de este teléfono, si una llamada está activa, el número al que está vinculado esa llamada, etc."</string>
     <string name="permlab_wakeLock">"impedir que el teléfono entre en modo de suspensión"</string>
@@ -345,7 +353,7 @@
     <item>"Personalizar"</item>
   </string-array>
   <string-array name="emailAddressTypes">
-    <item>"Personal?????"</item>
+    <item>"Personal"</item>
     <item>"Trabajo"</item>
     <item>"Otra"</item>
     <item>"Personalizar"</item>
@@ -379,19 +387,20 @@
   </string-array>
     <string name="keyguard_password_enter_pin_code">"Introduce el código PIN"</string>
     <string name="keyguard_password_wrong_pin_code">"El código PIN es incorrecto."</string>
-    <string name="keyguard_label_text">"Para desbloquear el teléfono, pulsa MENU y, a continuación, pulsa 0."</string>
+    <string name="keyguard_label_text">"Para desbloquear el teléfono, pulsa la tecla de menú y, a continuación, pulsa 0."</string>
     <string name="emergency_call_dialog_number_for_display">"Número de emergencia"</string>
-    <string name="lockscreen_carrier_default">"(Sin servicio)"</string>
+    <string name="lockscreen_carrier_default">"(Sin cobertura)"</string>
     <string name="lockscreen_screen_locked">"Pantalla bloqueada"</string>
-    <string name="lockscreen_instructions_when_pattern_enabled">"Pulsa MENU para desbloquear el teléfono o realizar una llamada de emergencia."</string>
-    <string name="lockscreen_instructions_when_pattern_disabled">"Pulsa MENU para desbloquear el teléfono."</string>
-    <string name="lockscreen_pattern_instructions">"Crear patrón para desbloquear"</string>
+    <string name="lockscreen_instructions_when_pattern_enabled">"Pulsa la tecla de menú para desbloquear el teléfono o realizar una llamada de emergencia."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled">"Pulsa la tecla de menú para desbloquear la pantalla."</string>
+    <string name="lockscreen_pattern_instructions">"Dibujar patrón de desbloqueo"</string>
     <string name="lockscreen_emergency_call">"Llamada de emergencia"</string>
     <string name="lockscreen_pattern_correct">"Correcto"</string>
     <string name="lockscreen_pattern_wrong">"Inténtalo de nuevo"</string>
-    <string name="lockscreen_plugged_in">"Cargando (<xliff:g id="NUMBER">%d%%</xliff:g>)..."</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Conecta el cargador"</string>
-    <string name="lockscreen_missing_sim_message_short">"No hay ninguna tarjeta SIM."</string>
+    <string name="lockscreen_missing_sim_message_short">"Falta la tarjeta SIM"</string>
     <string name="lockscreen_missing_sim_message">"No se ha insertado ninguna tarjeta SIM en el teléfono."</string>
     <string name="lockscreen_missing_sim_instructions">"Inserta una tarjeta SIM."</string>
     <string name="lockscreen_network_locked_message">"Bloqueada para la red"</string>
@@ -412,20 +421,20 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Cerrar notificaciones"</string>
-    <string name="status_bar_no_notifications_title">"Ninguna notificación"</string>
+    <string name="status_bar_no_notifications_title">"No tienes notificaciones"</string>
     <string name="status_bar_ongoing_events_title">"Entrante"</string>
     <string name="status_bar_latest_events_title">"Notificaciones"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"Cargando..."</string>
     <string name="battery_low_title">"Conecta el cargador"</string>
     <string name="battery_low_subtitle">"Se está agotando la batería:"</string>
-    <string name="battery_low_percent_format">"menos de <xliff:g id="NUMBER">%d%%</xliff:g> disponible."</string>
+    <string name="battery_low_percent_format">"menos del <xliff:g id="NUMBER">%d%%</xliff:g> disponible."</string>
     <string name="factorytest_failed">"Fallo en la prueba de fábrica"</string>
     <string name="factorytest_not_system">"La acción FACTORY_TEST sólo es compatible con los paquetes instalados en /system/app."</string>
     <string name="factorytest_no_action">"No se ha encontrado ningún paquete que proporcione la acción FACTORY_TEST."</string>
@@ -547,7 +556,7 @@
     <string name="VideoView_error_button">"Aceptar"</string>
     <string name="am">"a.m."</string>
     <string name="pm">"p.m."</string>
-    <string name="numeric_date">"<xliff:g id="MONTH">%m</xliff:g>/<xliff:g id="DAY">%d</xliff:g>/<xliff:g id="YEAR">%Y</xliff:g>"</string>
+    <string name="numeric_date">"<xliff:g id="DAY">%d</xliff:g>/<xliff:g id="MONTH">%m</xliff:g>/<xliff:g id="YEAR">%Y</xliff:g>"</string>
     <string name="wday1_date1_time1_wday2_date2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
     <string name="wday1_date1_wday2_date2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g>"</string>
     <string name="date1_time1_date2_time2">"<xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
@@ -560,7 +569,7 @@
     <string name="relative_time">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="time_wday">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="WEEKDAY">%2$s</xliff:g>"</string>
     <string name="full_date_month_first" format="date">"<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="MONTH">MMMM</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
-    <string name="full_date_day_first" format="date">"<xliff:g id="MONTH">MMMM</xliff:g>' de '<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+    <string name="full_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="MONTH">MMMM</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
     <string name="medium_date_month_first" format="date">"<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="MONTH">MMM</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
     <string name="medium_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>' '<xliff:g id="MONTH">MMM</xliff:g>', '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
     <string name="twelve_hour_time_format" format="date">"<xliff:g id="HOUR">h</xliff:g>':'<xliff:g id="MINUTE">mm</xliff:g>' '<xliff:g id="AMPM">a</xliff:g>"</string>
@@ -569,45 +578,45 @@
     <string name="Noon">"Mediodía"</string>
     <string name="midnight">"medianoche"</string>
     <string name="Midnight">"Medianoche"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
-    <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <string name="same_year_md1_md2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>"</string>
-    <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>"</string>
-    <string name="same_year_mdy1_mdy2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR">%9$s</xliff:g>"</string>
+    <string name="same_year_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
+    <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
+    <string name="same_year_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="YEAR">%9$s</xliff:g>"</string>
     <string name="same_year_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR">%9$s</xliff:g>"</string>
-    <string name="same_year_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g> de <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g> de <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="same_year_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="same_year_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="same_year_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_year_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g> de <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> –  <xliff:g id="DAY2">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g> de <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="numeric_md1_md2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>"</string>
+    <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="numeric_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
     <string name="numeric_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g>"</string>
-    <string name="numeric_mdy1_mdy2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
+    <string name="numeric_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
     <string name="numeric_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
-    <string name="numeric_md1_time1_md2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="numeric_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="numeric_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="same_month_md1_md2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>"</string>
+    <string name="numeric_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="numeric_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="numeric_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="same_month_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>  <xliff:g id="MONTH1">%2$s</xliff:g>"</string>
     <string name="same_month_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>"</string>
-    <string name="same_month_mdy1_mdy2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
+    <string name="same_month_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g> de <xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g> de <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
-    <string name="same_month_md1_time1_md2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="same_month_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="same_month_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="same_month_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> de <xliff:g id="MONTH">%b</xliff:g> de <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"Domingo"</string>
     <string name="day_of_week_long_monday">"Lunes"</string>
@@ -705,7 +714,7 @@
     <string name="capital_off">"Desconectado"</string>
     <string name="whichApplication">"Completar acción utilizando"</string>
     <string name="alwaysUse">"Utilizar de forma predeterminada para esta acción"</string>
-    <string name="clearDefaultHintMsg">"Borrar valores predeterminados en \"Página principal &gt; menú de configuración &gt; Aplicaciones &gt; Administrar aplicaciones\"."</string>
+    <string name="clearDefaultHintMsg">"Borrar valores predeterminados en la página de configuración de la pantalla de inicio del teléfono &gt; Aplicaciones &gt; Administrar aplicaciones\"."</string>
     <string name="chooseActivity">"Seleccionar una acción"</string>
     <string name="noApplications">"Ninguna aplicación puede realizar esta acción."</string>
     <string name="aerr_title">"Lo sentimos."</string>
@@ -719,7 +728,7 @@
     <string name="force_close">"Forzar cierre"</string>
     <string name="wait">"Esperar"</string>
     <string name="debug">"Depurar"</string>
-    <string name="sendText">"Seleccionar una acción para el texto"</string>
+    <string name="sendText">"Seleccionar la opción para compartir"</string>
     <string name="volume_ringtone">"Volumen del timbre"</string>
     <string name="volume_music">"Volumen multimedia"</string>
     <string name="volume_music_hint_playing_through_bluetooth">"Reproduciendo a través de Bluetooth"</string>
@@ -754,25 +763,25 @@
     <string name="perms_show_all"><b>"Mostrar todos"</b></string>
     <string name="googlewebcontenthelper_loading">"Cargando..."</string>
     <string name="usb_storage_title">"Conectado por USB"</string>
-    <string name="usb_storage_message">"Has conectado el teléfono al equipo mediante USB. Selecciona \"Montar\" si deseas copiar archivos entre el equipo y la tarjeta SD del teléfono."</string>
-    <string name="usb_storage_button_mount">"Montar"</string>
-    <string name="usb_storage_button_unmount">"No montar"</string>
+    <string name="usb_storage_message">"Has conectado el teléfono al equipo mediante USB. Selecciona \"Activar\" si deseas copiar archivos entre el equipo y la tarjeta SD del teléfono."</string>
+    <string name="usb_storage_button_mount">"Activar"</string>
+    <string name="usb_storage_button_unmount">"No activar"</string>
     <string name="usb_storage_error_message">"Se ha producido un problema al intentar utilizar la tarjeta SD para el almacenamiento USB."</string>
     <string name="usb_storage_notification_title">"Conectado por USB"</string>
     <string name="usb_storage_notification_message">"Seleccionar para copiar archivos al/desde el equipo"</string>
-    <string name="usb_storage_stop_notification_title">"Desactivar almacenamiento USB"</string>
-    <string name="usb_storage_stop_notification_message">"Selecciona esta opción para desactivar el almacenamiento USB."</string>
+    <string name="usb_storage_stop_notification_title">"Desactivar almacenar en USB"</string>
+    <string name="usb_storage_stop_notification_message">"Seleccionar para desactivar USB."</string>
     <string name="usb_storage_stop_title">"Desactivar almacenamiento USB"</string>
-    <string name="usb_storage_stop_message">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado el host USB. Selecciona \"Desactivar\" para desactivar el almacenamiento USB."</string>
+    <string name="usb_storage_stop_message">"Antes de desactivar el almacenamiento USB, asegúrate de haber desactivado el host USB. Selecciona \"Desactivar\" para desactivar el almacenamiento USB."</string>
     <string name="usb_storage_stop_button_mount">"Desactivar"</string>
     <string name="usb_storage_stop_button_unmount">"Cancelar"</string>
-    <string name="usb_storage_stop_error_message">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de que has desmontado el host USB e inténtalo de nuevo."</string>
+    <string name="usb_storage_stop_error_message">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de que has desactivado el host USB e inténtalo de nuevo."</string>
     <string name="extmedia_format_title">"Formatear tarjeta SD"</string>
     <string name="extmedia_format_message">"¿Estás seguro de que quieres formatear la tarjeta SD? Se perderán todos los datos de la tarjeta."</string>
     <string name="extmedia_format_button_format">"Formato"</string>
     <string name="select_input_method">"Seleccionar método de introducción de texto"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"candidatos"</u></string>
     <string name="ext_media_checking_notification_title">"Preparando tarjeta SD"</string>
     <string name="ext_media_checking_notification_message">"Comprobando errores"</string>
@@ -781,14 +790,26 @@
     <string name="ext_media_unmountable_notification_title">"Tarjeta SD dañada"</string>
     <string name="ext_media_unmountable_notification_message">"La tarjeta SD está dañada. Es posible que sea necesario volver a formatearla."</string>
     <string name="ext_media_badremoval_notification_title">"La tarjeta SD se ha extraído inesperadamente."</string>
-    <string name="ext_media_badremoval_notification_message">"Desmonta la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
+    <string name="ext_media_badremoval_notification_message">"Desactiva la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
     <string name="ext_media_safe_unmount_notification_title">"Es seguro extraer la tarjeta SD."</string>
-    <string name="ext_media_safe_unmount_notification_message">"Ya puedes extraer la tarjeta SD de forma segura."</string>
+    <string name="ext_media_safe_unmount_notification_message">"Ya puedes extraer la tarjeta SD."</string>
     <string name="ext_media_nomedia_notification_title">"Tarjeta SD extraída"</string>
     <string name="ext_media_nomedia_notification_message">"La tarjeta SD se ha extraído. Inserta una nueva tarjeta SD para aumentar la capacidad de almacenamiento de tu dispositivo."</string>
     <string name="activity_list_empty">"No se ha encontrado ninguna actividad coincidente."</string>
     <string name="permlab_pkgUsageStats">"actualizar estadísticas de uso de componentes"</string>
     <string name="permdesc_pkgUsageStats">"Permite la modificación de estadísticas recopiladas sobre el uso de componentes. No está destinado al uso por parte de aplicaciones normales."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 45b8f03..8bd064d 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -58,8 +58,8 @@
     <string name="serviceClassData">"Données"</string>
     <string name="serviceClassFAX">"Télécopie"</string>
     <string name="serviceClassSMS">"SMS"</string>
-    <string name="serviceClassDataAsync">"Asynchronisées"</string>
-    <string name="serviceClassDataSync">"Synchroniser"</string>
+    <string name="serviceClassDataAsync">"Asynchrones"</string>
+    <string name="serviceClassDataSync">"Synchrones"</string>
     <string name="serviceClassPacket">"Paquet"</string>
     <string name="serviceClassPAD">"PAD"</string>
     <string name="cfTemplateNotForwarded">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g> : non transféré"</string>
@@ -84,7 +84,7 @@
     <string name="httpErrorFileNotFound">"Le fichier demandé est introuvable."</string>
     <string name="httpErrorTooManyRequests">"Trop de requêtes sont en cours de traitement. Veuillez réessayer ultérieurement."</string>
     <string name="contentServiceSync">"Synchroniser"</string>
-    <string name="contentServiceSyncNotificationTitle">"Synchroniser"</string>
+    <string name="contentServiceSyncNotificationTitle">"Synchronisation"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc">"Trop de contenus supprimés (<xliff:g id="CONTENT_TYPE">%s</xliff:g>)."</string>
     <string name="low_memory">"La mémoire du téléphone est pleine ! Supprimez des fichiers pour libérer de l\'espace."</string>
     <string name="me">"Moi"</string>
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"Mode silencieux"</string>
     <string name="global_action_silent_mode_on_status">"Le son est désactivé."</string>
     <string name="global_action_silent_mode_off_status">"Le son est activé."</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Mode sécurisé"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Services payants"</string>
     <string name="permgroupdesc_costMoney">"Permet aux applications d\'effectuer des opérations payantes."</string>
     <string name="permgrouplab_messages">"Vos messages"</string>
@@ -116,7 +124,7 @@
     <string name="permgroupdesc_network">"Permet à des applications d\'accéder à différentes fonctionnalités du réseau."</string>
     <string name="permgrouplab_accounts">"Vos comptes Google"</string>
     <string name="permgroupdesc_accounts">"Accédez aux comptes Google disponibles."</string>
-    <string name="permgrouplab_hardwareControls">"Contrôles du matériel"</string>
+    <string name="permgrouplab_hardwareControls">"Commandes du matériel"</string>
     <string name="permgroupdesc_hardwareControls">"Permet d\'accéder directement au matériel de l\'appareil."</string>
     <string name="permgrouplab_phoneCalls">"Appels"</string>
     <string name="permgroupdesc_phoneCalls">"Suivre, enregistrer et traiter les appels téléphoniques"</string>
@@ -124,215 +132,215 @@
     <string name="permgroupdesc_systemTools">"Accès et contrôle de faible niveau du système."</string>
     <string name="permgrouplab_developmentTools">"Outils de développement"</string>
     <string name="permgroupdesc_developmentTools">"Ces fonctionnalités sont réservées aux développeurs d\'applications."</string>
-    <string name="permlab_statusBar">"Désactiver ou modifier la barre d\'état"</string>
+    <string name="permlab_statusBar">"Désactivation ou modification de la barre d\'état"</string>
     <string name="permdesc_statusBar">"Permet à une application de désactiver la barre d\'état ou d\'ajouter/supprimer des icônes système."</string>
     <string name="permlab_expandStatusBar">"Agrandir/réduire la barre d\'état"</string>
     <string name="permdesc_expandStatusBar">"Permet à l\'application de réduire ou d\'agrandir la barre d\'état."</string>
-    <string name="permlab_processOutgoingCalls">"Intercepter les appels sortants"</string>
+    <string name="permlab_processOutgoingCalls">"Interception d\'appels sortants"</string>
     <string name="permdesc_processOutgoingCalls">"Permet à l\'application de traiter des appels en cours et de modifier le numéro à composer. Des applications malveillantes peuvent suivre, rediriger ou empêcher des appels sortants."</string>
-    <string name="permlab_receiveSms">"Recevoir SMS"</string>
-    <string name="permdesc_receiveSms">"Permet à une application de recevoir et traiter des messages SMS. Des applications malveillantes peuvent surveiller vos messages ou les effacer sans que vous en ayez pris connaissance."</string>
-    <string name="permlab_receiveMms">"recevoir des MMS"</string>
-    <string name="permdesc_receiveMms">"Permet à une application de recevoir et traiter des messages MMS. Des applications malveillantes peuvent utiliser cette fonctionnalité pour surveiller vos messages ou les effacer sans que vous en ayez pris connaissance."</string>
-    <string name="permlab_sendSms">"Envoyer des messages SMS"</string>
+    <string name="permlab_receiveSms">"Réception de SMS"</string>
+    <string name="permdesc_receiveSms">"Permet à une application de recevoir et traiter des messages SMS. Des applications malveillantes peuvent surveiller ou effacer vos messages sans que vous les ayez lus."</string>
+    <string name="permlab_receiveMms">"Réception des MMS"</string>
+    <string name="permdesc_receiveMms">"Permet à une application de recevoir et traiter des messages MMS. Des applications malveillantes peuvent utiliser cette fonctionnalité pour surveiller ou effacer vos messages sans que vous les ayez lus."</string>
+    <string name="permlab_sendSms">"Envoi de messages SMS"</string>
     <string name="permdesc_sendSms">"Permet aux applications d\'envoyer des messages SMS. Des applications malveillantes peuvent entraîner des frais en envoyant des messages sans vous en demander la confirmation."</string>
-    <string name="permlab_readSms">"Lire les SMS ou MMS"</string>
-    <string name="permdesc_readSms">"Permet à l\'application de lire les messages SMS enregistrés dans la mémoire de votre téléphone ou sur votre carte SD. Des applications malveillantes peuvent lire vos messages confidentiels."</string>
-    <string name="permlab_writeSms">"Modifier un SMS ou un MMS"</string>
-    <string name="permdesc_writeSms">"Permet à une application d\'éditer des messages SMS enregistrés sur votre téléphone ou sur votre carte SIM. Des applications malveillantes peuvent ainsi supprimer vos messages."</string>
-    <string name="permlab_receiveWapPush">"Recevoir WAP"</string>
+    <string name="permlab_readSms">"Lecture des SMS ou MMS"</string>
+    <string name="permdesc_readSms">"Permet à l\'application de lire les SMS enregistrés dans la mémoire de votre téléphone ou sur votre carte SIM. Des applications malveillantes peuvent lire vos messages confidentiels."</string>
+    <string name="permlab_writeSms">"Modification de SMS ou de MMS"</string>
+    <string name="permdesc_writeSms">"Permet à une application de modifier des messages SMS enregistrés sur votre téléphone ou sur votre carte SIM. Des applications malveillantes peuvent ainsi supprimer vos messages."</string>
+    <string name="permlab_receiveWapPush">"Réception de WAP"</string>
     <string name="permdesc_receiveWapPush">"Permet à l\'application de recevoir et de traiter des messages WAP. Des applications malveillantes peuvent ainsi surveiller vos messages ou les effacer sans que vous en ayez pris connaissance."</string>
-    <string name="permlab_getTasks">"Récupérer les applications en cours d\'exécution"</string>
+    <string name="permlab_getTasks">"Récupération des applications en cours d\'exécution"</string>
     <string name="permdesc_getTasks">"Permet à l\'application de récupérer des informations sur des tâches en cours d\'exécution ou récemment utilisées. Des applications malveillantes peuvent ainsi obtenir des informations d\'ordre privé concernant d\'autres applications."</string>
-    <string name="permlab_reorderTasks">"Réorganiser les applications en cours d\'exécution"</string>
+    <string name="permlab_reorderTasks">"Réorganisation des applications en cours d\'exécution"</string>
     <string name="permdesc_reorderTasks">"Permet à une application de placer des tâches au premier plan ou en arrière-plan. Des applications malveillantes peuvent se placer inopinément au premier plan sans votre autorisation."</string>
-    <string name="permlab_setDebugApp">"Activer le débogage de l\'application"</string>
+    <string name="permlab_setDebugApp">"Activation du débogage de l\'application"</string>
     <string name="permdesc_setDebugApp">"Permet à une application d\'activer le mode de débogage d\'une autre application. Des applications malveillantes peuvent utiliser cette fonctionnalité pour interrompre d\'autres applications de façon inopinée."</string>
-    <string name="permlab_changeConfiguration">"Modifier les paramètres de l\'IU"</string>
+    <string name="permlab_changeConfiguration">"Modification des paramètres de l\'IU"</string>
     <string name="permdesc_changeConfiguration">"Permet à une application de modifier la configuration actuelle (par ex. : la taille de la police générale ou des paramètres régionaux)."</string>
-    <string name="permlab_restartPackages">"Relancer d\'autres applications"</string>
+    <string name="permlab_restartPackages">"Démarrage d\'autres applications"</string>
     <string name="permdesc_restartPackages">"Permet à une application de forcer le lancement d\'autres applications."</string>
-    <string name="permlab_setProcessForeground">"Empêcher l\'interruption"</string>
+    <string name="permlab_setProcessForeground">"Non-possibilité d\'interruption"</string>
     <string name="permdesc_setProcessForeground">"Permet à une application d\'exécuter tout processus au premier plan afin qu\'il ne puisse pas être interrompu. Les applications normales ne devraient jamais nécessiter cette fonctionnalité."</string>
-    <string name="permlab_forceBack">"Obliger l\'application à se fermer"</string>
+    <string name="permlab_forceBack">"Fermeture forcée de l\'application"</string>
     <string name="permdesc_forceBack">"Permet à une application de forcer une autre application exécutée au premier plan à se fermer et à passer en arrière-plan. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
-    <string name="permlab_dump">"Récupérer l\'état interne du système"</string>
+    <string name="permlab_dump">"Vérification de l\'état interne du système"</string>
     <string name="permdesc_dump">"Permet à l\'application de récupérer l\'état interne du système. Des applications malveillantes peuvent obtenir de nombreuses informations personnelles et sécurisées auxquelles elles ne devraient pas avoir accès."</string>
     <string name="permlab_addSystemService">"Éditer des services à faible niveau"</string>
-    <string name="permdesc_addSystemService">"Permet à l\'application de publier ses propres services de système de niveau inférieur. Des applications malveillantes peuvent prendre le contrôle du système et voler ou corrompre les données qu\'il contient."</string>
-    <string name="permlab_runSetActivityWatcher">"Surveiller et contrôler tout lancement d\'application"</string>
+    <string name="permdesc_addSystemService">"Permet à l\'application de publier ses propres services de système de niveau inférieur. Des applications malveillantes peuvent prendre le contrôle du système et subtiliser ou endommager ses données."</string>
+    <string name="permlab_runSetActivityWatcher">"Contrôle du lancement des applications"</string>
     <string name="permdesc_runSetActivityWatcher">"Permet à une application de suivre et de contrôler la façon dont le système lance des activités. Des applications malveillantes peuvent entièrement déstabiliser le système. Cette autorisation est uniquement nécessaire au développement et non pour l\'utilisation normale du téléphone."</string>
     <string name="permlab_broadcastPackageRemoved">"Envoyer une diffusion sans paquet"</string>
     <string name="permdesc_broadcastPackageRemoved">"Permet à une application de diffuser une notification lorsqu\'un paquet d\'application a été supprimé. Des applications malveillantes peuvent utiliser cette fonctionnalité pour interrompre d\'autres applications en cours d\'exécution."</string>
     <string name="permlab_broadcastSmsReceived">"Envoyer une diffusion reçue par SMS"</string>
     <string name="permdesc_broadcastSmsReceived">"Permet à une application de diffuser une notification lors de la réception d\'un message SMS. Des applications malveillantes peuvent utiliser cette fonctionnalité pour falsifier des messages SMS entrants."</string>
-    <string name="permlab_broadcastWapPush">"Envoyer une diffusion de réception de WAP PUSH"</string>
-    <string name="permdesc_broadcastWapPush">"Permet à une application d\'envoyer une notification lors de la réception d\'un message WAP PUSH. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux accusés de réception de MMS ou remplacer le contenu de toute page Internet par des données malveillantes."</string>
-    <string name="permlab_setProcessLimit">"Limiter le nombre de processus en cours d\'exécution"</string>
+    <string name="permlab_broadcastWapPush">"Envoi de diffusion de réception de WAP PUSH"</string>
+    <string name="permdesc_broadcastWapPush">"Permet à une application d\'envoyer une notification lors de la réception d\'un message WAP PUSH. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux accusés de réception de MMS ou remplacer le contenu de toute page Web par des données malveillantes."</string>
+    <string name="permlab_setProcessLimit">"Nombre maximal de processus en cours d\'exécution"</string>
     <string name="permdesc_setProcessLimit">"Permet à une application de contrôler le nombre de processus maximal exécutés en même temps. Les applications normales n\'ont jamais recours à cette fonctionnalité."</string>
-    <string name="permlab_setAlwaysFinish">"Fermer toutes les applications en tâche de fond"</string>
+    <string name="permlab_setAlwaysFinish">"Fermeture de toutes les applications en tâche de fond"</string>
     <string name="permdesc_setAlwaysFinish">"Permet à une application de vérifier si des activités sont systématiquement interrompues lorsqu\'elles sont placées en tâche de fond. Cette fonctionnalité n\'est jamais utilisée par les applications normales."</string>
-    <string name="permlab_fotaUpdate">"Installer automatiquement les mises à jour du système"</string>
-    <string name="permdesc_fotaUpdate">"Permet à une application de recevoir des notifications concernant des mises à jour système en cours et de lancer leur installation. Des applications malveillantes peuvent utiliser cette fonctionnalité pour corrompre le système avec des mises à jour non autorisées ou plus généralement, pour interférer avec le processus de mise à jour."</string>
-    <string name="permlab_batteryStats">"Modifier les statistiques de la batterie"</string>
+    <string name="permlab_fotaUpdate">"Installation des mises à jour du système"</string>
+    <string name="permdesc_fotaUpdate">"Permet à une application de recevoir des notifications sur des mises à jour système en cours et de lancer leur installation. Des applications malveillantes peuvent utiliser cette fonctionnalité pour endommager le système avec des mises à jour non autorisées ou interférer avec le processus de mise à jour."</string>
+    <string name="permlab_batteryStats">"Modification des statistiques de la batterie"</string>
     <string name="permdesc_batteryStats">"Autoriser la modification des statistiques de la batterie. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
-    <string name="permlab_internalSystemWindow">"Afficher les fenêtres non autorisées"</string>
+    <string name="permlab_internalSystemWindow">"Affichage de fenêtres non autorisées"</string>
     <string name="permdesc_internalSystemWindow">"Permet de créer des fenêtres conçues pour l\'interface utilisateur du système interne. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
-    <string name="permlab_systemAlertWindow">"Afficher les alertes au niveau du système"</string>
+    <string name="permlab_systemAlertWindow">"Affichage d\'alertes système"</string>
     <string name="permdesc_systemAlertWindow">"Permet à une application d\'afficher des fenêtres d\'alerte système. Des applications malveillantes peuvent masquer la totalité de l\'écran du téléphone."</string>
-    <string name="permlab_setAnimationScale">"Modifier la vitesse générale des animations"</string>
-    <string name="permdesc_setAnimationScale">"Permet à une application de modifier à tout moment la vitesse globale des animations (pour les rendre plus lentes ou plus rapides)."</string>
-    <string name="permlab_manageAppTokens">"Gérer les repères des applications"</string>
+    <string name="permlab_setAnimationScale">"Réglage de la vitesse des animations"</string>
+    <string name="permdesc_setAnimationScale">"Permet à une application de modifier à tout moment la vitesse générale des animations (pour les rendre plus lentes ou plus rapides)."</string>
+    <string name="permlab_manageAppTokens">"Gestion des repères des applications"</string>
     <string name="permdesc_manageAppTokens">"Permet à des applications de créer et gérer leurs propres jetons en ignorant leur ordre de plan normal. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
-    <string name="permlab_injectEvents">"Appuyer sur des touches ou contrôler des commandes"</string>
+    <string name="permlab_injectEvents">"Utilisation des touches ou contrôle des commandes"</string>
     <string name="permdesc_injectEvents">"Permet à une application de fournir ses propres commandes (touches enfoncées, etc.) à d\'autres applications. Des applications malveillantes peuvent utiliser cette fonctionnalité pour prendre le contrôle de votre téléphone."</string>
     <string name="permlab_readInputState">"Enregistrer le texte saisi et les actions effectuées"</string>
     <string name="permdesc_readInputState">"Permet à des applications d\'identifier les touches sur lesquelles vous appuyez même lorsque vous utilisez une autre application (lors de la saisie d\'un mot de passe, par exemple). Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
-    <string name="permlab_bindInputMethod">"connecter à un mode de saisie"</string>
+    <string name="permlab_bindInputMethod">"Association à un mode de saisie"</string>
     <string name="permdesc_bindInputMethod">"Permet au support de se connecter à l\'interface de plus haut niveau d\'un mode de saisie. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
-    <string name="permlab_setOrientation">"Changer l\'orientation de l\'écran"</string>
+    <string name="permlab_setOrientation">"Changement d\'orientation de l\'écran"</string>
     <string name="permdesc_setOrientation">"Permet à une application de modifier la rotation de l\'écran à tout moment. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
-    <string name="permlab_signalPersistentProcesses">"Envoyer des signaux Linux aux applications"</string>
+    <string name="permlab_signalPersistentProcesses">"Envoi de signaux Linux aux applications"</string>
     <string name="permdesc_signalPersistentProcesses">"Permet à une application de demander que le signal fourni soit envoyé à tous les processus persistants."</string>
-    <string name="permlab_persistentActivity">"Exécuter l\'application en continu"</string>
+    <string name="permlab_persistentActivity">"Exécution de l\'application en continu"</string>
     <string name="permdesc_persistentActivity">"Permet à une application de perdurer en partie afin que le système ne puisse pas l\'utiliser pour d\'autres applications."</string>
     <string name="permlab_deletePackages">"Supprimer des applications"</string>
     <string name="permdesc_deletePackages">"Permet à une application de supprimer des paquets de données Android. Des applications malveillantes peuvent utiliser cette fonctionnalité pour supprimer des applications importantes."</string>
-    <string name="permlab_clearAppUserData">"Supprimer les données d\'autres applications"</string>
+    <string name="permlab_clearAppUserData">"Suppression des données d\'autres applications"</string>
     <string name="permdesc_clearAppUserData">"Permet à une application d\'effacer les données de l\'utilisateur."</string>
-    <string name="permlab_deleteCacheFiles">"Supprimer le cache d\'autres applications"</string>
+    <string name="permlab_deleteCacheFiles">"Suppression du cache d\'autres applications"</string>
     <string name="permdesc_deleteCacheFiles">"Permet à une application de supprimer des fichiers du cache."</string>
-    <string name="permlab_getPackageSize">"Évaluer l\'espace de stockage de l\'application"</string>
+    <string name="permlab_getPackageSize">"Évaluation de l\'espace de stockage de l\'application"</string>
     <string name="permdesc_getPackageSize">"Permet à une application de récupérer la taille de son code, de ses données et de son cache."</string>
-    <string name="permlab_installPackages">"Installer directement les applications"</string>
+    <string name="permlab_installPackages">"Installation directe d\'applications"</string>
     <string name="permdesc_installPackages">"Permet à une application d\'installer des nouveaux paquets de données ou des mises à jour Android. Des applications malveillantes peuvent utiliser cette fonctionnalité pour ajouter de nouvelles applications disposant d\'autorisations anormalement élevées."</string>
-    <string name="permlab_clearAppCache">"Effacer les données du cache de toutes les applications"</string>
+    <string name="permlab_clearAppCache">"Suppression des données du cache de toutes les applications"</string>
     <string name="permdesc_clearAppCache">"Permet à une application de libérer de l\'espace dans la mémoire du téléphone en supprimant des fichiers du répertoire du cache des applications. Cet accès est en général limité aux processus système."</string>
-    <string name="permlab_readLogs">"Lire les fichiers journaux du système"</string>
+    <string name="permlab_readLogs">"Lecture des fichiers journaux du système"</string>
     <string name="permdesc_readLogs">"Permet à une application de lire les différents fichiers journaux du système afin d\'obtenir des informations générales sur la façon dont vous utilisez votre téléphone,  sans pour autant récupérer des informations d\'ordre personnel ou privé."</string>
-    <string name="permlab_diagnostic">"Lire/écrire dans les ressources appartenant aux diagnostics"</string>
+    <string name="permlab_diagnostic">"Lecture/écriture dans les ressources appartenant aux diagnostics"</string>
     <string name="permdesc_diagnostic">"Permet à une application de lire et d\'éditer toute ressource appartenant au groupe de diagnostics (par exemple, les fichiers in/dev). Ceci peut affecter la stabilité et la sécurité du système. Cette fonctionnalité est UNIQUEMENT réservée aux diagnostics matériels effectués par le fabricant ou l\'opérateur."</string>
     <string name="permlab_changeComponentState">"Activer ou désactiver des éléments de l\'application"</string>
     <string name="permdesc_changeComponentState">"Permet à une application d\'envoyer une notification lors de la réception d\'un message WAP PUSH. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux accusés de réception de MMS ou remplacer le contenu de toute page Web par des données malveillantes."</string>
-    <string name="permlab_setPreferredApplications">"Définir les applications préférées"</string>
+    <string name="permlab_setPreferredApplications">"Définition des applications préférées"</string>
     <string name="permdesc_setPreferredApplications">"Permet à une application de modifier vos applications préférées. Des applications malveillantes peuvent utiliser cette fonctionnalité pour modifier discrètement les applications en cours d\'exécution, en imitant vos applications existantes afin de récupérer des données personnelles vous concernant."</string>
-    <string name="permlab_writeSettings">"Modifier les paramètres généraux du système"</string>
-    <string name="permdesc_writeSettings">"Permet à une application de modifier les données des paramètres du système. Des applications malveillantes peuvent utiliser cette fonctionnalité pour corrompre la configuration de votre système."</string>
+    <string name="permlab_writeSettings">"Modification des paramètres généraux du système"</string>
+    <string name="permdesc_writeSettings">"Permet à une application de modifier les données des paramètres système. Des applications malveillantes peuvent utiliser cette fonctionnalité pour endommager la configuration de votre système."</string>
     <string name="permlab_writeSecureSettings">"Modifier les paramètres de sécurité du système"</string>
     <string name="permdesc_writeSecureSettings">"Permet à une application de modifier les données des paramètres de sécurité du système. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
-    <string name="permlab_writeGservices">"Modifier la carte des services Google"</string>
+    <string name="permlab_writeGservices">"Modification de la carte des services Google"</string>
     <string name="permdesc_writeGservices">"Permet à une application de modifier la carte des services Google. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
-    <string name="permlab_receiveBootCompleted">"Lancer automatiquement au démarrage"</string>
+    <string name="permlab_receiveBootCompleted">"Lancement automatique au démarrage"</string>
     <string name="permdesc_receiveBootCompleted">"Permet à une application de se lancer dès la fin du démarrage du système. Cela peut rallonger le temps de démarrage requis par le téléphone. L\'application étant alors constamment en cours d\'exécution, le fonctionnement général du téléphone risque d\'être ralenti."</string>
-    <string name="permlab_broadcastSticky">"Envoyer une diffusion persistante"</string>
+    <string name="permlab_broadcastSticky">"Envoi d\'une diffusion persistante"</string>
     <string name="permdesc_broadcastSticky">"Permet à une application d\'envoyer des diffusions \"persistantes\", qui perdurent après la fin de la diffusion. Des applications malveillantes peuvent ainsi ralentir le téléphone ou le rendre instable en l\'obligeant à utiliser trop de mémoire."</string>
-    <string name="permlab_readContacts">"Lire les données des contacts"</string>
+    <string name="permlab_readContacts">"Accès aux données des contacts"</string>
     <string name="permdesc_readContacts">"Permet à une application de lire toutes les données des contacts (adresses) enregistrées sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour envoyer vos données à d\'autres personnes."</string>
-    <string name="permlab_writeContacts">"Éditer les données d\'un contact"</string>
+    <string name="permlab_writeContacts">"Édition des données d\'un contact"</string>
     <string name="permdesc_writeContacts">"Permet à une application de modifier toutes les données de contact (adresses) enregistrées sur le téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier vos données de contact."</string>
-    <string name="permlab_writeOwnerData">"Éditer les données du propriétaire"</string>
+    <string name="permlab_writeOwnerData">"Édition les données du propriétaire"</string>
     <string name="permdesc_writeOwnerData">"Permet à une application de modifier les données du propriétaire du téléphone enregistrées sur votre appareil. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier ces données."</string>
-    <string name="permlab_readOwnerData">"Lire des données du propriétaire"</string>
+    <string name="permlab_readOwnerData">"Lecture des données du propriétaire"</string>
     <string name="permdesc_readOwnerData">"Permet à une application de lire les données du propriétaire du téléphone enregistrées sur votre appareil. Des applications malveillantes peuvent utiliser cette fonctionnalité pour lire ces données."</string>
-    <string name="permlab_readCalendar">"Lire les données de l\'agenda"</string>
+    <string name="permlab_readCalendar">"Lecture des données de l\'agenda"</string>
     <string name="permdesc_readCalendar">"Permet à une application de lire tous les événements de l\'agenda enregistrés sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour envoyer les événements de votre agenda à d\'autres personnes."</string>
-    <string name="permlab_writeCalendar">"Écrire les données de l\'agenda"</string>
+    <string name="permlab_writeCalendar">"Écriture des données de l\'agenda"</string>
     <string name="permdesc_writeCalendar">"Permet à une application de modifier les événements de l\'agenda enregistrés sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier les données de votre agenda."</string>
-    <string name="permlab_accessMockLocation">"Créer des sources géographiques fictives à des fins de test"</string>
+    <string name="permlab_accessMockLocation">"Création de sources géographiques fictives à des fins de test"</string>
     <string name="permdesc_accessMockLocation">"Permet de créer des sources de position géographique fictives à des fins de test. Des applications malveillantes peuvent utiliser cette fonctionnalité pour remplacer la position géographique et/ou l\'état fournis par des sources réelles comme le GPS ou les fournisseurs d\'accès."</string>
-    <string name="permlab_accessLocationExtraCommands">"Accéder à des commandes de fournisseur de position géographique supplémentaires"</string>
+    <string name="permlab_accessLocationExtraCommands">"Accès aux commandes de fournisseur de position géographique supplémentaires"</string>
     <string name="permdesc_accessLocationExtraCommands">"Permet d\'accéder à des commandes de fournisseur de position géographique supplémentaires. Des applications malveillantes peuvent utiliser cette fonctionnalité pour interférer avec l\'utilisation du GPS ou d\'autres sources de positionnement géographique."</string>
-    <string name="permlab_accessFineLocation">"Position géo. OK (GPS)"</string>
+    <string name="permlab_accessFineLocation">"Localisation OK (GPS)"</string>
     <string name="permdesc_accessFineLocation">"Permet d\'accéder à des sources de positionnement géographique précises comme le Global Positioning System (GPS) sur le téléphone, lorsque ces services sont disponibles. Des applications malveillantes peuvent utiliser cette fonctionnalité pour déterminer l\'endroit où vous vous trouvez et augmenter la consommation de la batterie de votre téléphone."</string>
     <string name="permlab_accessCoarseLocation">"Position géo. approximative (selon le réseau)"</string>
-    <string name="permdesc_accessCoarseLocation">"Accéder à des sources de positionnement géographique approximatif (par ex. des bases de données de réseaux mobiles) pour déterminer la position géographique du téléphone, lorsque cette option est disponible. Des applications malveillantes peuvent utiliser cette fonctionnalité pour déterminer approximativement l\'endroit où vous vous trouvez."</string>
-    <string name="permlab_accessSurfaceFlinger">"Accéder à SurfaceFlinger"</string>
+    <string name="permdesc_accessCoarseLocation">"Accès à des sources de positionnement approximatif (par ex. des bases de données de réseaux mobiles) pour déterminer la position géographique du téléphone, lorsque cette option est disponible. Des applications malveillantes peuvent utiliser cette fonctionnalité pour déterminer approximativement l\'endroit où vous vous trouvez."</string>
+    <string name="permlab_accessSurfaceFlinger">"Accès à SurfaceFlinger"</string>
     <string name="permdesc_accessSurfaceFlinger">"Permet à certaines applications d\'utiliser les fonctionnalités SurfaceFlinger de bas niveau."</string>
-    <string name="permlab_readFrameBuffer">"Lire la mémoire tampon graphique"</string>
+    <string name="permlab_readFrameBuffer">"Lecture de la mémoire tampon graphique"</string>
     <string name="permdesc_readFrameBuffer">"Permet aux applications de lire/utiliser le contenu de la mémoire tampon graphique."</string>
-    <string name="permlab_modifyAudioSettings">"Modifier vos paramètres audio"</string>
+    <string name="permlab_modifyAudioSettings">"Modification de vos paramètres audio"</string>
     <string name="permdesc_modifyAudioSettings">"Permet à l\'application de modifier les paramètres audio généraux (p. ex. le volume et le routage)."</string>
-    <string name="permlab_recordAudio">"Enregistrer un fichier audio"</string>
+    <string name="permlab_recordAudio">"Enregistrement de fichier audio"</string>
     <string name="permdesc_recordAudio">"Permet à l\'application d\'accéder au chemin de l\'enregistrement audio."</string>
-    <string name="permlab_camera">"Prendre des photos"</string>
+    <string name="permlab_camera">"Prise de photos"</string>
     <string name="permdesc_camera">"Permet à l\'application de prendre des clichés avec l\'appareil photo. Cette fonctionnalité permet à l\'application de récupérer à tout moment les images perçues par l\'appareil."</string>
-    <string name="permlab_brick">"Désactiver définitivement le téléphone"</string>
+    <string name="permlab_brick">"Désactivation définitive du téléphone"</string>
     <string name="permdesc_brick">"Permet à l\'application de désactiver définitivement le téléphone. Cette fonctionnalité est très dangereuse."</string>
-    <string name="permlab_reboot">"Forcer le redémarrage du téléphone"</string>
+    <string name="permlab_reboot">"Redémarrage forcé du téléphone"</string>
     <string name="permdesc_reboot">"Permet à l\'application de forcer le redémarrage du téléphone."</string>
     <string name="permlab_mount_unmount_filesystems">"Monter et démonter des systèmes de fichiers"</string>
     <string name="permdesc_mount_unmount_filesystems">"Permet à l\'application de monter et démonter des systèmes de fichiers pour des périphériques de stockage amovibles."</string>
-    <string name="permlab_mount_format_filesystems">"formater le périphérique de stockage externe"</string>
+    <string name="permlab_mount_format_filesystems">"Formatage du périphérique de stockage externe"</string>
     <string name="permdesc_mount_format_filesystems">"Permet à l\'application de formater le périphérique de stockage amovible."</string>
-    <string name="permlab_vibrate">"Contrôler le vibreur"</string>
+    <string name="permlab_vibrate">"Contrôle du vibreur"</string>
     <string name="permdesc_vibrate">"Permet à l\'application de contrôler le vibreur."</string>
-    <string name="permlab_flashlight">"Contrôler la lampe de poche"</string>
+    <string name="permlab_flashlight">"Contrôle de la lampe de poche"</string>
     <string name="permdesc_flashlight">"Permet à l\'application de contrôler la lampe de poche."</string>
-    <string name="permlab_hardware_test">"Tester le matériel"</string>
+    <string name="permlab_hardware_test">"Tests du matériel"</string>
     <string name="permdesc_hardware_test">"Permet à l\'application de contrôler différents périphériques à des fins de test matériel."</string>
-    <string name="permlab_callPhone">"Appeler directement des numéros de téléphone"</string>
-    <string name="permdesc_callPhone">"Permet à l\'application d\'appeler des numéros de téléphone sans votre intervention. Des applications malveillantes peuvent ainsi passer appels non désirés , qui s\'ajoutent à votre facture téléphonique. Sachez que cette fonctionnalité ne permet pas à l\'application d\'appeler des numéros d\'urgence."</string>
-    <string name="permlab_callPrivileged">"Appeler directement tout numéro de téléphone"</string>
+    <string name="permlab_callPhone">"Appel direct des numéros de téléphone"</string>
+    <string name="permdesc_callPhone">"Permet à l\'application d\'appeler des numéros sans votre intervention. Des applications malveillantes peuvent ainsi passer des appels à votre insu qui s\'ajoutent à votre facture téléphonique. Cette fonctionnalité ne permet pas à l\'application d\'appeler des numéros d\'urgence."</string>
+    <string name="permlab_callPrivileged">"Appel direct de tout numéro de téléphone"</string>
     <string name="permdesc_callPrivileged">"Permet à une application d\'appeler tout numéro de téléphone (y compris les numéros d\'urgence) sans votre intervention. Des applications malveillantes peuvent passer des appels non nécessaires ou illégitimes à des services d\'urgence."</string>
-    <string name="permlab_locationUpdates">"Contrôler les notifications de mise à jour de position géographique"</string>
+    <string name="permlab_locationUpdates">"Contrôle des notifications de mise à jour de position géo."</string>
     <string name="permdesc_locationUpdates">"Permet l\'activation/la désactivation des notifications de mises à jour de la position géographique provenant de la radio. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
-    <string name="permlab_checkinProperties">"Accéder aux propriétés d\'enregistrement"</string>
+    <string name="permlab_checkinProperties">"Accès aux propriétés d\'enregistrement"</string>
     <string name="permdesc_checkinProperties">"Permet un accès en lecture/écriture à des propriétés envoyées par le service d\'inscription. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
     <string name="permlab_bindGadget">"choisir les gadgets"</string>
     <string name="permdesc_bindGadget">"Permet à l\'application de signaler au système quels gadgets peuvent être utilisés pour quelle application. Cette autorisation permet aux applications de fournir l\'accès à des données personnelles à d\'autres applications. Cette option n\'est pas utilisée par les applications standard."</string>
-    <string name="permlab_modifyPhoneState">"Modifier l\'état du téléphone"</string>
-    <string name="permdesc_modifyPhoneState">"Permet à une application de contrôler les fonctionnalités téléphoniques de l\'appareil. Une application bénéficiant de cette autorisation peut changer de réseau, éteindre et allumer la radio du téléphone, etc., sans vous en notifier."</string>
-    <string name="permlab_readPhoneState">"Lire l\'état du téléphone"</string>
+    <string name="permlab_modifyPhoneState">"Modification de l\'état du téléphone"</string>
+    <string name="permdesc_modifyPhoneState">"Permet à une application de contrôler les fonctionnalités téléphoniques de l\'appareil. Une application bénéficiant de cette autorisation peut changer de réseau, éteindre et allumer la radio du téléphone, etc., sans vous en avertir."</string>
+    <string name="permlab_readPhoneState">"Lecture de l\'état du téléphone"</string>
     <string name="permdesc_readPhoneState">"Permet à l\'application d\'accéder aux fonctionnalités d\'appel du téléphone. L\'application peut alors déterminer le numéro de téléphone de l\'appareil, savoir si un appel est en cours, identifier le numéro appelé, etc."</string>
-    <string name="permlab_wakeLock">"Empêcher le téléphone de passer en mode veille"</string>
+    <string name="permlab_wakeLock">"Arrêt du mode veille sur le téléphone"</string>
     <string name="permdesc_wakeLock">"Permet à une application d\'empêcher votre téléphone de passer en mode veille."</string>
     <string name="permlab_devicePower">"Éteindre ou allumer le téléphone"</string>
     <string name="permdesc_devicePower">"Permet à l\'application d\'éteindre et d\'allumer le téléphone."</string>
-    <string name="permlab_factoryTest">"Exécuter en mode Test d\'usine"</string>
+    <string name="permlab_factoryTest">"Exécution en mode Test d\'usine"</string>
     <string name="permdesc_factoryTest">"Permet d\'exécuter en tant que test fabricant de faible niveau en autorisant l\'accès au matériel du téléphone. Cette fonctionnalité est uniquement disponible lorsque le téléphone est en mode de test fabricant."</string>
-    <string name="permlab_setWallpaper">"Configurer le fond d\'écran"</string>
-    <string name="permdesc_setWallpaper">"Permet à une application de définir le fond d\'écran du système."</string>
-    <string name="permlab_setWallpaperHints">"Définir les informations relatives à la taille du fond d\'écran"</string>
-    <string name="permdesc_setWallpaperHints">"Permet à une application de définir les informations relatives à la taille du fond d\'écran du système."</string>
-    <string name="permlab_masterClear">"Réinitialiser le système à ses paramètres d\'usine"</string>
-    <string name="permdesc_masterClear">"Permet à une application de réinitialiser entièrement le système afin qu\'il récupère ses valeurs d\'usine et d\'effacer toutes les données, configurations et applications installées."</string>
-    <string name="permlab_setTimeZone">"Définir le fuseau horaire"</string>
+    <string name="permlab_setWallpaper">"Configuration du fond d\'écran"</string>
+    <string name="permdesc_setWallpaper">"Permet à une application de définir l\'arrière-plan du système."</string>
+    <string name="permlab_setWallpaperHints">"Sélection de la la taille du fond d\'écran"</string>
+    <string name="permdesc_setWallpaperHints">"Permet à une application de définir la taille d\'arrière-plan du système."</string>
+    <string name="permlab_masterClear">"Réinitialisation du système à ses paramètres d\'usine"</string>
+    <string name="permdesc_masterClear">"Permet à une application de réinitialiser entièrement le système afin de rétablir ses valeurs d\'usine et d\'effacer toutes les données, configurations et applications installées."</string>
+    <string name="permlab_setTimeZone">"Sélection du fuseau horaire"</string>
     <string name="permdesc_setTimeZone">"Permet à l\'application de modifier le fuseau horaire du téléphone."</string>
-    <string name="permlab_getAccounts">"Identifier des comptes connus"</string>
+    <string name="permlab_getAccounts">"Identification des comptes connus"</string>
     <string name="permdesc_getAccounts">"Permet à une application d\'obtenir la liste des comptes connus du téléphone."</string>
-    <string name="permlab_accessNetworkState">"Afficher l\'état du réseau"</string>
+    <string name="permlab_accessNetworkState">"Affichage de l\'état du réseau"</string>
     <string name="permdesc_accessNetworkState">"Permet à une application d\'afficher l\'état de tous les réseaux."</string>
     <string name="permlab_createNetworkSockets">"Accès Internet complet"</string>
     <string name="permdesc_createNetworkSockets">"Permet à une application de créer des connecteurs réseau."</string>
-    <string name="permlab_writeApnSettings">"Écrire les paramètres de Nom des points d\'accès"</string>
+    <string name="permlab_writeApnSettings">"Écriture des paramètres \"Nom des points d\'accès\""</string>
     <string name="permdesc_writeApnSettings">"Permet à une application de modifier les paramètres APN (Nom des points d\'accès), comme le proxy ou le port de tout APN."</string>
-    <string name="permlab_changeNetworkState">"Modifier la connectivité du réseau"</string>
+    <string name="permlab_changeNetworkState">"Modification de la connectivité du réseau"</string>
     <string name="permdesc_changeNetworkState">"Permet à une application de modifier la connectivité du réseau."</string>
     <string name="permlab_changeBackgroundDataSetting">"modifier le paramètre d\'utilisation des données en arrière-plan"</string>
     <string name="permdesc_changeBackgroundDataSetting">"Permet à une application de modifier le paramètre d\'utilisation des données en arrière-plan."</string>
-    <string name="permlab_accessWifiState">"Afficher l\'état du Wi-Fi"</string>
+    <string name="permlab_accessWifiState">"Affichage de l\'état du Wi-Fi"</string>
     <string name="permdesc_accessWifiState">"Permet à une application d\'afficher des informations concernant l\'état du Wi-Fi."</string>
     <string name="permlab_changeWifiState">"Modifier l\'état du Wi-Fi"</string>
     <string name="permdesc_changeWifiState">"Permet à une application de se connecter à des points d\'accès Wi-Fi, de s\'en déconnecter et de modifier des réseaux Wi-Fi configurés."</string>
     <string name="permlab_bluetoothAdmin">"Gestion Bluetooth"</string>
     <string name="permdesc_bluetoothAdmin">"Permet à une application de configurer le téléphone Bluetooth local, d\'identifier des périphériques distants et de les associer au téléphone."</string>
-    <string name="permlab_bluetooth">"Créer des connexions Bluetooth"</string>
+    <string name="permlab_bluetooth">"Création de connexions Bluetooth"</string>
     <string name="permdesc_bluetooth">"Permet à une application d\'obtenir la configuration du téléphone Bluetooth local et de créer et accepter des connexions à des appareils associés."</string>
-    <string name="permlab_disableKeyguard">"Désactiver le verrouillage des touches"</string>
+    <string name="permlab_disableKeyguard">"Désactivation du verrouillage des touches"</string>
     <string name="permdesc_disableKeyguard">"Permet à une application de désactiver le verrouillage des touches et toute sécurité par mot de passe. Exemple : Votre téléphone désactive le verrouillage du clavier lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez."</string>
-    <string name="permlab_readSyncSettings">"Lire les paramètres de synchronisation"</string>
+    <string name="permlab_readSyncSettings">"Lecture des paramètres de synchronisation"</string>
     <string name="permdesc_readSyncSettings">"Permet à une application de lire les paramètres de synchronisation (par ex. savoir si la synchronisation est activée pour les Contacts)."</string>
-    <string name="permlab_writeSyncSettings">"Écrire les paramètres de synchronisation"</string>
+    <string name="permlab_writeSyncSettings">"Écriture des paramètres de synchronisation"</string>
     <string name="permdesc_writeSyncSettings">"Permet à une application de modifier les paramètres de synchronisation (p. ex. si la synchronisation est activée pour les contacts)."</string>
-    <string name="permlab_readSyncStats">"Lire les statistiques de synchronisation"</string>
+    <string name="permlab_readSyncStats">"Lecture des statistiques de synchronisation"</string>
     <string name="permdesc_readSyncStats">"Permet à une application de lire les statistiques de synchronisation (par ex. l\'historique des synchronisations effectuées)."</string>
-    <string name="permlab_subscribedFeedsRead">"Lire les flux auxquels vous êtes abonné"</string>
+    <string name="permlab_subscribedFeedsRead">"Lecture des flux auxquels vous êtes abonné"</string>
     <string name="permdesc_subscribedFeedsRead">"Permet à une application d\'obtenir des informations sur les flux récemment synchronisés."</string>
-    <string name="permlab_subscribedFeedsWrite">"Écrire les flux auxquels vous êtes abonné"</string>
+    <string name="permlab_subscribedFeedsWrite">"Écriture des flux auxquels vous êtes abonné"</string>
     <string name="permdesc_subscribedFeedsWrite">"Permet à une application de modifier vos flux synchronisés actuels. Cette fonctionnalité peut permettre à des applications malveillantes de modifier vos flux synchronisés."</string>
-    <string name="permlab_readDictionary">"lire le dictionnaire défini par l\'utilisateur"</string>
+    <string name="permlab_readDictionary">"Lecture du dictionnaire défini par l\'utilisateur"</string>
     <string name="permdesc_readDictionary">"Permet à une application de lire tous les mots, noms et expressions que l\'utilisateur a pu enregistrer dans son dictionnaire personnel."</string>
-    <string name="permlab_writeDictionary">"enregistrer dans le dictionnaire défini par l\'utilisateur"</string>
+    <string name="permlab_writeDictionary">"Enregistrement dans le dictionnaire défini par l\'utilisateur"</string>
     <string name="permdesc_writeDictionary">"Permet à une application d\'enregistrer de nouveaux mots dans le dictionnaire personnel de l\'utilisateur."</string>
   <string-array name="phoneTypes">
     <item>"Domicile"</item>
@@ -388,8 +396,9 @@
     <string name="lockscreen_pattern_instructions">"Dessinez un motif pour déverrouiller le téléphone"</string>
     <string name="lockscreen_emergency_call">"Appel d\'urgence"</string>
     <string name="lockscreen_pattern_correct">"Combinaison correcte !"</string>
-    <string name="lockscreen_pattern_wrong">"Désolé. Merci de réessayer"</string>
-    <string name="lockscreen_plugged_in">"Chargement (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <string name="lockscreen_pattern_wrong">"Désolé. Merci de réessayer."</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Branchez votre chargeur."</string>
     <string name="lockscreen_missing_sim_message_short">"Aucune carte SIM n\'a été trouvée."</string>
     <string name="lockscreen_missing_sim_message">"Aucune carte SIM n\'est insérée dans le téléphone."</string>
@@ -404,7 +413,7 @@
     <string name="lockscreen_too_many_failed_attempts_countdown">"Réessayez dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string>
     <string name="lockscreen_forgot_pattern_button_text">"Motif oublié ?"</string>
     <string name="lockscreen_glogin_too_many_attempts">"Trop de tentatives de motif !"</string>
-    <string name="lockscreen_glogin_instructions">"Pour débloquer votre téléphone,"\n"connectez-vous à votre compte Google"</string>
+    <string name="lockscreen_glogin_instructions">"Pour débloquer votre téléphone,"\n"connectez-vous à l\'aide de votre compte Google"</string>
     <string name="lockscreen_glogin_username_hint">"Nom d\'utilisateur (e-mail)"</string>
     <string name="lockscreen_glogin_password_hint">"Mot de passe"</string>
     <string name="lockscreen_glogin_submit_button">"Se connecter"</string>
@@ -412,20 +421,19 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Effacer les notifications"</string>
     <string name="status_bar_no_notifications_title">"Aucune notification"</string>
     <string name="status_bar_ongoing_events_title">"En cours"</string>
     <string name="status_bar_latest_events_title">"Notifications"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
-    <skip />
+    <string name="battery_status_text_percent_format">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="battery_status_charging">"Chargement..."</string>
     <string name="battery_low_title">"Branchez le chargeur"</string>
-    <string name="battery_low_subtitle">"La batterie commence à faiblir :"</string>
-    <string name="battery_low_percent_format">"Batterie restante : <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
+    <string name="battery_low_subtitle">"Le niveau de la batterie est bas :"</string>
+    <string name="battery_low_percent_format">"Batterie restante inférieure à <xliff:g id="NUMBER">%d%%</xliff:g>."</string>
     <string name="factorytest_failed">"Échec du test usine"</string>
     <string name="factorytest_not_system">"L\'action FACTORY_TEST est uniquement prise en charge pour les paquets de données installés dans in/system/app."</string>
     <string name="factorytest_no_action">"Impossible de trouver un paquet proposant l\'action FACTORY_TEST."</string>
@@ -548,7 +556,7 @@
     <string name="am">"AM"</string>
     <string name="pm">"PM"</string>
     <string name="numeric_date">"<xliff:g id="DAY">%d</xliff:g>/<xliff:g id="MONTH">%m</xliff:g>/<xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <string name="wday1_date1_time1_wday2_date2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g> <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g> <xliff:g id="TIME2">%6$s</xliff:g>"</string>
+    <string name="wday1_date1_time1_wday2_date2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g> <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
     <string name="wday1_date1_wday2_date2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g>"</string>
     <string name="date1_time1_date2_time2">"<xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
     <string name="date1_date2">"<xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>"</string>
@@ -569,17 +577,16 @@
     <string name="Noon">"Midi"</string>
     <string name="midnight">"minuit"</string>
     <string name="Midnight">"Minuit"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
-    <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <string name="month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>"</string>
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
     <string name="same_year_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
-    <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
+    <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
     <string name="same_year_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR">%9$s</xliff:g>"</string>
     <string name="same_year_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR">%9$s</xliff:g>"</string>
     <string name="same_year_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
@@ -587,27 +594,26 @@
     <string name="same_year_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="numeric_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
-    <string name="numeric_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
+    <string name="numeric_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
     <string name="numeric_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
     <string name="numeric_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
     <string name="numeric_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="numeric_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="numeric_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>"</string>
     <string name="same_month_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
     <string name="same_month_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
-    <string name="same_month_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
+    <string name="same_month_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
     <string name="same_month_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
-    <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+    <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
-    <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <string name="abbrev_month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g>"</string>
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"dimanche"</string>
     <string name="day_of_week_long_monday">"lundi"</string>
@@ -617,33 +623,33 @@
     <string name="day_of_week_long_friday">"vendredi"</string>
     <string name="day_of_week_long_saturday">"samedi"</string>
     <string name="day_of_week_medium_sunday">"dim."</string>
-    <string name="day_of_week_medium_monday">"lun."</string>
-    <string name="day_of_week_medium_tuesday">"mar."</string>
-    <string name="day_of_week_medium_wednesday">"mer."</string>
-    <string name="day_of_week_medium_thursday">"jeu."</string>
-    <string name="day_of_week_medium_friday">"ven."</string>
-    <string name="day_of_week_medium_saturday">"sam."</string>
-    <string name="day_of_week_short_sunday">"dim."</string>
-    <string name="day_of_week_short_monday">"lun."</string>
-    <string name="day_of_week_short_tuesday">"mar."</string>
-    <string name="day_of_week_short_wednesday">"mer."</string>
-    <string name="day_of_week_short_thursday">"jeu."</string>
-    <string name="day_of_week_short_friday">"ven."</string>
-    <string name="day_of_week_short_saturday">"sam."</string>
-    <string name="day_of_week_shorter_sunday">"dim."</string>
-    <string name="day_of_week_shorter_monday">"lun."</string>
-    <string name="day_of_week_shorter_tuesday">"mar."</string>
-    <string name="day_of_week_shorter_wednesday">"mer."</string>
-    <string name="day_of_week_shorter_thursday">"jeu."</string>
-    <string name="day_of_week_shorter_friday">"ven."</string>
+    <string name="day_of_week_medium_monday">"Lun"</string>
+    <string name="day_of_week_medium_tuesday">"Mar"</string>
+    <string name="day_of_week_medium_wednesday">"Mer"</string>
+    <string name="day_of_week_medium_thursday">"Jeu"</string>
+    <string name="day_of_week_medium_friday">"Ven"</string>
+    <string name="day_of_week_medium_saturday">"Sam"</string>
+    <string name="day_of_week_short_sunday">"Dim"</string>
+    <string name="day_of_week_short_monday">"Lun"</string>
+    <string name="day_of_week_short_tuesday">"Mar"</string>
+    <string name="day_of_week_short_wednesday">"Mer"</string>
+    <string name="day_of_week_short_thursday">"Jeu"</string>
+    <string name="day_of_week_short_friday">"Ven"</string>
+    <string name="day_of_week_short_saturday">"Sam"</string>
+    <string name="day_of_week_shorter_sunday">"Dim"</string>
+    <string name="day_of_week_shorter_monday">"Lun"</string>
+    <string name="day_of_week_shorter_tuesday">"Mar"</string>
+    <string name="day_of_week_shorter_wednesday">"Mer"</string>
+    <string name="day_of_week_shorter_thursday">"Jeu"</string>
+    <string name="day_of_week_shorter_friday">"Ven"</string>
     <string name="day_of_week_shorter_saturday">"sam."</string>
-    <string name="day_of_week_shortest_sunday">"dim."</string>
-    <string name="day_of_week_shortest_monday">"lun."</string>
-    <string name="day_of_week_shortest_tuesday">"Mar."</string>
-    <string name="day_of_week_shortest_wednesday">"mer."</string>
-    <string name="day_of_week_shortest_thursday">"jeu."</string>
-    <string name="day_of_week_shortest_friday">"ven."</string>
-    <string name="day_of_week_shortest_saturday">"sam."</string>
+    <string name="day_of_week_shortest_sunday">"Dim"</string>
+    <string name="day_of_week_shortest_monday">"Lun"</string>
+    <string name="day_of_week_shortest_tuesday">"Mar"</string>
+    <string name="day_of_week_shortest_wednesday">"Mer"</string>
+    <string name="day_of_week_shortest_thursday">"Jeu"</string>
+    <string name="day_of_week_shortest_friday">"Ven"</string>
+    <string name="day_of_week_shortest_saturday">"Sam"</string>
     <string name="month_long_january">"janvier"</string>
     <string name="month_long_february">"février"</string>
     <string name="month_long_march">"mars"</string>
@@ -669,7 +675,7 @@
     <string name="month_medium_november">"nov."</string>
     <string name="month_medium_december">"déc."</string>
     <string name="month_shortest_january">"jan."</string>
-    <string name="month_shortest_february">"ven."</string>
+    <string name="month_shortest_february">"Ven"</string>
     <string name="month_shortest_march">"mars"</string>
     <string name="month_shortest_april">"avr."</string>
     <string name="month_shortest_may">"mai"</string>
@@ -684,7 +690,7 @@
     <string name="elapsed_time_short_format_h_mm_ss">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
     <string name="selectAll">"Tout sélectionner"</string>
     <string name="selectText">"Sélectionner le texte"</string>
-    <string name="stopSelectingText">"Arrêter de sélectionner du texte"</string>
+    <string name="stopSelectingText">"Arrêter sélection de texte"</string>
     <string name="cut">"Couper"</string>
     <string name="cutAll">"Tout couper"</string>
     <string name="copy">"Copier"</string>
@@ -703,13 +709,13 @@
     <string name="dialog_alert_title">"Attention"</string>
     <string name="capital_on">"ON"</string>
     <string name="capital_off">"OFF"</string>
-    <string name="whichApplication">"Terminer l\'action avec"</string>
-    <string name="alwaysUse">"Utiliser cette application par défaut pour cette action."</string>
-    <string name="clearDefaultHintMsg">"Effacez les paramètres par défaut dans les Paramètres d\'accueil &gt; Applications &gt; Gérer les applications."</string>
+    <string name="whichApplication">"Continuer avec"</string>
+    <string name="alwaysUse">"Utiliser cette application par défaut pour cette action"</string>
+    <string name="clearDefaultHintMsg">"Effacer les paramètres par défaut dans les Paramètres de page d\'accueil &gt; Applications &gt; Gérer les applications."</string>
     <string name="chooseActivity">"Sélectionner une action"</string>
     <string name="noApplications">"Aucune application ne peut effectuer cette action."</string>
     <string name="aerr_title">"Désolé !"</string>
-    <string name="aerr_application">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>) s\'est interrompue inopinément. Merci de réessayer."</string>
+    <string name="aerr_application">"Fermeture soudaine de l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>). Merci de réessayer."</string>
     <string name="aerr_process">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> s\'est interrompu de façon inopinée. Merci de réessayer."</string>
     <string name="anr_title">"Désolé !"</string>
     <string name="anr_activity_application">"L\'activité <xliff:g id="ACTIVITY">%1$s</xliff:g> (de l\'application <xliff:g id="APPLICATION">%2$s</xliff:g>) ne répond pas."</string>
@@ -721,11 +727,11 @@
     <string name="debug">"Débogage"</string>
     <string name="sendText">"Sélectionner une action pour le texte"</string>
     <string name="volume_ringtone">"Volume de la sonnerie"</string>
-    <string name="volume_music">"Volume des médias"</string>
+    <string name="volume_music">"Volume"</string>
     <string name="volume_music_hint_playing_through_bluetooth">"Lecture via Bluetooth"</string>
     <string name="volume_call">"Volume des appels entrants"</string>
     <string name="volume_bluetooth_call">"Volume d\'appels entrants sur Bluetooth"</string>
-    <string name="volume_alarm">"Volume de l\'alarme"</string>
+    <string name="volume_alarm">"Volume"</string>
     <string name="volume_notification">"Volume des notifications"</string>
     <string name="volume_unknown">"Volume"</string>
     <string name="ringtone_default">"Sonnerie par défaut"</string>
@@ -759,7 +765,7 @@
     <string name="usb_storage_button_unmount">"Ne pas monter"</string>
     <string name="usb_storage_error_message">"Un problème est survenu lors de l\'utilisation de votre carte SD en tant que périphérique de stockage USB."</string>
     <string name="usb_storage_notification_title">"Connecté avec un câble USB"</string>
-    <string name="usb_storage_notification_message">"Sélectionnez cette option pour copier des fichiers vers/à partir de votre ordinateur."</string>
+    <string name="usb_storage_notification_message">"Activez pour copier des fichiers vers/de votre ordinateur."</string>
     <string name="usb_storage_stop_notification_title">"Éteindre le périphérique de stockage USB"</string>
     <string name="usb_storage_stop_notification_message">"Sélectionner pour éteindre le périphérique de stockage USB"</string>
     <string name="usb_storage_stop_title">"Éteindre le périphérique de stockage USB"</string>
@@ -771,15 +777,15 @@
     <string name="extmedia_format_message">"Voulez-vous vraiment formater la carte SD ? Toutes les données de cette carte seront perdues."</string>
     <string name="extmedia_format_button_format">"Format"</string>
     <string name="select_input_method">"Sélectionner un mode de saisie"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"candidats"</u></string>
     <string name="ext_media_checking_notification_title">"Préparation de la carte SD"</string>
     <string name="ext_media_checking_notification_message">"Recherche d\'erreurs"</string>
     <string name="ext_media_nofs_notification_title">"Carte SD vide"</string>
     <string name="ext_media_nofs_notification_message">"La carte SD est vide ou utilise un système de fichiers non pris en charge."</string>
     <string name="ext_media_unmountable_notification_title">"Carte SD endommagée"</string>
-    <string name="ext_media_unmountable_notification_message">"La carte SD est endommagée. Vous devez peut-être reformater votre carte."</string>
+    <string name="ext_media_unmountable_notification_message">"La carte SD est endommagée. Vous devrez peut-être reformater votre carte."</string>
     <string name="ext_media_badremoval_notification_title">"Carte SD retirée inopinément"</string>
     <string name="ext_media_badremoval_notification_message">"Désactiver la carte SD avant de la retirer pour éviter toute perte de données."</string>
     <string name="ext_media_safe_unmount_notification_title">"La carte SD peut être retirée en toute sécurité"</string>
@@ -789,6 +795,17 @@
     <string name="activity_list_empty">"Aucune activité correspondante trouvée"</string>
     <string name="permlab_pkgUsageStats">"mettre à jour les données statistiques du composant"</string>
     <string name="permdesc_pkgUsageStats">"Permet de modifier les données statistiques collectées du composant. Cette option n\'est pas utilisée par les applications standard."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <string name="tutorial_double_tap_to_zoom_message_short">"Tapez deux fois pour le zoom"</string>
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 2ac9699..b4cf458 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"Modalità silenziosa"</string>
     <string name="global_action_silent_mode_on_status">"Audio non attivo"</string>
     <string name="global_action_silent_mode_off_status">"Audio attivo"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Modalità provvisoria"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Servizi che prevedono un costo"</string>
     <string name="permgroupdesc_costMoney">"Consentono alle applicazioni di svolgere operazioni che possono comportare un costo."</string>
     <string name="permgrouplab_messages">"I tuoi messaggi"</string>
@@ -126,246 +134,246 @@
     <string name="permgroupdesc_developmentTools">"Funzionalità necessarie soltanto agli sviluppatori di applicazioni."</string>
     <string name="permlab_statusBar">"disattivare o modificare la barra di stato"</string>
     <string name="permdesc_statusBar">"Consente all\'applicazione di disattivare la barra di stato o di aggiungere e rimuovere icone di sistema."</string>
-    <string name="permlab_expandStatusBar">"espandere/comprimere la barra di stato"</string>
+    <string name="permlab_expandStatusBar">"espansione/compressione barra di stato"</string>
     <string name="permdesc_expandStatusBar">"Consente all\'applicazione di espandere o comprimere la barra di stato."</string>
-    <string name="permlab_processOutgoingCalls">"intercettare chiamate in uscita"</string>
+    <string name="permlab_processOutgoingCalls">"intercettazione chiamate in uscita"</string>
     <string name="permdesc_processOutgoingCalls">"Consente all\'applicazione di elaborare le chiamate in uscita e di modificare il numero da comporre. Le applicazioni dannose potrebbero monitorare, deviare o impedire le chiamate in uscita."</string>
-    <string name="permlab_receiveSms">"ricevere SMS"</string>
+    <string name="permlab_receiveSms">"ricezione SMS"</string>
     <string name="permdesc_receiveSms">"Consente il ricevimento e l\'elaborazione di SMS da parte dell\'applicazione. Le applicazioni dannose potrebbero monitorare i messaggi o eliminarli senza visualizzarli."</string>
-    <string name="permlab_receiveMms">"ricevere MMS"</string>
+    <string name="permlab_receiveMms">"ricezione MMS"</string>
     <string name="permdesc_receiveMms">"Consente il ricevimento e l\'elaborazione di MMS da parte dell\'applicazione. Le applicazioni dannose potrebbero monitorare i messaggi o eliminarli senza visualizzarli."</string>
-    <string name="permlab_sendSms">"inviare SMS"</string>
+    <string name="permlab_sendSms">"invio SMS"</string>
     <string name="permdesc_sendSms">"Consente all\'applicazione di inviare messaggi SMS. Le applicazioni dannose potrebbero inviare messaggi a tua insaputa facendoti sostenere dei costi."</string>
-    <string name="permlab_readSms">"leggere SMS o MMS"</string>
+    <string name="permlab_readSms">"lettura SMS o MMS"</string>
     <string name="permdesc_readSms">"Consente all\'applicazione di leggere SMS memorizzati sul telefono o sulla SIM. Le applicazioni dannose potrebbero leggere messaggi riservati."</string>
-    <string name="permlab_writeSms">"modificare SMS o MMS"</string>
+    <string name="permlab_writeSms">"modifica SMS o MMS"</string>
     <string name="permdesc_writeSms">"Consente all\'applicazione di rispondere a SMS memorizzati sul telefono o sulla SIM. Le applicazioni dannose potrebbero eliminare i messaggi."</string>
-    <string name="permlab_receiveWapPush">"ricevere WAP"</string>
+    <string name="permlab_receiveWapPush">"ricezione WAP"</string>
     <string name="permdesc_receiveWapPush">"Consente il ricevimento e l\'elaborazione di messaggi WAP da parte dell\'applicazione. Le applicazioni dannose potrebbero monitorare i messaggi o eliminarli senza visualizzarli."</string>
-    <string name="permlab_getTasks">"recuperare applicazioni in esecuzione"</string>
+    <string name="permlab_getTasks">"recupero applicazioni in esecuzione"</string>
     <string name="permdesc_getTasks">"Consente all\'applicazione di recuperare informazioni sulle attività in esecuzione ed eseguite di recente. Le applicazioni dannose potrebbero essere in grado di scoprire informazioni riservate su altre applicazioni."</string>
-    <string name="permlab_reorderTasks">"ridisporre applicazioni in esecuzione"</string>
+    <string name="permlab_reorderTasks">"riordinamento applicazioni in esecuz."</string>
     <string name="permdesc_reorderTasks">"Consente a un\'applicazione di spostare attività in primo e secondo piano. Le applicazioni dannose possono imporsi ponendosi automaticamente in primo piano."</string>
-    <string name="permlab_setDebugApp">"attivare il debug delle applicazioni"</string>
+    <string name="permlab_setDebugApp">"attivazione debug delle applicazioni"</string>
     <string name="permdesc_setDebugApp">"Consente a un\'applicazione di attivare il debug per un\'altra applicazione. Le applicazioni dannose possono sfruttare questa possibilità per interrompere altre applicazioni."</string>
-    <string name="permlab_changeConfiguration">"cambiare le impostazioni della UI"</string>
+    <string name="permlab_changeConfiguration">"modifica impostazioni UI"</string>
     <string name="permdesc_changeConfiguration">"Consente a un\'applicazione di modificare la configurazione corrente, come le dimensioni dei caratteri locali o complessive."</string>
-    <string name="permlab_restartPackages">"riavviare altre applicazioni"</string>
+    <string name="permlab_restartPackages">"riavvio altre applicazioni"</string>
     <string name="permdesc_restartPackages">"Consente a un\'applicazione di riavviare forzatamente altre applicazioni."</string>
     <string name="permlab_setProcessForeground">"impedire l\'interruzione"</string>
     <string name="permdesc_setProcessForeground">"Consente a un\'applicazione di eseguire i processi in primo piano in modo che non possano essere interrotti. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
-    <string name="permlab_forceBack">"forzare la chiusura delle applicazioni"</string>
+    <string name="permlab_forceBack">"chiusura forzata dell\'applicazione"</string>
     <string name="permdesc_forceBack">"Consente a un\'applicazione di forzare la chiusura di attività in primo piano. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
-    <string name="permlab_dump">"recuperare lo stato interno del sistema"</string>
+    <string name="permlab_dump">"recupero stato interno del sistema"</string>
     <string name="permdesc_dump">"Consente all\'applicazione di recuperare lo stato interno del sistema. Le applicazioni dannose potrebbero recuperare molte informazioni riservate e protette di cui non dovrebbero avere mai bisogno."</string>
-    <string name="permlab_addSystemService">"pubblicare servizi di basso livello"</string>
+    <string name="permlab_addSystemService">"pubblicaz. servizi di basso livello"</string>
     <string name="permdesc_addSystemService">"Consente a un\'applicazione di pubblicare i suoi servizi di sistema di basso livello. Le applicazioni dannose potrebbero assumere il controllo del sistema e impossessarsi di dati o danneggiarli."</string>
-    <string name="permlab_runSetActivityWatcher">"monitorare e controllare l\'avvio di tutte le applicazioni"</string>
+    <string name="permlab_runSetActivityWatcher">"monitoraggio e controllo avvio applicazioni"</string>
     <string name="permdesc_runSetActivityWatcher">"Consente a un\'applicazione di monitorare e controllare la modalità di avvio delle attività nel sistema. Le applicazioni dannose potrebbero compromettere totalmente il sistema. Questa autorizzazione è necessaria soltanto per lo sviluppo, mai per il normale utilizzo del telefono."</string>
-    <string name="permlab_broadcastPackageRemoved">"inviare broadcast rimossi dal pacchetto"</string>
+    <string name="permlab_broadcastPackageRemoved">"invio broadcast rimossi dal pacchetto"</string>
     <string name="permdesc_broadcastPackageRemoved">"Consente a un\'applicazione di trasmettere una notifica di rimozione del pacchetto di un\'applicazione. Le applicazioni dannose potrebbero sfruttare questa possibilità per interrompere ogni altra applicazione in esecuzione."</string>
-    <string name="permlab_broadcastSmsReceived">"inviare broadcast ricevuti tramite SMS"</string>
+    <string name="permlab_broadcastSmsReceived">"invio broadcast ricevuti tramite SMS"</string>
     <string name="permdesc_broadcastSmsReceived">"Consente a un\'applicazione di trasmettere una notifica di ricevimento di un SMS. Le applicazioni dannose potrebbero sfruttare questa possibilità per far credere che siano stati ricevuti SMS."</string>
-    <string name="permlab_broadcastWapPush">"inviare broadcast ricevuti tramite WAP-PUSH"</string>
-    <string name="permdesc_broadcastWapPush">"Consente a un\'applicazione di trasmettere una notifica di ricevimento di un messaggio WAP PUSH. Le applicazioni dannose potrebbero sfruttare questa possibilità per far credere che sia stato ricevuto un MMS o per sostituire automaticamente il contenuto di pagine web con varianti dannose."</string>
+    <string name="permlab_broadcastWapPush">"invio broadcast ricevuti tramite WAP-PUSH"</string>
+    <string name="permdesc_broadcastWapPush">"Consente a un\'applicazione di trasmettere una notifica di ricevimento di un messaggio WAP PUSH. Le applicazioni dannose potrebbero sfruttare questa possibilità per far credere che sia stato ricevuto un MMS o per sostituire automaticamente contenuti di pagine web con varianti dannose."</string>
     <string name="permlab_setProcessLimit">"numero limite di processi in esecuzione"</string>
     <string name="permdesc_setProcessLimit">"Consente a un\'applicazione di stabilire il numero massimo di processi in esecuzione. Mai necessario per le normali applicazioni."</string>
-    <string name="permlab_setAlwaysFinish">"chiudere tutte le applicazioni in background"</string>
+    <string name="permlab_setAlwaysFinish">"chiusura applicazioni in background"</string>
     <string name="permdesc_setAlwaysFinish">"Consente a un\'applicazione di controllare se le attività sono sempre completate quando vengono messe in secondo piano. Mai necessario per le normali applicazioni."</string>
-    <string name="permlab_fotaUpdate">"installare automaticamente aggiornamenti di sistema"</string>
+    <string name="permlab_fotaUpdate">"installazione autom. aggiornamenti di sistema"</string>
     <string name="permdesc_fotaUpdate">"Consente a un\'applicazione di ricevere notifiche sugli aggiornamenti del sistema in sospeso e di attivarne l\'installazione. Le applicazioni dannose possono sfruttare questa possibilità per danneggiare il sistema con aggiornamenti non autorizzati, o interferire con il processo di aggiornamento."</string>
-    <string name="permlab_batteryStats">"modificare le statistiche della batteria"</string>
+    <string name="permlab_batteryStats">"modifica statistiche batteria"</string>
     <string name="permdesc_batteryStats">"Consente la modifica delle statistiche sulla batteria raccolte. Da non usare per normali applicazioni."</string>
-    <string name="permlab_internalSystemWindow">"visualizzare finestre non autorizzate"</string>
+    <string name="permlab_internalSystemWindow">"visualizzazione finestre non autorizzate"</string>
     <string name="permdesc_internalSystemWindow">"Consente la creazione di finestre destinate all\'uso nell\'interfaccia utente di sistema interna. Da non usare per normali applicazioni."</string>
-    <string name="permlab_systemAlertWindow">"visualizzare avvisi a livello di sistema"</string>
+    <string name="permlab_systemAlertWindow">"visualizzazione avvisi di sistema"</string>
     <string name="permdesc_systemAlertWindow">"Consente a un\'applicazione di visualizzare finestre di avviso del sistema. Le applicazioni dannose possono sfruttare questa opzione per riempire lo schermo del telefono di messaggi."</string>
-    <string name="permlab_setAnimationScale">"modificare velocità di animazione globali"</string>
+    <string name="permlab_setAnimationScale">"modifica velocità di animazione globale"</string>
     <string name="permdesc_setAnimationScale">"Consente a un\'applicazione di modificare la velocità di animazione globale (animazioni più veloci o più lente) in qualsiasi momento."</string>
-    <string name="permlab_manageAppTokens">"gestire i token delle applicazioni"</string>
+    <string name="permlab_manageAppTokens">"gestione token applicazioni"</string>
     <string name="permdesc_manageAppTokens">"Consente alle applicazioni di creare e gestire i propri token, ignorando il normale ordinamento Z. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
-    <string name="permlab_injectEvents">"premere tasti e pulsanti di controllo"</string>
+    <string name="permlab_injectEvents">"uso tasti e pulsanti di controllo"</string>
     <string name="permdesc_injectEvents">"Consente a un\'applicazione di offrire i suoi eventi di input (pressioni di tasti etc.) ad altre applicazioni. Le applicazioni dannose possono sfruttare questa possibilità per assumere il controllo del telefono."</string>
-    <string name="permlab_readInputState">"registrare il testo digitato e le azioni effettuate"</string>
+    <string name="permlab_readInputState">"registrazione testo digitato e azioni eseguite"</string>
     <string name="permdesc_readInputState">"Consente il rilevamento da parte delle applicazioni dei tasti premuti anche durante l\'interazione con un\'altra applicazione (come nel caso di inserimento di una password). Non dovrebbe essere mai necessario per le normali applicazioni."</string>
-    <string name="permlab_bindInputMethod">"associare a un metodo di inserimento"</string>
+    <string name="permlab_bindInputMethod">"associaz. a un metodo di inserimento"</string>
     <string name="permdesc_bindInputMethod">"Consente l\'associazione all\'interfaccia principale di un metodo di inserimento. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
-    <string name="permlab_setOrientation">"cambiare l\'orientamento dello schermo"</string>
+    <string name="permlab_setOrientation">"modifica orientamento dello schermo"</string>
     <string name="permdesc_setOrientation">"Consente a un\'applicazione di cambiare la rotazione dello schermo in qualsiasi momento. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
-    <string name="permlab_signalPersistentProcesses">"inviare segnali Linux alle applicazioni"</string>
+    <string name="permlab_signalPersistentProcesses">"invio segnali Linuz alle applicazioni"</string>
     <string name="permdesc_signalPersistentProcesses">"Consente all\'applicazione di richiedere l\'invio del segnale fornito a tutti i processi persistenti."</string>
-    <string name="permlab_persistentActivity">"lasciare sempre in esecuzione le applicazioni"</string>
+    <string name="permlab_persistentActivity">"esecuzione permanente delle applicazioni"</string>
     <string name="permdesc_persistentActivity">"Consente a un\'applicazione di rendere delle sue parti costanti in modo che il sistema non possa usarla per altre applicazioni."</string>
-    <string name="permlab_deletePackages">"eliminare applicazioni"</string>
+    <string name="permlab_deletePackages">"eliminazione applicazioni"</string>
     <string name="permdesc_deletePackages">"Consente a un\'applicazione di eliminare pacchetti Android. Le applicazioni dannose possono sfruttare questa possibilità per eliminare importanti applicazioni."</string>
-    <string name="permlab_clearAppUserData">"eliminare dati di altre applicazioni"</string>
+    <string name="permlab_clearAppUserData">"eliminazione dati di altre applicazioni"</string>
     <string name="permdesc_clearAppUserData">"Consente a un\'applicazione di cancellare dati dell\'utente."</string>
-    <string name="permlab_deleteCacheFiles">"eliminare le cache di altre applicazioni"</string>
+    <string name="permlab_deleteCacheFiles">"eliminazione cache altre applicazioni"</string>
     <string name="permdesc_deleteCacheFiles">"Consente a un\'applicazione di eliminare file della cache."</string>
-    <string name="permlab_getPackageSize">"stabilire lo spazio di archiviazione delle applicazioni"</string>
+    <string name="permlab_getPackageSize">"calcolo spazio di archiviazione applicazioni"</string>
     <string name="permdesc_getPackageSize">"Consente a un\'applicazione di recuperare i suoi codici, dati e dimensioni della cache"</string>
-    <string name="permlab_installPackages">"installare direttamente applicazioni"</string>
+    <string name="permlab_installPackages">"installazione diretta di applicazioni"</string>
     <string name="permdesc_installPackages">"Consente a un\'applicazione di installare nuovi pacchetti Android o aggiornamenti. Le applicazioni dannose possono sfruttare questa possibilità per aggiungere nuove applicazioni con potenti autorizzazioni arbitrarie."</string>
-    <string name="permlab_clearAppCache">"eliminare tutti i dati della cache delle applicazioni"</string>
+    <string name="permlab_clearAppCache">"eliminazione dati della cache applicazioni"</string>
     <string name="permdesc_clearAppCache">"Consente a un\'applicazione di liberare spazio sul telefono eliminando file nella directory della cache dell\'applicazione. L\'accesso è generalmente limitato a processi di sistema."</string>
-    <string name="permlab_readLogs">"leggere file di registro di sistema"</string>
+    <string name="permlab_readLogs">"lettura file di registro sistema"</string>
     <string name="permdesc_readLogs">"Consente a un\'applicazione di leggere vari file di registro del sistema per trovare informazioni generali sulle operazioni effettuate con il telefono. Tali file non dovrebbero contenere informazioni personali o riservate."</string>
-    <string name="permlab_diagnostic">"leggere/scrivere a risorse di proprietà di diag"</string>
+    <string name="permlab_diagnostic">"lettura/scrittura risorse di proprietà di diag"</string>
     <string name="permdesc_diagnostic">"Consente a un\'applicazione di leggere le risorse del gruppo diag e scrivere a esse, per esempio i file in /dev. Questa capacità potrebbe influire sulla stabilità e sicurezza del sistema. Dovrebbe essere utilizzata SOLTANTO per diagnostiche specifiche dell\'hardware effettuate dal produttore o dall\'operatore."</string>
-    <string name="permlab_changeComponentState">"attivare o disattivare componenti delle applicazioni"</string>
+    <string name="permlab_changeComponentState">"attivazione/disattivazione componenti applicazioni"</string>
     <string name="permdesc_changeComponentState">"Consente a un\'applicazione di attivare o disattivare un componente di un\'altra applicazione. Le applicazioni dannose possono sfruttare questa possibilità per disattivare importanti funzionalità del telefono. Prestare attenzione con questa autorizzazione perché è possibile rendere inutilizzabili, incoerenti o instabili i componenti delle applicazioni."</string>
-    <string name="permlab_setPreferredApplications">"impostare le applicazioni preferite"</string>
+    <string name="permlab_setPreferredApplications">"impostazione applicazioni preferite"</string>
     <string name="permdesc_setPreferredApplications">"Consente la modifica da parte di un\'applicazione delle applicazioni preferite. Le applicazioni dannose potrebbero essere in grado di modificare automaticamente le applicazioni in esecuzione, effettuando lo spoofing delle applicazioni esistenti per raccogliere dati riservati."</string>
-    <string name="permlab_writeSettings">"modificare le impostazioni di sistema globali"</string>
+    <string name="permlab_writeSettings">"modifica impostazioni di sistema globali"</string>
     <string name="permdesc_writeSettings">"Consente la modifica in un\'applicazione dei dati delle impostazioni del sistema. Le applicazioni dannose possono danneggiare la configurazione del sistema."</string>
     <string name="permlab_writeSecureSettings">"modificare le impostazioni di protezione del sistema"</string>
     <string name="permdesc_writeSecureSettings">"Consente a un\'applicazione di modificare i dati delle impostazioni di protezione del sistema. Da non usare per normali applicazioni."</string>
-    <string name="permlab_writeGservices">"modificare la mappa dei servizi Google"</string>
+    <string name="permlab_writeGservices">"modifica mappa servizi Google"</string>
     <string name="permdesc_writeGservices">"Consente a un\'applicazione di modificare la mappa dei servizi Google. Da non usare per normali applicazioni."</string>
-    <string name="permlab_receiveBootCompleted">"aprire automaticamente all\'avvio"</string>
+    <string name="permlab_receiveBootCompleted">"apertura automatica all\'avvio"</string>
     <string name="permdesc_receiveBootCompleted">"Consente a un\'applicazione di aprirsi automaticamente al termine dell\'avvio del sistema. Potrebbe essere necessario più tempo per l\'avvio del telefono e l\'applicazione potrebbe rallentare tutte le funzioni del telefono rimanendo sempre in esecuzione."</string>
-    <string name="permlab_broadcastSticky">"inviare broadcast permanenti"</string>
+    <string name="permlab_broadcastSticky">"invio broadcast permanenti"</string>
     <string name="permdesc_broadcastSticky">"Consente a un\'applicazione di inviare broadcast permanenti, che permangono anche al termine del broadcast. Le applicazioni dannose possono rendere il telefono lento o instabile tramite un uso eccessivo della memoria."</string>
-    <string name="permlab_readContacts">"leggere dati di contatto"</string>
+    <string name="permlab_readContacts">"lettura dati di contatto"</string>
     <string name="permdesc_readContacts">"Consente la lettura da parte di un\'applicazione di tutti i dati (gli indirizzi) di contatto memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per inviare i dati ad altre persone."</string>
-    <string name="permlab_writeContacts">"scrivere dati di contatto"</string>
+    <string name="permlab_writeContacts">"scrittura dati di contatto"</string>
     <string name="permdesc_writeContacts">"Consente a un\'applicazione di modificare i dati (gli indirizzi) di contatto memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati di contatto."</string>
-    <string name="permlab_writeOwnerData">"scrivere dati del proprietario"</string>
+    <string name="permlab_writeOwnerData">"scrittura dati proprietario"</string>
     <string name="permdesc_writeOwnerData">"Consente a un\'applicazione di modificare i dati del proprietario del telefono memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare tali dati."</string>
-    <string name="permlab_readOwnerData">"leggere dati del proprietario"</string>
+    <string name="permlab_readOwnerData">"lettura dati proprietario"</string>
     <string name="permdesc_readOwnerData">"Consente a un\'applicazione di leggere i dati del proprietario del telefono memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per leggere tali dati."</string>
-    <string name="permlab_readCalendar">"leggere dati di calendario"</string>
+    <string name="permlab_readCalendar">"lettura dati di calendario"</string>
     <string name="permdesc_readCalendar">"Consente la lettura da parte di un\'applicazione di tutti gli eventi di calendario memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per inviare i tuoi eventi di calendario ad altre persone."</string>
-    <string name="permlab_writeCalendar">"scrivere dati di calendario"</string>
+    <string name="permlab_writeCalendar">"scrittura dati di calendario"</string>
     <string name="permdesc_writeCalendar">"Consente a un\'applicazione di modificare gli eventi di calendario memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati del calendario."</string>
     <string name="permlab_accessMockLocation">"fonti di localizzazione fittizie per test"</string>
     <string name="permdesc_accessMockLocation">"Creare fonti di localizzazione fittizie per test. Le applicazioni dannose possono sfruttare questa possibilità per sostituire la posizione e/o lo stato restituito da reali fonti di localizzazione come GPS o provider di rete."</string>
-    <string name="permlab_accessLocationExtraCommands">"accedere a comandi aggiuntivi del provider di localizzazione"</string>
+    <string name="permlab_accessLocationExtraCommands">"accesso a comandi aggiuntivi del provider di localizz."</string>
     <string name="permdesc_accessLocationExtraCommands">"Accedere a comandi aggiuntivi del provider di localizzazione. Le applicazioni dannose possono sfruttare questa possibilità per interferire con il funzionamento del GPS o di altre fonti di localizzazione."</string>
     <string name="permlab_accessFineLocation">"localizzazione precisa (GPS)"</string>
     <string name="permdesc_accessFineLocation">"Consente l\'accesso a fonti di localizzazione precisa, come il sistema GPS del telefono, se disponibile. Le applicazioni dannose possono sfruttare questa possibilità per determinare la tua posizione e, nel farlo, far esaurire più in fretta la batteria."</string>
     <string name="permlab_accessCoarseLocation">"localizzazione approssimativa (basata sulla rete)"</string>
     <string name="permdesc_accessCoarseLocation">"Consente l\'accesso a fonti di localizzazione geografica non puntuale (come il database della rete cellulare) per determinare una posizione approssimativa del telefono, quando possibile. Le applicazioni dannose possono sfruttare questa possibilità per determinare approssimativamente dove ti trovi."</string>
-    <string name="permlab_accessSurfaceFlinger">"accedere a SurfaceFlinger"</string>
+    <string name="permlab_accessSurfaceFlinger">"accesso a SurfaceFlinger"</string>
     <string name="permdesc_accessSurfaceFlinger">"Consente l\'utilizzo dell\'applicazione di funzioni di basso livello SurfaceFlinger."</string>
-    <string name="permlab_readFrameBuffer">"leggere il buffer di frame"</string>
+    <string name="permlab_readFrameBuffer">"lettura buffer di frame"</string>
     <string name="permdesc_readFrameBuffer">"Consente la lettura da parte dell\'applicazione dei contenuti del buffer di frame."</string>
-    <string name="permlab_modifyAudioSettings">"cambiare le impostazioni audio"</string>
+    <string name="permlab_modifyAudioSettings">"modifica impostazioni audio"</string>
     <string name="permdesc_modifyAudioSettings">"Consente all\'applicazione di modificare impostazioni audio globali come volume e routing."</string>
-    <string name="permlab_recordAudio">"registrare audio"</string>
+    <string name="permlab_recordAudio">"registrazione audio"</string>
     <string name="permdesc_recordAudio">"Consente l\'accesso dell\'applicazione al percorso di registrazione dell\'audio."</string>
-    <string name="permlab_camera">"scattare foto"</string>
+    <string name="permlab_camera">"acquisizione foto"</string>
     <string name="permdesc_camera">"Consente di scattare foto nell\'applicazione con la fotocamera. L\'applicazione può acquisire in qualsiasi momento le immagini rilevate dalla fotocamera."</string>
-    <string name="permlab_brick">"disattivare definitivamente il telefono"</string>
+    <string name="permlab_brick">"disattivazione telefono"</string>
     <string name="permdesc_brick">"Consente all\'applicazione di disattivare l\'intero telefono in modo definitivo. Questa autorizzazione è molto pericolosa."</string>
-    <string name="permlab_reboot">"imporre il riavvio del telefono"</string>
+    <string name="permlab_reboot">"riavvio forzato del telefono"</string>
     <string name="permdesc_reboot">"Consente all\'applicazione di imporre il riavvio del telefono."</string>
-    <string name="permlab_mount_unmount_filesystems">"montare e smontare filesystem"</string>
+    <string name="permlab_mount_unmount_filesystems">"installazione/disinstallazione filesystem"</string>
     <string name="permdesc_mount_unmount_filesystems">"Consente montaggio e smontaggio da parte dell\'applicazione dei filesystem degli archivi rimovibili."</string>
-    <string name="permlab_mount_format_filesystems">"formatta archivio esterno"</string>
+    <string name="permlab_mount_format_filesystems">"formattazione archivio esterno"</string>
     <string name="permdesc_mount_format_filesystems">"Consente all\'applicazione di formattare l\'archivio rimovibile."</string>
-    <string name="permlab_vibrate">"controllare la vibrazione"</string>
+    <string name="permlab_vibrate">"controllo vibrazione"</string>
     <string name="permdesc_vibrate">"Consente all\'applicazione di controllare la vibrazione."</string>
-    <string name="permlab_flashlight">"controllare il flash"</string>
+    <string name="permlab_flashlight">"controllo flash"</string>
     <string name="permdesc_flashlight">"Consente all\'applicazione di controllare il flash."</string>
-    <string name="permlab_hardware_test">"testare l\'hardware"</string>
+    <string name="permlab_hardware_test">"esecuzione test hardware"</string>
     <string name="permdesc_hardware_test">"Consente all\'applicazione di controllare varie periferiche per il test dell\'hardware."</string>
-    <string name="permlab_callPhone">"chiamare direttamente i numeri di telefono"</string>
+    <string name="permlab_callPhone">"chiamata diretta n. telefono"</string>
     <string name="permdesc_callPhone">"Consente all\'applicazione di chiamare numeri automaticamente. Le applicazioni dannose potrebbero far risultare chiamate impreviste sulla bolletta telefonica. Questa autorizzazione non consente all\'applicazione di chiamare numeri di emergenza."</string>
-    <string name="permlab_callPrivileged">"chiamare direttamente tutti i numeri di telefono"</string>
+    <string name="permlab_callPrivileged">"chiamata diretta di tutti i n. telefono"</string>
     <string name="permdesc_callPrivileged">"Consente all\'applicazione di chiamare qualsiasi numero, compresi quelli di emergenza, automaticamente. Le applicazioni dannose potrebbero effettuare chiamate non necessarie e illegali a servizi di emergenza."</string>
-    <string name="permlab_locationUpdates">"controllare le notifiche di aggiornamento della posizione"</string>
-    <string name="permdesc_locationUpdates">"Consente l\'attivazione/disattivazione delle notifiche di aggiornamento della posizione. Da non usare per normali applicazioni."</string>
-    <string name="permlab_checkinProperties">"accedere a proprietà di archiviazione"</string>
+    <string name="permlab_locationUpdates">"controllo notifiche aggiornamento posizione"</string>
+    <string name="permdesc_locationUpdates">"Consente l\'attivazione/disattivazione delle notifiche di aggiornamento della posizione dal segnale cellulare. Da non usare per normali applicazioni."</string>
+    <string name="permlab_checkinProperties">"accesso a proprietà di archiviazione"</string>
     <string name="permdesc_checkinProperties">"Consente l\'accesso di lettura/scrittura alle proprietà caricate dal servizio di archiviazione. Da non usare per normali applicazioni."</string>
     <string name="permlab_bindGadget">"scegliere gadget"</string>
     <string name="permdesc_bindGadget">"Consente all\'applicazione di indicare al sistema quali gadget possono essere utilizzati e da quale applicazione. Con questa autorizzazione, le applicazioni possono consentire ad altre applicazioni di accedere a dati personali. Da non usare per normali applicazioni."</string>
-    <string name="permlab_modifyPhoneState">"modificare lo stato del telefono"</string>
-    <string name="permdesc_modifyPhoneState">"Consente all\'applicazione di controllare le funzioni telefoniche del dispositivo. Un\'applicazione con questa autorizzazione può cambiare rete, accendere e spegnere il modulo radio del telefono e così via, il tutto automaticamente."</string>
-    <string name="permlab_readPhoneState">"leggere lo stato del telefono"</string>
+    <string name="permlab_modifyPhoneState">"modifica stato del telefono"</string>
+    <string name="permdesc_modifyPhoneState">"Consente all\'applicazione di controllare le funzioni telefoniche del dispositivo. Un\'applicazione con questa autorizzazione può cambiare rete, attivare e disattivare il segnale cellulare e così via, senza alcuna notifica."</string>
+    <string name="permlab_readPhoneState">"lettura stato del telefono"</string>
     <string name="permdesc_readPhoneState">"Consente l\'accesso dell\'applicazione alle funzioni telefoniche del dispositivo. Un\'applicazione con questa autorizzazione può determinare il numero del telefono in uso, se una chiamata è attiva o meno, il numero a cui è collegata la chiamata e simili."</string>
-    <string name="permlab_wakeLock">"impedire la sospensione del telefono"</string>
-    <string name="permdesc_wakeLock">"Consente a un\'applicazione di impedire la sospensione del telefono."</string>
-    <string name="permlab_devicePower">"accendere o spegnere il telefono"</string>
+    <string name="permlab_wakeLock">"disattivazione stand-by del telefono"</string>
+    <string name="permdesc_wakeLock">"Consente a un\'applicazione di impedire lo stand-by del telefono."</string>
+    <string name="permlab_devicePower">"accensione o spegnimento del telefono"</string>
     <string name="permdesc_devicePower">"Consente all\'applicazione di accendere o spegnere il telefono."</string>
-    <string name="permlab_factoryTest">"eseguire in modalità test di fabbrica"</string>
+    <string name="permlab_factoryTest">"esecuzione in modalità test di fabbrica"</string>
     <string name="permdesc_factoryTest">"In esecuzione come test del produttore di basso livello, consentendo l\'accesso completo all\'hardware del telefono. Disponibile soltanto quando il telefono è in esecuzione in modalità test del produttore."</string>
-    <string name="permlab_setWallpaper">"impostare lo sfondo"</string>
+    <string name="permlab_setWallpaper">"impostazione sfondo"</string>
     <string name="permdesc_setWallpaper">"Consente all\'applicazione di impostare lo sfondo del sistema."</string>
-    <string name="permlab_setWallpaperHints">"impostare suggerimenti per le dimensioni dello sfondo"</string>
+    <string name="permlab_setWallpaperHints">"impostaz. suggerimenti dimensioni sfondo"</string>
     <string name="permdesc_setWallpaperHints">"Consente all\'applicazione di impostare i suggerimenti per le dimensioni dello sfondo del sistema."</string>
-    <string name="permlab_masterClear">"ripristinare impostazioni predefinite di fabbrica"</string>
+    <string name="permlab_masterClear">"ripristino impostazioni predef. di fabbrica"</string>
     <string name="permdesc_masterClear">"Consente a un\'applicazione di ripristinare le impostazioni di fabbrica del sistema, eliminando tutti i dati, le configurazioni e le applicazioni installate."</string>
-    <string name="permlab_setTimeZone">"impostare il fuso orario"</string>
+    <string name="permlab_setTimeZone">"impostazione fuso orario"</string>
     <string name="permdesc_setTimeZone">"Consente a un\'applicazione di modificare il fuso orario del telefono."</string>
-    <string name="permlab_getAccounts">"trovare account noti"</string>
+    <string name="permlab_getAccounts">"rilevamento account noti"</string>
     <string name="permdesc_getAccounts">"Consente a un\'applicazione di recuperare l\'elenco di account memorizzati sul telefono."</string>
-    <string name="permlab_accessNetworkState">"visualizzare lo stato della rete"</string>
+    <string name="permlab_accessNetworkState">"visualizzazione stato della rete"</string>
     <string name="permdesc_accessNetworkState">"Consente a un\'applicazione di visualizzare lo stato di tutte le reti."</string>
     <string name="permlab_createNetworkSockets">"accesso completo a Internet"</string>
     <string name="permdesc_createNetworkSockets">"Consente a un\'applicazione di creare socket di rete."</string>
-    <string name="permlab_writeApnSettings">"scrivere impostazioni di nomi di punti di accesso"</string>
+    <string name="permlab_writeApnSettings">"scrittura impostazioni APN"</string>
     <string name="permdesc_writeApnSettings">"Consente a un\'applicazione di modificare le impostazioni APN, come proxy e porta di qualsiasi APN."</string>
-    <string name="permlab_changeNetworkState">"cambiare connettività di rete"</string>
+    <string name="permlab_changeNetworkState">"modifica connettività di rete"</string>
     <string name="permdesc_changeNetworkState">"Consente a un\'applicazione di modificare lo stato di connettività di rete."</string>
     <string name="permlab_changeBackgroundDataSetting">"cambiare l\'impostazione di utilizzo dei dati in background"</string>
     <string name="permdesc_changeBackgroundDataSetting">"Consente a un\'applicazione di cambiare l\'impostazione di utilizzo dei dati in background."</string>
-    <string name="permlab_accessWifiState">"visualizzare lo stato Wi-Fi"</string>
+    <string name="permlab_accessWifiState">"visualizzazione stato Wi-Fi"</string>
     <string name="permdesc_accessWifiState">"Consente a un\'applicazione di visualizzare le informazioni relative allo stato della connessione Wi-Fi."</string>
-    <string name="permlab_changeWifiState">"cambiare stato Wi-Fi"</string>
+    <string name="permlab_changeWifiState">"modifica stato Wi-Fi"</string>
     <string name="permdesc_changeWifiState">"Consente a un\'applicazione di connettersi/disconnettersi da punti di accesso Wi-Fi e di apportare modifiche alle reti Wi-Fi configurate."</string>
     <string name="permlab_bluetoothAdmin">"gestione Bluetooth"</string>
     <string name="permdesc_bluetoothAdmin">"Consente a un\'applicazione di configurare il telefono Bluetooth locale e di rilevare e abbinare dispositivi remoti."</string>
-    <string name="permlab_bluetooth">"creare connessioni Bluetooth"</string>
+    <string name="permlab_bluetooth">"creazione connessioni Bluetooth"</string>
     <string name="permdesc_bluetooth">"Consente a un\'applicazione di visualizzare la configurazione del telefono Bluetooth locale e di stabilire e accettare connessioni con dispositivi associati."</string>
-    <string name="permlab_disableKeyguard">"disattivare blocco tastiera"</string>
+    <string name="permlab_disableKeyguard">"disattivazione blocco tastiera"</string>
     <string name="permdesc_disableKeyguard">"Consente la disattivazione da parte di un\'applicazione del blocco tastiera e di eventuali protezioni tramite password associate. Un valido esempio è la disattivazione da parte del telefono del blocco tastiera quando riceve una telefonata in entrata, e la successiva riattivazione del blocco al termine della chiamata."</string>
-    <string name="permlab_readSyncSettings">"leggere impostazioni di sincronizzazione"</string>
+    <string name="permlab_readSyncSettings">"lettura impostazioni di sincronizz."</string>
     <string name="permdesc_readSyncSettings">"Consente a un\'applicazione di leggere le impostazioni di sincronizzazione, come l\'attivazione o meno della sincronizzazione per Contatti."</string>
-    <string name="permlab_writeSyncSettings">"scrivere impostazioni di sincronizzazione"</string>
+    <string name="permlab_writeSyncSettings">"scrittura impostazioni di sincronizz."</string>
     <string name="permdesc_writeSyncSettings">"Consente a un\'applicazione di modificare le impostazioni di sincronizzazione, come l\'attivazione o meno della sincronizzazione per Contatti."</string>
-    <string name="permlab_readSyncStats">"leggere statistiche di sincronizzazione"</string>
+    <string name="permlab_readSyncStats">"lettura statistiche di sincronizz."</string>
     <string name="permdesc_readSyncStats">"Consente a un\'applicazione di leggere le statistiche di sincronizzazione, per esempio la cronologia delle sincronizzazioni effettuate."</string>
-    <string name="permlab_subscribedFeedsRead">"leggere feed sottoscritti"</string>
+    <string name="permlab_subscribedFeedsRead">"lettura feed sottoscritti"</string>
     <string name="permdesc_subscribedFeedsRead">"Consente a un\'applicazione di ottenere dettagli sui feed attualmente sincronizzati."</string>
-    <string name="permlab_subscribedFeedsWrite">"scrivere feed sottoscritti"</string>
+    <string name="permlab_subscribedFeedsWrite">"scrittura feed sottoscritti"</string>
     <string name="permdesc_subscribedFeedsWrite">"Consente la modifica da parte di un\'applicazione dei feed attualmente sincronizzati. Le applicazioni dannose potrebbero essere in grado di modificare i feed sincronizzati."</string>
-    <string name="permlab_readDictionary">"leggi dizionario definito dall\'utente"</string>
+    <string name="permlab_readDictionary">"lettura dizionario definito dall\'utente"</string>
     <string name="permdesc_readDictionary">"Consente a un\'applicazione di leggere parole, nomi e frasi private che l\'utente potrebbe aver memorizzato nel dizionario utente."</string>
-    <string name="permlab_writeDictionary">"scrivi nel dizionario definito dall\'utente"</string>
+    <string name="permlab_writeDictionary">"scrittura nel dizionario definito dall\'utente"</string>
     <string name="permdesc_writeDictionary">"Consente a un\'applicazione di scrivere nuove parole nel dizionario utente."</string>
   <string-array name="phoneTypes">
     <item>"Casa"</item>
     <item>"Cellulare"</item>
-    <item>"Lavoro"</item>
-    <item>"Fax lavoro"</item>
-    <item>"Fax abitazione"</item>
+    <item>"Ufficio"</item>
+    <item>"Fax ufficio"</item>
+    <item>"Fax casa"</item>
     <item>"Cercapersone"</item>
     <item>"Altro"</item>
-    <item>"Personale"</item>
+    <item>"Personalizzato"</item>
   </string-array>
   <string-array name="emailAddressTypes">
     <item>"Casa"</item>
-    <item>"Lavoro"</item>
+    <item>"Ufficio"</item>
     <item>"Altro"</item>
-    <item>"Personale"</item>
+    <item>"Personalizzato"</item>
   </string-array>
   <string-array name="postalAddressTypes">
     <item>"Casa"</item>
-    <item>"Lavoro"</item>
+    <item>"Ufficio"</item>
     <item>"Altro"</item>
-    <item>"Personale"</item>
+    <item>"Personalizzato"</item>
   </string-array>
   <string-array name="imAddressTypes">
     <item>"Casa"</item>
-    <item>"Lavoro"</item>
+    <item>"Uffico"</item>
     <item>"Altro"</item>
-    <item>"Personale"</item>
+    <item>"Personalizzato"</item>
   </string-array>
   <string-array name="organizationTypes">
-    <item>"Lavoro"</item>
+    <item>"Ufficio"</item>
     <item>"Altro"</item>
-    <item>"Personale"</item>
+    <item>"Personalizzato"</item>
   </string-array>
   <string-array name="imProtocols">
     <item>"AIM"</item>
@@ -389,8 +397,9 @@
     <string name="lockscreen_emergency_call">"Chiamata di emergenza"</string>
     <string name="lockscreen_pattern_correct">"Corretta."</string>
     <string name="lockscreen_pattern_wrong">"Riprova"</string>
-    <string name="lockscreen_plugged_in">"In carica (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
-    <string name="lockscreen_low_battery">"Collega il caricabatterie."</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
+    <string name="lockscreen_low_battery">"Collegare il caricabatterie."</string>
     <string name="lockscreen_missing_sim_message_short">"Nessuna SIM presente."</string>
     <string name="lockscreen_missing_sim_message">"Nessuna SIM presente nel telefono."</string>
     <string name="lockscreen_missing_sim_instructions">"Inserisci una SIM."</string>
@@ -412,20 +421,20 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Cancella notifiche"</string>
     <string name="status_bar_no_notifications_title">"Nessuna notifica"</string>
     <string name="status_bar_ongoing_events_title">"In corso"</string>
     <string name="status_bar_latest_events_title">"Notifiche"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"In carica..."</string>
-    <string name="battery_low_title">"Collega il caricabatterie"</string>
+    <string name="battery_low_title">"Collegare il caricabatterie"</string>
     <string name="battery_low_subtitle">"Batteria quasi scarica:"</string>
-    <string name="battery_low_percent_format">"meno di <xliff:g id="NUMBER">%d%%</xliff:g> rimanenti."</string>
+    <string name="battery_low_percent_format">"energia residua inferiore a <xliff:g id="NUMBER">%d%%</xliff:g>."</string>
     <string name="factorytest_failed">"Test di fabbrica non riuscito"</string>
     <string name="factorytest_not_system">"L\'azione FACTORY_TEST è supportata soltanto per i pacchetti installati in /system/app."</string>
     <string name="factorytest_no_action">"Nessun pacchetto trovato che fornisca l\'azione FACTORY_TEST."</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"Mezzogiorno"</string>
     <string name="midnight">"mezzanotte"</string>
     <string name="Midnight">"Mezzanotte"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
-    <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"Domenica"</string>
     <string name="day_of_week_long_monday">"Lunedì"</string>
@@ -721,7 +730,7 @@
     <string name="debug">"Debug"</string>
     <string name="sendText">"Seleziona un\'azione per il testo"</string>
     <string name="volume_ringtone">"Volume suoneria"</string>
-    <string name="volume_music">"Volume media"</string>
+    <string name="volume_music">"Volume app. multimediali"</string>
     <string name="volume_music_hint_playing_through_bluetooth">"Riproduzione tramite Bluetooth"</string>
     <string name="volume_call">"Volume chiamate"</string>
     <string name="volume_bluetooth_call">"Volume chiamate Bluetooth"</string>
@@ -759,7 +768,7 @@
     <string name="usb_storage_button_unmount">"Non collegare"</string>
     <string name="usb_storage_error_message">"Problema di utilizzo della scheda SD per l\'archiviazione USB."</string>
     <string name="usb_storage_notification_title">"USB collegata"</string>
-    <string name="usb_storage_notification_message">"Seleziona per copiare file sul/dal computer in uso."</string>
+    <string name="usb_storage_notification_message">"Seleziona per copiare file sul/dal tuo computer."</string>
     <string name="usb_storage_stop_notification_title">"Disattiva archivio USB"</string>
     <string name="usb_storage_stop_notification_message">"Seleziona per disattivare archivio USB."</string>
     <string name="usb_storage_stop_title">"Disattiva archivio USB"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"Formattare la scheda SD? Tutti i dati sulla scheda verranno persi."</string>
     <string name="extmedia_format_button_format">"Formatta"</string>
     <string name="select_input_method">"Seleziona metodo di inserimento"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"candidati"</u></string>
     <string name="ext_media_checking_notification_title">"Preparazione scheda SD"</string>
     <string name="ext_media_checking_notification_message">"Ricerca errori"</string>
@@ -785,10 +794,22 @@
     <string name="ext_media_safe_unmount_notification_title">"È possibile rimuovere la scheda SD"</string>
     <string name="ext_media_safe_unmount_notification_message">"È ora possibile rimuovere la scheda SD in modo sicuro."</string>
     <string name="ext_media_nomedia_notification_title">"Scheda SD rimossa"</string>
-    <string name="ext_media_nomedia_notification_message">"Scheda SD rimossa. Inserisci una nuova scheda SD per aumentare la memoria del dispositivo."</string>
+    <string name="ext_media_nomedia_notification_message">"Inserisci una nuova scheda SD per aumentare la memoria del dispositivo."</string>
     <string name="activity_list_empty">"Nessuna attività corrispondente trovata"</string>
     <string name="permlab_pkgUsageStats">"aggiornare le statistiche di utilizzo dei componenti"</string>
     <string name="permdesc_pkgUsageStats">"Consente la modifica delle statistiche di utilizzo dei componenti raccolte. Da non usare per normali applicazioni."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-ja-rJP/arrays.xml b/core/res/res/values-ja-rJP/arrays.xml
new file mode 100644
index 0000000..74e8a59
--- /dev/null
+++ b/core/res/res/values-ja-rJP/arrays.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/colors.xml
+**
+** Copyright 2009, Google Inc.
+**
+** Licensed under the Apache License, Version 2.0 (the "License"); 
+** you may not use this file except in compliance with the License. 
+** You may obtain a copy of the License at 
+**
+**     http://www.apache.org/licenses/LICENSE-2.0 
+**
+** Unless required by applicable law or agreed to in writing, software 
+** distributed under the License is distributed on an "AS IS" BASIS, 
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+** See the License for the specific language governing permissions and 
+** limitations under the License.
+*/
+-->
+<resources>
+
+    <!-- Do not translate. -->
+    <integer-array name="maps_starting_lat_lng">
+        <item>35666667</item>
+        <item>139750000</item>
+     </integer-array>
+     <!-- Do not translate. -->
+     <integer-array name="maps_starting_zoom">
+         <item>5</item>
+     </integer-array>
+
+</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 1fa3eee..2a21bd3 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"マナーモード"</string>
     <string name="global_action_silent_mode_on_status">"音声オフ"</string>
     <string name="global_action_silent_mode_off_status">"サウンド:オン"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"セーフモード"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"料金の発生するサービス"</string>
     <string name="permgroupdesc_costMoney">"料金の発生する操作をアプリケーションに許可します。"</string>
     <string name="permgrouplab_messages">"送受信したメッセージ"</string>
@@ -389,7 +397,8 @@
     <string name="lockscreen_emergency_call">"緊急呼"</string>
     <string name="lockscreen_pattern_correct">"一致しました"</string>
     <string name="lockscreen_pattern_wrong">"やり直してください"</string>
-    <string name="lockscreen_plugged_in">"充電中 (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"充電してください。"</string>
     <string name="lockscreen_missing_sim_message_short">"SIMカードが挿入されていません"</string>
     <string name="lockscreen_missing_sim_message">"SIMカードが挿入されていません"</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"通知を消去"</string>
     <string name="status_bar_no_notifications_title">"通知なし"</string>
     <string name="status_bar_ongoing_events_title">"継続中"</string>
     <string name="status_bar_latest_events_title">"通知"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"充電中..."</string>
     <string name="battery_low_title">"充電してください"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"正午"</string>
     <string name="midnight">"午前0時"</string>
     <string name="Midnight">"午前0時"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="YEAR">%Y</xliff:g>年<xliff:g id="MONTH">%B</xliff:g><xliff:g id="DAY">%-d</xliff:g>日"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="YEAR">%Y</xliff:g>/<xliff:g id="MONTH">%B</xliff:g>/<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g><xliff:g id="TIME1">%5$s</xliff:g>～<xliff:g id="YEAR2">%9$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g><xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g><xliff:g id="WEEKDAY1">%1$s</xliff:g><xliff:g id="TIME1">%5$s</xliff:g>～<xliff:g id="YEAR2">%9$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g><xliff:g id="WEEKDAY2">%6$s</xliff:g><xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="YEAR">%Y</xliff:g>/<xliff:g id="MONTH">%b</xliff:g>/<xliff:g id="DAY">%-d</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"日曜日"</string>
     <string name="day_of_week_long_monday">"月曜日"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"SDカードをフォーマットしてもよろしいですか？カード内のすべてのデータが失われます。"</string>
     <string name="extmedia_format_button_format">"フォーマット"</string>
     <string name="select_input_method">"入力方法の選択"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"候補"</u></string>
     <string name="ext_media_checking_notification_title">"SDカードの準備中"</string>
     <string name="ext_media_checking_notification_message">"エラーを確認中"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"一致するアクティビティが見つかりません"</string>
     <string name="permlab_pkgUsageStats">"コンポーネント使用状況に関する統計情報の更新"</string>
     <string name="permdesc_pkgUsageStats">"収集されたコンポーネント使用状況に関する統計情報の変更を許可します。通常のアプリケーションでは使用しません。"</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 311f501..8fc7d12 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"무음 모드"</string>
     <string name="global_action_silent_mode_on_status">"소리 꺼짐"</string>
     <string name="global_action_silent_mode_off_status">"소리 켜짐"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"안전 모드"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"요금이 부과되는 서비스"</string>
     <string name="permgroupdesc_costMoney">"응용프로그램이 요금이 부과될 수 있는 작업을 할 수 있습니다."</string>
     <string name="permgrouplab_messages">"메시지"</string>
@@ -389,7 +397,8 @@
     <string name="lockscreen_emergency_call">"비상 전화"</string>
     <string name="lockscreen_pattern_correct">"맞습니다."</string>
     <string name="lockscreen_pattern_wrong">"죄송합니다. 다시 시도하세요."</string>
-    <string name="lockscreen_plugged_in">"충전 중(<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"충전기를 연결하세요."</string>
     <string name="lockscreen_missing_sim_message_short">"SIM 카드가 없습니다."</string>
     <string name="lockscreen_missing_sim_message">"전화기에 SIM 카드가 없습니다."</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"알림 지우기"</string>
     <string name="status_bar_no_notifications_title">"알림 없음"</string>
     <string name="status_bar_ongoing_events_title">"사용 중"</string>
     <string name="status_bar_latest_events_title">"알림"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"충전 중..."</string>
     <string name="battery_low_title">"충전기를 연결하세요."</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"정오"</string>
     <string name="midnight">"자정"</string>
     <string name="Midnight">"자정"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="YEAR">%Y</xliff:g>, <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="YEAR">%Y</xliff:g>, <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="YEAR">%Y</xliff:g> <xliff:g id="MONTH">%b</xliff:g>, <xliff:g id="DAY">%-d</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"일요일"</string>
     <string name="day_of_week_long_monday">"월요일"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"SD 카드를 포맷하시겠습니까? 포맷하면 카드의 모든 데이터를 잃게 됩니다."</string>
     <string name="extmedia_format_button_format">"포맷"</string>
     <string name="select_input_method">"입력 방법 선택"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"가능한 원인"</u></string>
     <string name="ext_media_checking_notification_title">"SD 카드 준비 중"</string>
     <string name="ext_media_checking_notification_message">"오류 확인 중"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"일치하는 활동이 없습니다."</string>
     <string name="permlab_pkgUsageStats">"구성요소 사용 통계 업데이트"</string>
     <string name="permdesc_pkgUsageStats">"수집된 구성요소 사용 통계를 수정할 수 있는 권한을 부여합니다. 일반 응용프로그램은 이 권한을 사용할 수 없습니다."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 9ee553f..c1944a4 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"Stillemodus"</string>
     <string name="global_action_silent_mode_on_status">"Lyden er av"</string>
     <string name="global_action_silent_mode_off_status">"Lyden er på"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Sikkermodus"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Betaltjenester"</string>
     <string name="permgroupdesc_costMoney">"Lar applikasjoner utføre operasjoner som kan koste deg penger."</string>
     <string name="permgrouplab_messages">"Meldinger"</string>
@@ -389,7 +397,8 @@
     <string name="lockscreen_emergency_call">"Nødanrop"</string>
     <string name="lockscreen_pattern_correct">"Riktig!"</string>
     <string name="lockscreen_pattern_wrong">"Beklager, prøv igjen:"</string>
-    <string name="lockscreen_plugged_in">"Lader (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Koble til en batterilader."</string>
     <string name="lockscreen_missing_sim_message_short">"Mangler SIM-kort."</string>
     <string name="lockscreen_missing_sim_message">"Ikke noe SIM-kort i telefonen."</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Fjern varslinger"</string>
     <string name="status_bar_no_notifications_title">"Ingen varslinger"</string>
     <string name="status_bar_ongoing_events_title">"Aktiviteter"</string>
     <string name="status_bar_latest_events_title">"Varslinger"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"Lader…"</string>
     <string name="battery_low_title">"Koble til en lader"</string>
@@ -430,7 +439,7 @@
     <string name="factorytest_not_system">"The FACTORY_TEST action is only supported for packages installed in /system/app."</string>
     <string name="factorytest_no_action">"No package was found that provides the FACTORY_TEST action."</string>
     <string name="factorytest_reboot">"Reboot"</string>
-    <string name="js_dialog_title">"Siden \\\'<xliff:g id="TITLE">%s</xliff:g>\\\' sier:"</string>
+    <string name="js_dialog_title">"Siden \'<xliff:g id="TITLE">%s</xliff:g> sier:\""</string>
     <string name="js_dialog_title_default">"JavaScript"</string>
     <string name="js_dialog_before_unload">"Naviger bort fra denne siden?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Velg OK for å fortsette, eller Avbryt for å forbli på denne siden."</string>
     <string name="save_password_label">"Bekreft"</string>
@@ -554,27 +563,27 @@
     <string name="date1_date2">"<xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>"</string>
     <string name="time1_time2">"<xliff:g id="TIME1">%1$s</xliff:g> – <xliff:g id="TIME2">%2$s</xliff:g>"</string>
     <string name="time_wday_date">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="WEEKDAY">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g>"</string>
-    <string name="wday_date">"<xliff:g id="WEEKDAY">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g>"</string>
+    <string name="wday_date">"<xliff:g id="WEEKDAY">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g>PLACEHOLDERplaceholder"</string>
     <string name="time_date">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>"</string>
     <string name="date_time">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="relative_time">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="time_wday">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="WEEKDAY">%2$s</xliff:g>"</string>
-    <string name="full_date_month_first" format="date">"<xliff:g id="MONTH">MMMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\'., \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
-    <string name="full_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\'. \\\'\'\\\'\''<xliff:g id="MONTH">MMMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
-    <string name="medium_date_month_first" format="date">"<xliff:g id="MONTH">MMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\', \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
-    <string name="medium_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\'. \\\'\'\\\'\''<xliff:g id="MONTH">MMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
-    <string name="twelve_hour_time_format" format="date">"<xliff:g id="HOUR">h</xliff:g>'\\\'\'\\\'\':\\\'\'\\\'\''<xliff:g id="MINUTE">mm</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="AMPM">a</xliff:g>"</string>
-    <string name="twenty_four_hour_time_format" format="date">"<xliff:g id="HOUR">H</xliff:g>'\\\'\'\\\'\':\\\'\'\\\'\''<xliff:g id="MINUTE">mm</xliff:g>"</string>
+    <string name="full_date_month_first" format="date">"<xliff:g id="MONTH">MMMM</xliff:g>' '<xliff:g id="DAY">d</xliff:g>'., '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+    <string name="full_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'. '<xliff:g id="MONTH">MMMM</xliff:g>' '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+    <string name="medium_date_month_first" format="date">"<xliff:g id="MONTH">MMM</xliff:g>' '<xliff:g id="DAY">d</xliff:g>', '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+    <string name="medium_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'. '<xliff:g id="MONTH">MMM</xliff:g>' '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+    <string name="twelve_hour_time_format" format="date">"<xliff:g id="HOUR">h</xliff:g>':'<xliff:g id="MINUTE">mm</xliff:g>' '<xliff:g id="AMPM">a</xliff:g>"</string>
+    <string name="twenty_four_hour_time_format" format="date">"<xliff:g id="HOUR">H</xliff:g>':'<xliff:g id="MINUTE">mm</xliff:g>"</string>
     <string name="noon">"middag"</string>
     <string name="Noon">"Middag"</string>
     <string name="midnight">"midnatt"</string>
     <string name="Midnight">"Midnatt"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"søndag"</string>
     <string name="day_of_week_long_monday">"mandag"</string>
@@ -688,7 +697,7 @@
     <string name="cut">"Klipp ut"</string>
     <string name="cutAll">"Klipp ut alt"</string>
     <string name="copy">"Kopier"</string>
-    <string name="copyAll">"Koiper alt"</string>
+    <string name="copyAll">"Kopier alt"</string>
     <string name="paste">"Lim inn"</string>
     <string name="copyUrl">"Kopier URL"</string>
     <string name="inputMethod">"Inndatametode"</string>
@@ -744,7 +753,7 @@
     <string name="select_character">"Sett inn tegn"</string>
     <string name="sms_control_default_app_name">"Ukjent applikasjon"</string>
     <string name="sms_control_title">"Sending SMS messages"</string>
-    <string name="sms_control_message">"A large number of SMS messages are being sent. Select \\\\\\\"OK\\\\\\\" to continue, or \\\\\\\"Cancel\\\\\\\" to stop sending."</string>
+    <string name="sms_control_message">"A large number of SMS messages are being sent. Select \"OK\" to continue, or \"Cancel\" to stop sending."</string>
     <string name="sms_control_yes">"OK"</string>
     <string name="sms_control_no">"Avbryt"</string>
     <string name="date_time_set">"Lagre"</string>
@@ -754,7 +763,7 @@
     <string name="perms_show_all"><b>"Vis alle"</b></string>
     <string name="googlewebcontenthelper_loading">"Laster inn…"</string>
     <string name="usb_storage_title">"USB koblet til"</string>
-    <string name="usb_storage_message">"Du har koblet telefonen til en datamaskin via USB. Velg \\\\\\\"Monter\\\\\\\" dersom du ønsker å kopiere filer mellom datmaskinen og minnekortet i telefonen."</string>
+    <string name="usb_storage_message">"Du har koblet telefonen til en datamaskin via USB. Velg \"Monter\" dersom du ønsker å kopiere filer mellom datmaskinen og minnekortet i telefonen."</string>
     <string name="usb_storage_button_mount">"Monter"</string>
     <string name="usb_storage_button_unmount">"Ikke monter"</string>
     <string name="usb_storage_error_message">"Det oppsto et problem med å bruke minnekortet ditt for USB-lagring."</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"Er du sikker på at du ønsker å formatere minnekortet? Alle data på kortet vil gå tapt."</string>
     <string name="extmedia_format_button_format">"Format"</string>
     <string name="select_input_method">"Velg inndatametode"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
     <string name="candidates_style">"TAG_FONT"<u>"kandidater"</u>"CLOSE_FONT"</string>
     <string name="ext_media_checking_notification_title">"Forbereder minnekort"</string>
     <string name="ext_media_checking_notification_message">"Sjekker for feil"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"Fant ingen tilsvarende aktiviteter"</string>
     <string name="permlab_pkgUsageStats">"oppdater statistikk over komponentbruk"</string>
     <string name="permdesc_pkgUsageStats">"Tillater endring av innsamlet data om bruk av komponenter. Ikke ment for vanlige applikasjoner."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index a1446f5..725e369 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -40,7 +40,7 @@
     <string name="mismatchPin">"De PIN-codes die u heeft ingevoerd, komen niet overeen."</string>
     <string name="invalidPin">"Voer een PIN-code van 4 tot 8 cijfers in."</string>
     <string name="needPuk">"Uw SIM-kaart is geblokkeerd met de PUK-code. Typ de PUK-code om de blokkering op te heffen."</string>
-    <string name="needPuk2">"Voer de PUK2-code in om de SIM-kaart te deblokkeren."</string>
+    <string name="needPuk2">"Voer de PUK2-code in om de SIM-kaart te ontgrendelen."</string>
     <string name="ClipMmi">"Inkomende beller-id"</string>
     <string name="ClirMmi">"Uitgaande beller-id"</string>
     <string name="CfMmi">"Oproep doorschakelen"</string>
@@ -103,13 +103,21 @@
     <string name="global_action_toggle_silent_mode">"Stille modus"</string>
     <string name="global_action_silent_mode_on_status">"Geluid is UIT"</string>
     <string name="global_action_silent_mode_off_status">"Geluid is AAN"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Veilige modus"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Services waarvoor u moet betalen"</string>
     <string name="permgroupdesc_costMoney">"Toepassingen toestaan activiteiten uit te voeren waarvoor mogelijk kosten in rekening worden gebracht."</string>
     <string name="permgrouplab_messages">"Uw berichten"</string>
     <string name="permgroupdesc_messages">"SMS, e-mail en andere berichten lezen en schrijven."</string>
     <string name="permgrouplab_personalInfo">"Uw persoonlijke informatie"</string>
-    <string name="permgroupdesc_personalInfo">"Rechtstreekse toegang tot de op uw telefoon opgeslagen contactpersonen en agenda."</string>
+    <string name="permgroupdesc_personalInfo">"Rechtstreekse toegang tot de op uw telefoon opgeslagen contacten en agenda."</string>
     <string name="permgrouplab_location">"Uw locatie"</string>
     <string name="permgroupdesc_location">"Uw fysieke locatie bijhouden"</string>
     <string name="permgrouplab_network">"Netwerkcommunicatie"</string>
@@ -154,7 +162,7 @@
     <string name="permdesc_restartPackages">"Hiermee kan een toepassing andere toepassingen opnieuw starten."</string>
     <string name="permlab_setProcessForeground">"stoppen voorkomen"</string>
     <string name="permdesc_setProcessForeground">"Hiermee kan een toepassing ervoor zorgen dat elk willekeurig proces op de voorgrond wordt uitgevoerd en dus niet kan worden afgesloten. Nooit vereist voor normale toepassingen."</string>
-    <string name="permlab_forceBack">"toepassing gedwongen sluiten"</string>
+    <string name="permlab_forceBack">"toepassing nu sluiten"</string>
     <string name="permdesc_forceBack">"Hiermee kan een toepassing elke willekeurige activiteit die op de voorgrond wordt uitgevoerd, sluiten en naar de achtergrond verplaatsen. Nooit vereist voor normale toepassingen."</string>
     <string name="permlab_dump">"interne systeemstatus ophalen"</string>
     <string name="permdesc_dump">"Hiermee kan een toepassing de interne status van het systeem ophalen. Schadelijke toepassingen kunnen privé- of veiligheidsgegevens ophalen die ze normaal niet nodig hebben."</string>
@@ -258,8 +266,8 @@
     <string name="permdesc_camera">"Hiermee kan een toepassing foto\'s maken met de camera. De toepassing kan op deze manier op elk gewenste moment foto\'s verzamelen van wat de camera ziet."</string>
     <string name="permlab_brick">"telefoon permanent uitschakelen"</string>
     <string name="permdesc_brick">"Hiermee kan de toepassing de telefoon permanent uitschakelen. Dit is erg gevaarlijk."</string>
-    <string name="permlab_reboot">"telefoon gedwongen opnieuw opstarten"</string>
-    <string name="permdesc_reboot">"Hiermee kan de toepassing de telefoon gedwongen opnieuw opstarten."</string>
+    <string name="permlab_reboot">"telefoon nu opnieuw opstarten"</string>
+    <string name="permdesc_reboot">"Hiermee kan de toepassing de telefoon nu opnieuw opstarten."</string>
     <string name="permlab_mount_unmount_filesystems">"bestandssystemen koppelen en ontkoppelen"</string>
     <string name="permdesc_mount_unmount_filesystems">"Hiermee kan de toepassing bestandssystemen koppelen en ontkoppelen voor verwisselbare opslagruimte."</string>
     <string name="permlab_mount_format_filesystems">"externe opslag formatteren"</string>
@@ -321,9 +329,9 @@
     <string name="permlab_disableKeyguard">"toetsblokkering uitschakelen"</string>
     <string name="permdesc_disableKeyguard">"Hiermee kan een toepassing de toetsblokkering en bijbehorende wachtwoordbeveiliging uitschakelen. Een voorbeeld: de telefoon schakelt de toetsblokkering uit als er een oproep binnenkomt en schakelt de toetsblokkering weer in als de oproep is beëindigd."</string>
     <string name="permlab_readSyncSettings">"synchronisatie-instellingen lezen"</string>
-    <string name="permdesc_readSyncSettings">"Hiermee kan een toepassing de synchronisatie-instellingen lezen, bijvoorbeeld of de synchronisatie van contactpersonen is ingeschakeld."</string>
+    <string name="permdesc_readSyncSettings">"Hiermee kan een toepassing de synchronisatie-instellingen lezen, bijvoorbeeld of de synchronisatie van contacten is ingeschakeld."</string>
     <string name="permlab_writeSyncSettings">"synchronisatie-instellingen schrijven"</string>
-    <string name="permdesc_writeSyncSettings">"Hiermee kan een toepassing uw synchronisatie-instellingen wijzigen, bijvoorbeeld of de synchronisatie van contactpersonen is ingeschakeld."</string>
+    <string name="permdesc_writeSyncSettings">"Hiermee kan een toepassing uw synchronisatie-instellingen wijzigen, bijvoorbeeld of de synchronisatie van contacten is ingeschakeld."</string>
     <string name="permlab_readSyncStats">"synchronisatiestatistieken lezen"</string>
     <string name="permdesc_readSyncStats">"Hiermee kan een toepassing de synchronisatiestatistieken lezen, zoals de geschiedenis van uitgevoerde synchronisaties."</string>
     <string name="permlab_subscribedFeedsRead">"geabonneerde feeds lezen"</string>
@@ -379,17 +387,18 @@
   </string-array>
     <string name="keyguard_password_enter_pin_code">"PIN-code invoeren"</string>
     <string name="keyguard_password_wrong_pin_code">"Onjuiste PIN-code!"</string>
-    <string name="keyguard_label_text">"Druk op \'Menu\' en vervolgens op 0 om te deblokkeren."</string>
+    <string name="keyguard_label_text">"Druk op \'Menu\' en vervolgens op 0 om te ontgrendelen."</string>
     <string name="emergency_call_dialog_number_for_display">"Alarmnummer"</string>
     <string name="lockscreen_carrier_default">"(Geen service)"</string>
     <string name="lockscreen_screen_locked">"Scherm geblokkeerd."</string>
-    <string name="lockscreen_instructions_when_pattern_enabled">"Druk op \'Menu\' om te deblokkeren of noodoproep te plaatsen."</string>
-    <string name="lockscreen_instructions_when_pattern_disabled">"Druk op \'Menu\' om te deblokkeren."</string>
-    <string name="lockscreen_pattern_instructions">"Patroon tekenen om te deblokkeren"</string>
+    <string name="lockscreen_instructions_when_pattern_enabled">"Druk op \'Menu\' om te ontgrendelen of noodoproep te plaatsen."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled">"Druk op \'Menu\' om te ontgrendelen."</string>
+    <string name="lockscreen_pattern_instructions">"Patroon tekenen om te ontgrendelen"</string>
     <string name="lockscreen_emergency_call">"Noodoproep"</string>
     <string name="lockscreen_pattern_correct">"Juist!"</string>
     <string name="lockscreen_pattern_wrong">"Probeer het opnieuw"</string>
-    <string name="lockscreen_plugged_in">"Opladen (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Sluit de oplader aan."</string>
     <string name="lockscreen_missing_sim_message_short">"Geen SIM-kaart."</string>
     <string name="lockscreen_missing_sim_message">"Geen SIM-kaart in telefoon."</string>
@@ -398,13 +407,13 @@
     <string name="lockscreen_sim_puk_locked_message">"SIM-kaart is geblokkeerd met PUK-code."</string>
     <string name="lockscreen_sim_puk_locked_instructions">"Neem contact op met de klantenservice."</string>
     <string name="lockscreen_sim_locked_message">"SIM-kaart is geblokkeerd."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message">"SIM-kaart deblokkeren..."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message">"SIM-kaart ontgrendelen..."</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message">"U heeft uw deblokkeringspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin">"U heeft uw deblokkeringspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen, wordt u gevraagd om uw telefoon te deblokkeren met uw Google aanmelding."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin">"U heeft uw deblokkeringspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen, wordt u gevraagd om uw telefoon te ontgrendelen met uw Google aanmelding."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
     <string name="lockscreen_too_many_failed_attempts_countdown">"Probeer het over <xliff:g id="NUMBER">%d</xliff:g> seconden opnieuw."</string>
     <string name="lockscreen_forgot_pattern_button_text">"Patroon vergeten?"</string>
     <string name="lockscreen_glogin_too_many_attempts">"Te veel patroonpogingen!"</string>
-    <string name="lockscreen_glogin_instructions">"U moet zich aanmelden bij uw Google-account"\n"om te deblokkeren"</string>
+    <string name="lockscreen_glogin_instructions">"U moet zich aanmelden bij uw Google-account"\n"om te ontgrendelen"</string>
     <string name="lockscreen_glogin_username_hint">"Gebruikersnaam (e-mail)"</string>
     <string name="lockscreen_glogin_password_hint">"Wachtwoord"</string>
     <string name="lockscreen_glogin_submit_button">"Aanmelden"</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Meldingen wissen"</string>
     <string name="status_bar_no_notifications_title">"Geen meldingen"</string>
     <string name="status_bar_ongoing_events_title">"Actief"</string>
     <string name="status_bar_latest_events_title">"Meldingen"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"Opladen..."</string>
     <string name="battery_low_title">"Sluit de oplader aan"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"Twaalf uur \'s middags"</string>
     <string name="midnight">"middernacht"</string>
     <string name="Midnight">"Middernacht"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"Zondag"</string>
     <string name="day_of_week_long_monday">"Maandag"</string>
@@ -692,7 +701,7 @@
     <string name="paste">"Plakken"</string>
     <string name="copyUrl">"URL kopiëren"</string>
     <string name="inputMethod">"Invoermethode"</string>
-    <string name="addToDictionary">"\'%s\' toevoegen aan woordenboek"</string>
+    <string name="addToDictionary">"%s\' toevoegen aan woordenboek"</string>
     <string name="editTextMenuTitle">"Tekst bewerken"</string>
     <string name="low_internal_storage_view_title">"Weinig ruimte"</string>
     <string name="low_internal_storage_view_text">"Opslagruimte van telefoon raakt op."</string>
@@ -716,7 +725,7 @@
     <string name="anr_activity_process">"Activiteit <xliff:g id="ACTIVITY">%1$s</xliff:g> (in proces <xliff:g id="PROCESS">%2$s</xliff:g>) reageert niet."</string>
     <string name="anr_application_process">"Toepassing <xliff:g id="APPLICATION">%1$s</xliff:g> (in proces <xliff:g id="PROCESS">%2$s</xliff:g>) reageert niet."</string>
     <string name="anr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> reageert niet."</string>
-    <string name="force_close">"Gedwongen sluiten"</string>
+    <string name="force_close">"Nu sluiten"</string>
     <string name="wait">"Wachten"</string>
     <string name="debug">"Foutopsporing"</string>
     <string name="sendText">"Selecteer een actie voor tekst"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"Weet u zeker dat u de SD-kaart wilt formatteren? Alle gegevens op uw kaart gaan dan verloren."</string>
     <string name="extmedia_format_button_format">"Formatteren"</string>
     <string name="select_input_method">"Invoermethode selecteren"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"kandidaten"</u></string>
     <string name="ext_media_checking_notification_title">"SD-kaart voorbereiden"</string>
     <string name="ext_media_checking_notification_message">"Controleren op fouten"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"Geen overeenkomende activiteiten gevonden"</string>
     <string name="permlab_pkgUsageStats">"gebruiksstatistieken van component bijwerken"</string>
     <string name="permdesc_pkgUsageStats">"Hiermee kunnen verzamelde gebruiksstatistieken van een component worden gewijzigd. Niet voor gebruik door normale toepassingen."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index a49b824..641d335 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -43,8 +43,8 @@
     <string name="needPuk2">"Wprowadź kod PUK2, aby odblokować kartę SIM."</string>
     <string name="ClipMmi">"Identyfikator dzwoniącego przy połączeniach przychodzących"</string>
     <string name="ClirMmi">"Identyfikator dzwoniącego przy połączeniach wychodzących"</string>
-    <string name="CfMmi">"Przekierowanie połączeń"</string>
-    <string name="CwMmi">"Połączenie oczekujące"</string>
+    <string name="CfMmi">"Przekierowania połączeń"</string>
+    <string name="CwMmi">"Połączenia oczekujące"</string>
     <string name="BaMmi">"Blokada dzwonienia"</string>
     <string name="PwdMmi">"Zmiana hasła"</string>
     <string name="PinMmi">"Zmiana kodu PIN"</string>
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"Tryb cichy"</string>
     <string name="global_action_silent_mode_on_status">"Dźwięk jest wyłączony"</string>
     <string name="global_action_silent_mode_off_status">"Dźwięk jest włączony"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Tryb awaryjny"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Usługi płatne"</string>
     <string name="permgroupdesc_costMoney">"Pozwól aplikacjom na wykonywanie płatnych operacji."</string>
     <string name="permgrouplab_messages">"Twoje wiadomości"</string>
@@ -244,7 +252,7 @@
     <string name="permdesc_accessLocationExtraCommands">"Dostęp do dodatkowych poleceń dostawcy informacji o położeniu. Szkodliwe aplikacje mogą go wykorzystać, aby wpływać na działanie urządzenia GPS lub innych źródeł ustalania położenia."</string>
     <string name="permlab_accessFineLocation">"dokładne położenie (GPS)"</string>
     <string name="permdesc_accessFineLocation">"Uzyskiwanie dostępu do dokładnych źródeł ustalania położenia w telefonie, takich jak system GPS, tam, gdzie są one dostępne. Szkodliwe aplikacje mogą to wykorzystać do określenia położenia użytkownika oraz mogą zużywać więcej energii baterii."</string>
-    <string name="permlab_accessCoarseLocation">"zgrubne (oparte o sieć) ustalanie położenia"</string>
+    <string name="permlab_accessCoarseLocation">"przybliżone ustalanie położenia (oparte o sieć)"</string>
     <string name="permdesc_accessCoarseLocation">"Dostęp do źródeł, takich jak bazy danych sieci komórkowych, jeśli są dostępne, które pozwalają określić przybliżone położenie telefonu. Szkodliwe aplikacje mogą go wykorzystać do określenia, gdzie w przybliżeniu znajduje się użytkownik."</string>
     <string name="permlab_accessSurfaceFlinger">"dostęp do usługi SurfaceFlinger"</string>
     <string name="permdesc_accessSurfaceFlinger">"Pozwala aplikacji na wykorzystanie funkcji niskiego poziomu usługi SurfaceFlinger."</string>
@@ -260,7 +268,7 @@
     <string name="permdesc_brick">"Pozwala aplikacji na wyłączenie całego telefonu na stałe. Jest to bardzo niebezpieczne."</string>
     <string name="permlab_reboot">"wymuszanie ponownego uruchomienia telefonu"</string>
     <string name="permdesc_reboot">"Pozwala aplikacji na wymuszenie ponownego uruchomienia telefonu."</string>
-    <string name="permlab_mount_unmount_filesystems">"montowanie i odmontowanie systemów plików"</string>
+    <string name="permlab_mount_unmount_filesystems">"podłączanie i odłączanie systemów plików"</string>
     <string name="permdesc_mount_unmount_filesystems">"Pozwala aplikacjom na podłączanie i odłączanie systemów plików w pamięciach przenośnych."</string>
     <string name="permlab_mount_format_filesystems">"formatowanie pamięci zewnętrznej"</string>
     <string name="permdesc_mount_format_filesystems">"Zezwala aplikacji na formatowanie wymiennych nośników."</string>
@@ -379,17 +387,18 @@
   </string-array>
     <string name="keyguard_password_enter_pin_code">"Wprowadź kod PIN"</string>
     <string name="keyguard_password_wrong_pin_code">"Błędny kod PIN!"</string>
-    <string name="keyguard_label_text">"Aby odblokować, naciśnij przycisk Menu, a następnie 0."</string>
+    <string name="keyguard_label_text">"Aby odblokować, naciśnij Menu, a następnie 0."</string>
     <string name="emergency_call_dialog_number_for_display">"Numer alarmowy"</string>
     <string name="lockscreen_carrier_default">"(Brak usługi)"</string>
     <string name="lockscreen_screen_locked">"Ekran zablokowany."</string>
-    <string name="lockscreen_instructions_when_pattern_enabled">"Naciśnij przycisk Menu, aby odblokować lub wykonać połączenie alarmowe."</string>
-    <string name="lockscreen_instructions_when_pattern_disabled">"Naciśnij przycisk Menu, aby odblokować."</string>
+    <string name="lockscreen_instructions_when_pattern_enabled">"Naciśnij Menu, aby odblokować lub wykonać połączenie alarmowe."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled">"Naciśnij Menu, aby odblokować."</string>
     <string name="lockscreen_pattern_instructions">"Narysuj wzór, aby odblokować"</string>
     <string name="lockscreen_emergency_call">"Połączenie alarmowe"</string>
     <string name="lockscreen_pattern_correct">"Poprawnie!"</string>
     <string name="lockscreen_pattern_wrong">"Niestety, spróbuj ponownie"</string>
-    <string name="lockscreen_plugged_in">"Ładowanie (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Podłącz ładowarkę."</string>
     <string name="lockscreen_missing_sim_message_short">"Brak karty SIM."</string>
     <string name="lockscreen_missing_sim_message">"Brak karty SIM w telefonie."</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Wyczyść powiadomienia"</string>
     <string name="status_bar_no_notifications_title">"Brak powiadomień"</string>
     <string name="status_bar_ongoing_events_title">"Trwające"</string>
     <string name="status_bar_latest_events_title">"Powiadomienia"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"Ładowanie..."</string>
     <string name="battery_low_title">"Podłącz ładowarkę"</string>
@@ -449,7 +458,7 @@
     <string name="today">"Dzisiaj"</string>
     <string name="yesterday">"Wczoraj"</string>
     <string name="tomorrow">"Jutro"</string>
-    <string name="oneMonthDurationPast">"miesiąc temu"</string>
+    <string name="oneMonthDurationPast">"1 miesiąc temu"</string>
     <string name="beforeOneMonthDurationPast">"Ponad 1 miesiąc temu"</string>
   <plurals name="num_seconds_ago">
     <item quantity="one">"sekundę temu"</item>
@@ -530,13 +539,13 @@
     <string name="weeks">"tygodni"</string>
     <string name="year">"rok"</string>
     <string name="years">"lat"</string>
-    <string name="sunday">"Niedziela"</string>
-    <string name="monday">"Poniedziałek"</string>
-    <string name="tuesday">"Wtorek"</string>
-    <string name="wednesday">"Środa"</string>
-    <string name="thursday">"Czwartek"</string>
-    <string name="friday">"Piątek"</string>
-    <string name="saturday">"Sobota"</string>
+    <string name="sunday">"niedziela"</string>
+    <string name="monday">"poniedziałek"</string>
+    <string name="tuesday">"wtorek"</string>
+    <string name="wednesday">"środa"</string>
+    <string name="thursday">"czwartek"</string>
+    <string name="friday">"piątek"</string>
+    <string name="saturday">"sobota"</string>
     <string name="every_weekday">"W każdy dzień roboczy (pon–pt)"</string>
     <string name="daily">"Codziennie"</string>
     <string name="weekly">"Co tydzień w <xliff:g id="DAY">%s</xliff:g>"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"Południe"</string>
     <string name="midnight">"północ"</string>
     <string name="Midnight">"Północ"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,19 +612,19 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
-    <string name="day_of_week_long_sunday">"Niedziela"</string>
-    <string name="day_of_week_long_monday">"Poniedziałek"</string>
-    <string name="day_of_week_long_tuesday">"Wtorek"</string>
-    <string name="day_of_week_long_wednesday">"Środa"</string>
-    <string name="day_of_week_long_thursday">"Czwartek"</string>
-    <string name="day_of_week_long_friday">"Piątek"</string>
-    <string name="day_of_week_long_saturday">"Sobota"</string>
+    <string name="day_of_week_long_sunday">"niedziela"</string>
+    <string name="day_of_week_long_monday">"poniedziałek"</string>
+    <string name="day_of_week_long_tuesday">"wtorek"</string>
+    <string name="day_of_week_long_wednesday">"środa"</string>
+    <string name="day_of_week_long_thursday">"czwartek"</string>
+    <string name="day_of_week_long_friday">"piątek"</string>
+    <string name="day_of_week_long_saturday">"sobota"</string>
     <string name="day_of_week_medium_sunday">"Nie"</string>
     <string name="day_of_week_medium_monday">"Pon"</string>
     <string name="day_of_week_medium_tuesday">"Wt"</string>
@@ -683,7 +692,7 @@
     <string name="elapsed_time_short_format_mm_ss">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
     <string name="elapsed_time_short_format_h_mm_ss">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
     <string name="selectAll">"Zaznacz wszystko"</string>
-    <string name="selectText">"Wybierz tekst"</string>
+    <string name="selectText">"Zaznacz tekst"</string>
     <string name="stopSelectingText">"Zatrzymaj wybieranie tekstu"</string>
     <string name="cut">"Wytnij"</string>
     <string name="cutAll">"Wytnij wszystko"</string>
@@ -691,7 +700,7 @@
     <string name="copyAll">"Kopiuj wszystko"</string>
     <string name="paste">"Wklej"</string>
     <string name="copyUrl">"Kopiuj adres URL"</string>
-    <string name="inputMethod">"Metoda wejściowa"</string>
+    <string name="inputMethod">"Wprowadzanie tekstu"</string>
     <string name="addToDictionary">"Dodaj „%s” do słownika"</string>
     <string name="editTextMenuTitle">"Edytuj tekst"</string>
     <string name="low_internal_storage_view_title">"Mało miejsca"</string>
@@ -703,7 +712,7 @@
     <string name="dialog_alert_title">"Uwaga"</string>
     <string name="capital_on">"Włącz"</string>
     <string name="capital_off">"Wyłącz"</string>
-    <string name="whichApplication">"Zakończ działanie, korzystając z"</string>
+    <string name="whichApplication">"Zakończ czynność korzystając z"</string>
     <string name="alwaysUse">"Używaj domyślnie dla tej czynności."</string>
     <string name="clearDefaultHintMsg">"Wyczyść domyślne w: Ustawienia strony głównej &gt; Aplikacje &gt; Zarządzaj aplikacjami."</string>
     <string name="chooseActivity">"Wybierz czynność"</string>
@@ -712,8 +721,8 @@
     <string name="aerr_application">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) została niespodziewanie zatrzymana. Spróbuj ponownie."</string>
     <string name="aerr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> został niespodziewanie zatrzymany. Spróbuj ponownie."</string>
     <string name="anr_title">"Przepraszamy!"</string>
-    <string name="anr_activity_application">"Działanie <xliff:g id="ACTIVITY">%1$s</xliff:g> (w aplikacji <xliff:g id="APPLICATION">%2$s</xliff:g>) nie odpowiada."</string>
-    <string name="anr_activity_process">"Działanie <xliff:g id="ACTIVITY">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
+    <string name="anr_activity_application">"<xliff:g id="ACTIVITY">%1$s</xliff:g> (w aplikacji <xliff:g id="APPLICATION">%2$s</xliff:g>) nie odpowiada."</string>
+    <string name="anr_activity_process">"<xliff:g id="ACTIVITY">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
     <string name="anr_application_process">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
     <string name="anr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> nie odpowiada."</string>
     <string name="force_close">"Wymuś zamknięcie"</string>
@@ -754,9 +763,9 @@
     <string name="perms_show_all"><b>"Pokaż wszystko"</b></string>
     <string name="googlewebcontenthelper_loading">"Ładowanie..."</string>
     <string name="usb_storage_title">"Połączenie przez USB"</string>
-    <string name="usb_storage_message">"Telefon został podłączony do komputera przez port USB. Wybierz polecenie „Montuj”, jeśli chcesz skopiować pliki między komputerem a kartą SD w telefonie."</string>
-    <string name="usb_storage_button_mount">"Zamontuj"</string>
-    <string name="usb_storage_button_unmount">"Nie montuj"</string>
+    <string name="usb_storage_message">"Telefon został podłączony do komputera przez port USB. Wybierz polecenie „Podłącz”, jeśli chcesz skopiować pliki między komputerem a kartą SD w telefonie."</string>
+    <string name="usb_storage_button_mount">"Podłącz"</string>
+    <string name="usb_storage_button_unmount">"Nie podłączaj"</string>
     <string name="usb_storage_error_message">"Wystąpił problem z wykorzystaniem karty SD dla pamięci USB."</string>
     <string name="usb_storage_notification_title">"Połączenie przez USB"</string>
     <string name="usb_storage_notification_message">"Wybierz, aby skopiować pliki do/z komputera"</string>
@@ -770,9 +779,9 @@
     <string name="extmedia_format_title">"Formatuj kartę SD"</string>
     <string name="extmedia_format_message">"Czy na pewno sformatować kartę SD? Wszystkie dane na karcie zostaną utracone."</string>
     <string name="extmedia_format_button_format">"Formatuj"</string>
-    <string name="select_input_method">"Wybierz metodę wejściową"</string>
-    <string name="fast_scroll_alphabet">"AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="select_input_method">"Sposób wprowadzania tekstu"</string>
+    <string name="fast_scroll_alphabet">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"kandydaci"</u></string>
     <string name="ext_media_checking_notification_title">"Przygotowywanie karty SD"</string>
     <string name="ext_media_checking_notification_message">"Sprawdzanie w poszukiwaniu błędów"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"Nie znaleziono pasujących działań"</string>
     <string name="permlab_pkgUsageStats">"aktualizowanie statystyk użycia komponentu"</string>
     <string name="permdesc_pkgUsageStats">"Zezwala na modyfikacje zebranych statystyk użycia komponentu. Nieprzeznaczone dla zwykłych aplikacji."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 612a185..ba88667 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"Беззвучный режим"</string>
     <string name="global_action_silent_mode_on_status">"Звук выключен"</string>
     <string name="global_action_silent_mode_off_status">"Звук включен"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"Безопасный режим"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"Платные службы"</string>
     <string name="permgroupdesc_costMoney">"Разрешить приложениям выполнять действия, за которые может взиматься плата."</string>
     <string name="permgrouplab_messages">"Сообщения"</string>
@@ -389,7 +397,8 @@
     <string name="lockscreen_emergency_call">"Экстренный вызов"</string>
     <string name="lockscreen_pattern_correct">"Верно!"</string>
     <string name="lockscreen_pattern_wrong">"Неверно, попробуйте еще раз"</string>
-    <string name="lockscreen_plugged_in">"Зарядка (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"Подключите зарядное устройство."</string>
     <string name="lockscreen_missing_sim_message_short">"Нет SIM-карты."</string>
     <string name="lockscreen_missing_sim_message">"В телефоне нет SIM-карты."</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"Очистить уведомления"</string>
     <string name="status_bar_no_notifications_title">"Нет уведомлений"</string>
     <string name="status_bar_ongoing_events_title">"Текущие"</string>
     <string name="status_bar_latest_events_title">"Уведомления"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"Идет зарядка..."</string>
     <string name="battery_low_title">"Подключите зарядное устройство"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"Полдень"</string>
     <string name="midnight">"полночь"</string>
     <string name="Midnight">"Полночь"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"воскресенье"</string>
     <string name="day_of_week_long_monday">"понедельник"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"Отформатировать карту SD? Все данные, находящиеся на карте, будут уничтожены."</string>
     <string name="extmedia_format_button_format">"Формат"</string>
     <string name="select_input_method">"Выбор способа ввода"</string>
-    <string name="fast_scroll_alphabet">"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
+    <string name="fast_scroll_alphabet">" АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
     <string name="candidates_style"><u>"кандидаты"</u></string>
     <string name="ext_media_checking_notification_title">"Подготовка карты SD"</string>
     <string name="ext_media_checking_notification_message">"Поиск ошибок"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"Подходящих действий не найдено"</string>
     <string name="permlab_pkgUsageStats">"обновлять статистику использования компонентов"</string>
     <string name="permdesc_pkgUsageStats">"Позволяет изменять собранную статистику использования компонентов. Не предназначено для использования обычными приложениями."</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index fbd58e8..346e254 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"静音模式"</string>
     <string name="global_action_silent_mode_on_status">"声音已关闭"</string>
     <string name="global_action_silent_mode_off_status">"声音已开启"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"安全模式"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"需要您支付费用的服务"</string>
     <string name="permgroupdesc_costMoney">"允许应用程序执行可能需要您支付费用的操作。"</string>
     <string name="permgrouplab_messages">"您的信息"</string>
@@ -389,7 +397,8 @@
     <string name="lockscreen_emergency_call">"紧急电话"</string>
     <string name="lockscreen_pattern_correct">"正确！"</string>
     <string name="lockscreen_pattern_wrong">"很抱歉，请重试"</string>
-    <string name="lockscreen_plugged_in">"正在充电 (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"连接您的充电器。"</string>
     <string name="lockscreen_missing_sim_message_short">"没有 SIM 卡。"</string>
     <string name="lockscreen_missing_sim_message">"手机中无 SIM 卡。"</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"清除通知"</string>
     <string name="status_bar_no_notifications_title">"无通知"</string>
     <string name="status_bar_ongoing_events_title">"正在进行的"</string>
     <string name="status_bar_latest_events_title">"通知"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"正在充电..."</string>
     <string name="battery_low_title">"请连接充电器"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"中午"</string>
     <string name="midnight">"午夜"</string>
     <string name="Midnight">"午夜"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="YEAR">%Y</xliff:g> 年 <xliff:g id="MONTH">%B</xliff:g> 月 <xliff:g id="DAY">%-d</xliff:g> 日"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="YEAR">%Y</xliff:g> 年 <xliff:g id="MONTH">%B</xliff:g> 月 <xliff:g id="DAY">%-d</xliff:g> 日 <xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g> 年 <xliff:g id="MONTH1">%2$s</xliff:g> 月 <xliff:g id="DAY1">%3$s</xliff:g> 日 <xliff:g id="TIME1">%5$s</xliff:g> 至 <xliff:g id="YEAR2">%9$s</xliff:g> 年 <xliff:g id="MONTH2">%7$s</xliff:g> 月 <xliff:g id="DAY2">%8$s</xliff:g> 日 <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g> 年 <xliff:g id="MONTH1">%2$s</xliff:g> 月 <xliff:g id="DAY1_0">%3$s</xliff:g> 日<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> 至 <xliff:g id="YEAR2">%9$s</xliff:g> 年 <xliff:g id="MONTH2">%7$s</xliff:g> 月 <xliff:g id="DAY2_1">%8$s</xliff:g> 日<xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="YEAR">%Y</xliff:g> 年 <xliff:g id="MONTH">%b</xliff:g> 月 <xliff:g id="DAY">%-d</xliff:g> 日"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"周日"</string>
     <string name="day_of_week_long_monday">"周一"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"您确定要格式化 SD 卡？卡上的所有数据都会丢失。"</string>
     <string name="extmedia_format_button_format">"格式化"</string>
     <string name="select_input_method">"选择输入方法"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"候选"</u></string>
     <string name="ext_media_checking_notification_title">"正在准备 SD 卡"</string>
     <string name="ext_media_checking_notification_message">"检查是否有错误"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"找不到匹配的活动"</string>
     <string name="permlab_pkgUsageStats">"更新组件使用情况统计"</string>
     <string name="permdesc_pkgUsageStats">"允许修改收集的组件使用情况统计。普通应用程序不能使用此权限。"</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 18d6711..6d4b8214 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -103,7 +103,15 @@
     <string name="global_action_toggle_silent_mode">"靜音模式"</string>
     <string name="global_action_silent_mode_on_status">"音效已關閉"</string>
     <string name="global_action_silent_mode_off_status">"聲音已開啟"</string>
+    <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+    <skip />
+    <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+    <skip />
     <string name="safeMode">"安全模式"</string>
+    <!-- no translation found for android_system_label (6577375335728551336) -->
+    <skip />
     <string name="permgrouplab_costMoney">"需要額外費用的服務。"</string>
     <string name="permgroupdesc_costMoney">"若您允許應用程式執行此操作，可能需要支付一些費用。"</string>
     <string name="permgrouplab_messages">"您的簡訊"</string>
@@ -389,7 +397,8 @@
     <string name="lockscreen_emergency_call">"緊急電話"</string>
     <string name="lockscreen_pattern_correct">"正確！"</string>
     <string name="lockscreen_pattern_wrong">"抱歉，請再試一次"</string>
-    <string name="lockscreen_plugged_in">"充電中 (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
+    <skip />
     <string name="lockscreen_low_battery">"請連接充電器。"</string>
     <string name="lockscreen_missing_sim_message_short">"沒有 SIM  卡。"</string>
     <string name="lockscreen_missing_sim_message">"手機未插入 SIM 卡。"</string>
@@ -412,15 +421,15 @@
     <string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
     <string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <!-- no translation found for hour_ampm (7618670480400517084) -->
+    <!-- no translation found for hour_ampm (4329881288269772723) -->
     <skip />
-    <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
+    <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
     <skip />
     <string name="status_bar_clear_all_button">"清除通知"</string>
     <string name="status_bar_no_notifications_title">"沒有通知"</string>
     <string name="status_bar_ongoing_events_title">"進行中"</string>
     <string name="status_bar_latest_events_title">"通知"</string>
-    <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+    <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
     <skip />
     <string name="battery_status_charging">"充電中"</string>
     <string name="battery_low_title">"請連接充電器"</string>
@@ -569,12 +578,12 @@
     <string name="Noon">"中午"</string>
     <string name="midnight">"午夜"</string>
     <string name="Midnight">"午夜"</string>
-    <!-- no translation found for month_day (5565829181417740906) -->
+    <!-- no translation found for month_day (3693060561170538204) -->
     <skip />
-    <!-- no translation found for month (7026169712234774086) -->
+    <!-- no translation found for month (1976700695144952053) -->
     <skip />
     <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>，<xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for month_year (9219019380312413367) -->
+    <!-- no translation found for month_year (2106203387378728384) -->
     <skip />
     <string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
     <string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>，<xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -603,11 +612,11 @@
     <string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>，<xliff:g id="YEAR1">%4$s</xliff:g>，<xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>，<xliff:g id="YEAR2">%9$s</xliff:g>，<xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>，<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>，<xliff:g id="YEAR1">%4$s</xliff:g>，<xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>，<xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>，<xliff:g id="YEAR2">%9$s</xliff:g>，<xliff:g id="TIME2">%10$s</xliff:g>"</string>
     <string name="abbrev_month_day_year">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="DAY">%-d</xliff:g>，<xliff:g id="YEAR">%Y</xliff:g>"</string>
-    <!-- no translation found for abbrev_month_year (3856424847226891943) -->
+    <!-- no translation found for abbrev_month_year (5966980891147982768) -->
     <skip />
-    <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+    <!-- no translation found for abbrev_month_day (3156047263406783231) -->
     <skip />
-    <!-- no translation found for abbrev_month (3131032032850777433) -->
+    <!-- no translation found for abbrev_month (7304935052615731208) -->
     <skip />
     <string name="day_of_week_long_sunday">"星期日"</string>
     <string name="day_of_week_long_monday">"星期一"</string>
@@ -771,8 +780,8 @@
     <string name="extmedia_format_message">"確定要將 SD 卡格式化嗎？該 SD 卡中的所有資料將會遺失。"</string>
     <string name="extmedia_format_button_format">"格式化"</string>
     <string name="select_input_method">"選取輸入法"</string>
-    <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style"><u>"待選項目"</u></string>
     <string name="ext_media_checking_notification_title">"正在準備 SD 卡"</string>
     <string name="ext_media_checking_notification_message">"正在檢查錯誤"</string>
@@ -789,6 +798,18 @@
     <string name="activity_list_empty">"找不到符合的活動"</string>
     <string name="permlab_pkgUsageStats">"更新元件使用統計資料"</string>
     <string name="permdesc_pkgUsageStats">"允許修改收集到的元件使用統計資料。一般應用程式不會使用此功能。"</string>
-    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
+    <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
+    <skip />
+    <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
+    <skip />
+    <!-- no translation found for ime_action_go (8320845651737369027) -->
+    <skip />
+    <!-- no translation found for ime_action_search (658110271822807811) -->
+    <skip />
+    <!-- no translation found for ime_action_send (2316166556349314424) -->
+    <skip />
+    <!-- no translation found for ime_action_next (3138843904009813834) -->
+    <skip />
+    <!-- no translation found for ime_action_default (2840921885558045721) -->
     <skip />
 </resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index 9f2c840..18a13554 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -4,89 +4,102 @@
 **
 ** Copyright 2006, The Android Open Source Project
 **
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
 **
-**     http://www.apache.org/licenses/LICENSE-2.0 
+**     http://www.apache.org/licenses/LICENSE-2.0
 **
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
 -->
-<resources>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
 
     <!-- Do not translate. These are all of the drawable resources that should be preloaded by
          the zygote process before it starts forking application processes. -->
     <array name="preloaded_drawables">
-        <item>@drawable/scrollbar_handle_vertical</item>
-        <item>@drawable/scrollbar_handle_horizontal</item>
-        <item>@drawable/scrollbar_horizontal</item>
-        <item>@drawable/scrollbar_vertical</item>
-        
-        <item>@drawable/edit_text</item>
-        
-        <item>@drawable/title_bar</item>
-        
-        <item>@drawable/spinner_dropdown_background_down</item>
-        <item>@drawable/divider_horizontal_bright</item>
-
-        <item>@drawable/popup_full_dark</item>
-        <item>@drawable/panel_background</item>
-        
         <item>@drawable/sym_def_app_icon</item>
-        
-        <item>@drawable/progress_horizontal</item>
-        <item>@drawable/list_selector_background</item>
-        <item>@drawable/btn_default</item>
-
-        <!-- New additions... -->
-        <item>@drawable/popup_top_dark</item>
-        <item>@drawable/popup_center_dark</item>
-        <item>@drawable/popup_bottom_dark</item>
-        <item>@drawable/popup_top_bright</item>
-        <item>@drawable/popup_center_bright</item>
-        <item>@drawable/popup_bottom_bright</item>
-        
-        <!-- These are not normally referenced at first boot, but maybe
-             would be good to preload? -->
+        <item>@drawable/arrow_down_float</item>
         <item>@drawable/btn_check</item>
-        <item>@drawable/btn_dropdown</item>
-        <item>@drawable/btn_radio</item>
-        <item>@drawable/list_selector_background</item>
+        <item>@drawable/btn_check_label_background</item>
+        <item>@drawable/btn_check_off</item>
+        <item>@drawable/btn_check_on</item>
+        <item>@drawable/btn_default</item>
         <item>@drawable/btn_default_small</item>
-        <item>@drawable/btn_toggle</item>
-
-        <!-- Contacts -->
-        <item>@drawable/tab_indicator</item>
+        <item>@drawable/btn_dropdown</item>
+        <item>@drawable/btn_plus</item>
+        <item>@drawable/btn_minus</item>
+        <item>@drawable/btn_radio</item>
         <item>@drawable/btn_star</item>
-        <item>@drawable/button_inset</item>
-        
-        <!-- Menus -->
+        <item>@drawable/btn_toggle</item>
+        <item>@drawable/ic_emergency</item>
+        <item>@drawable/divider_horizontal_bright</item>
+        <item>@drawable/divider_horizontal_dark</item>
+        <item>@drawable/edit_text</item>
+        <item>@drawable/expander_group</item>
+        <item>@drawable/list_selector_background</item>
         <item>@drawable/menu_background</item>
         <item>@drawable/menu_background_fill_parent_width</item>
         <item>@drawable/menu_selector</item>
-        <item>@drawable/divider_vertical_bright</item>
-        
-        <item>@drawable/expander_group</item>
-        
+        <item>@drawable/panel_background</item>
+        <item>@drawable/popup_bottom_bright</item>
+        <item>@drawable/popup_bottom_dark</item>
+        <item>@drawable/popup_bottom_medium</item>
+        <item>@drawable/popup_center_bright</item>
+        <item>@drawable/popup_center_dark</item>
+        <item>@drawable/popup_full_dark</item>
+        <item>@drawable/popup_top_bright</item>
+        <item>@drawable/popup_top_dark</item>
+        <item>@drawable/progress_horizontal</item>
+        <item>@drawable/progress_indeterminate_horizontal</item>
+        <item>@drawable/progress_small</item>
+        <item>@drawable/progress_small_titlebar</item>
+        <item>@drawable/screen_background_dark</item>
+        <item>@drawable/screen_background_light</item>
+        <item>@drawable/scrollbar_handle_horizontal</item>
+        <item>@drawable/scrollbar_handle_vertical</item>
+        <item>@drawable/spinner_dropdown_background</item>
+        <item>@drawable/title_bar</item>
+        <item>@drawable/title_bar_shadow</item>
+        <item>@drawable/zoom_ring_arrows</item>
+        <item>@drawable/zoom_ring_overview_tab</item>
+        <item>@drawable/zoom_ring_thumb</item>
+        <item>@drawable/zoom_ring_thumb_minus_arrow_rotatable</item>
+        <item>@drawable/zoom_ring_thumb_plus_arrow_rotatable</item>
+        <item>@drawable/zoom_ring_track</item>
+        <item>@drawable/zoom_ring_track_absolute</item>
         <!-- Visual lock screen -->
         <item>@drawable/indicator_code_lock_drag_direction_green_up</item>
         <item>@drawable/indicator_code_lock_drag_direction_red_up</item>
         <item>@drawable/indicator_code_lock_point_area_default</item>
         <item>@drawable/indicator_code_lock_point_area_green</item>
         <item>@drawable/indicator_code_lock_point_area_red</item>
-        
-        <!-- Zoom controls for maps, browser, etc. -->
-        <item>@drawable/btn_plus</item>
-        <item>@drawable/btn_minus</item>
-        <item>@drawable/zoom_plate</item>
-        
     </array>
-    
+
+    <!-- Do not translate. These are all of the color state list resources that should be
+         preloaded by the zygote process before it starts forking application processes. -->
+    <array name="preloaded_color_state_lists">
+        <item>@color/hint_foreground_dark</item>
+        <item>@color/hint_foreground_light</item>
+        <item>@color/primary_text_dark</item>
+        <item>@color/primary_text_dark_disable_only</item>
+        <item>@color/primary_text_light</item>
+        <item>@color/primary_text_light_disable_only</item>
+        <item>@color/primary_text_light_nodisable</item>
+        <item>@color/secondary_text_dark</item>
+        <item>@color/secondary_text_light</item>
+        <item>@color/tab_indicator_text</item>
+        <item>@color/tertiary_text_dark</item>
+        <item>@color/tertiary_text_light</item>
+        <item>#ff000000</item>
+        <item>#00000000</item>
+        <item>#ffffffff</item>
+    </array>
+
     <!-- Do not translate. -->
     <integer-array name="maps_starting_lat_lng">
         <item>36149777</item>
@@ -100,19 +113,19 @@
     <!-- Do not translate. Defines the slots for the right-hand side icons.  That is to say, the
          icons in the status bar that are not notifications. -->
     <string-array name="status_bar_icon_order">
-        <item>clock</item>
-        <item>alarm_clock</item>
-        <item>battery</item>
-        <item>phone_signal</item>
-        <item>data_connection</item>
-        <item>volume</item>
-        <item>mute</item>
-        <item>speakerphone</item>
-        <item>wifi</item>
-        <item>bluetooth</item>
-        <item>gps</item>
-        <item>sync_active</item>
-        <item>sync_failing</item>
-        <item>ime</item>
+        <item><xliff:g id="id">clock</xliff:g></item>
+        <item><xliff:g id="id">alarm_clock</xliff:g></item>
+        <item><xliff:g id="id">battery</xliff:g></item>
+        <item><xliff:g id="id">phone_signal</xliff:g></item>
+        <item><xliff:g id="id">data_connection</xliff:g></item>
+        <item><xliff:g id="id">volume</xliff:g></item>
+        <item><xliff:g id="id">mute</xliff:g></item>
+        <item><xliff:g id="id">speakerphone</xliff:g></item>
+        <item><xliff:g id="id">wifi</xliff:g></item>
+        <item><xliff:g id="id">bluetooth</xliff:g></item>
+        <item><xliff:g id="id">gps</xliff:g></item>
+        <item><xliff:g id="id">sync_active</xliff:g></item>
+        <item><xliff:g id="id">sync_failing</xliff:g></item>
+        <item><xliff:g id="id">ime</xliff:g></item>
     </string-array>
 </resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index c1a6440..44da1d5 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -405,7 +405,8 @@
     <!-- **************************************************************** -->
     <eat-comment />
 
-    <!-- Size of text (example: 15sp). Supported values include the following:<p/>
+    <!-- Size of text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp).
+         Supported values include the following:<p/>
     <ul>
         <li><b>px</b> Pixels</li>
         <li><b>sp</b> Scaled pixels (scaled to relative pixel size on screen). See {@link android.util.DisplayMetrics} for more information.</li>
@@ -414,6 +415,7 @@
     </ul>
         -->
     <attr name="textSize" format="dimension" />
+    
     <!-- Default text typeface. -->
     <attr name="typeface">
         <enum name="normal" value="0" />
@@ -421,20 +423,26 @@
         <enum name="serif" value="2" />
         <enum name="monospace" value="3" />
     </attr>
+    
     <!-- Default text typeface style. -->
     <attr name="textStyle">
         <flag name="normal" value="0" />
         <flag name="bold" value="1" />
         <flag name="italic" value="2" />
     </attr>
+    
     <!-- Color of text (usually same as colorForeground). -->
     <attr name="textColor" format="reference|color" />
+    
     <!-- Color of highlighted text. -->
     <attr name="textColorHighlight" format="reference|color" />
+    
     <!-- Color of hint text (displayed when the field is empty). -->
     <attr name="textColorHint" format="reference|color" />
+    
     <!-- Color of link text (URLs). -->
     <attr name="textColorLink" format="reference|color" />
+    
     <!-- Where to ellipsize text. -->
     <attr name="ellipsize">
         <enum name="none" value="0" />
@@ -443,6 +451,7 @@
         <enum name="end" value="3" />
         <enum name="marquee" value="4" />
     </attr>
+    
     <!-- The type of data being placed in a text field, used to help an
          input method decide how to let the user enter text.  The constants
          here correspond to those defined by
@@ -485,13 +494,9 @@
         <flag name="textMultiLine" value="0x00020001" />
         <!-- Can be combined with <var>text</var> and its variations to
              indicate that though the regular text view should not be multiple
-             lines, and IME should provide multiple lines if it can.  Corresponds to
+             lines, the IME should provide multiple lines if it can.  Corresponds to
              {@link android.text.InputType#TYPE_TEXT_FLAG_IME_MULTI_LINE}. -->
         <flag name="textImeMultiLine" value="0x00040001" />
-        <!-- Can be combined with <var>text</var> and its variations to
-             indicate that a search string is being entered.  Corresponds to
-             {@link android.text.InputType#TYPE_TEXT_FLAG_SEARCH}. -->
-        <flag name="textSearch" value="0x00080001" />
         <!-- Text that will be used as a URI.  Corresponds to
              {@link android.text.InputType#TYPE_CLASS_TEXT} |
              {@link android.text.InputType#TYPE_TEXT_VARIATION_URI}. -->
@@ -558,6 +563,46 @@
         <flag name="time" value="0x00000024" />
     </attr>
 
+    <!-- Additional features you can enable in an IME associated with an editor,
+         to improve the integration with your application.  The constants
+         here correspond to those defined by
+         {@link android.view.inputmethod.EditorInfo#imeOptions}. -->
+    <attr name="imeOptions">
+        <!-- There are no special semantics associated with this editor. -->
+        <flag name="normal" value="0x00000000" />
+        <!-- There is no special action associated with this editor.
+             Corresponds to
+             {@link android.view.inputmethod.EditorInfo#IME_ACTION_NONE}. -->
+        <flag name="actionNone" value="0x00000000" />
+        <!-- The action key performs a "go"
+             operation to take the user to the target of the text they typed.
+             Typically used, for example, when entering a URL.
+             {@link android.view.inputmethod.EditorInfo#IME_ACTION_GO}. -->
+        <flag name="actionGo" value="0x00000001" />
+        <!-- The action key performs a "search"
+             operation, taking the user to the results of searching for the text
+             the have typed (in whatever context is appropriate).
+             {@link android.view.inputmethod.EditorInfo#IME_ACTION_SEARCH}. -->
+        <flag name="actionSearch" value="0x00000002" />
+        <!-- The action key performs a "send"
+             operation, delivering the text to its target.  This is typically used
+             when composing a message.
+             {@link android.view.inputmethod.EditorInfo#IME_ACTION_SEND}. -->
+        <flag name="actionSend" value="0x00000003" />
+        <!-- The action key performs a "next"
+             operation, taking the user to the next field that will accept text.
+             {@link android.view.inputmethod.EditorInfo#IME_ACTION_NEXT}. -->
+        <flag name="actionNext" value="0x00000004" />
+        <!-- Used in conjunction with a custom action,
+             this indicates that the action should not
+             be available in-line as the same as a "enter" key.  Typically this is
+             because the action has such a significant impact or is not recoverable
+             enough that accidentally hitting it should be avoided, such as sending
+             a message.
+             {@link android.view.inputmethod.EditorInfo#IME_FLAG_NO_ENTER_ACTION}. -->
+        <flag name="flagNoEnterAction" value="0x40000000" />
+    </attr>
+
     <!-- A coordinate in the X dimension. -->
     <attr name="x" format="dimension" />
     <!-- A coordinate in the Y dimension. -->
@@ -1602,7 +1647,7 @@
     <declare-styleable name="TextAppearance">
         <!-- Text color. -->
         <attr name="textColor" />
-        <!-- Size of the text. -->
+        <!-- Size of the text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp). -->
         <attr name="textSize" />
         <!-- Style (bold, italic, bolditalic) for the text. -->
         <attr name="textStyle" />
@@ -1643,7 +1688,7 @@
         <attr name="textColorHint" />
         <!-- Base text color, typeface, size, and style. -->
         <attr name="textAppearance" />
-        <!-- Size of the text. -->
+        <!-- Size of the text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp). -->
         <attr name="textSize" />
         <!-- Sets the horizontal scaling factor for the text -->
         <attr name="textScaleX" format="float" />
@@ -1815,13 +1860,22 @@
             <enum name="marquee_forever" value="-1" />
         </attr>
         <attr name="inputType" />
+        <attr name="imeOptions" />
         <!-- An addition content type description to supply to the input
              method attached to the text view, which is private to the
              implementation of the input method.  This simply fills in
-             the {@link android.view.inputmethod.EditorInfo#privateContentType
-             EditorInfo.privateContentType} field when the input
+             the {@link android.view.inputmethod.EditorInfo#privateImeOptions
+             EditorInfo.privateImeOptions} field when the input
              method is connected. -->
-        <attr name="editorPrivateContentType" format="string" />
+        <attr name="privateImeOptions" format="string" />
+        <!-- Supply a value for
+             {@link android.view.inputmethod.EditorInfo#actionLabel EditorInfo.actionLabel}
+             used when an input method is connected to the text view. -->
+        <attr name="imeActionLabel" format="string" />
+        <!-- Supply a value for
+             {@link android.view.inputmethod.EditorInfo#actionId EditorInfo.actionId}
+             used when an input method is connected to the text view. -->
+        <attr name="imeActionId" format="integer" />
         <!-- Reference to an
              {@link android.R.styleable#InputExtras &lt;input-extras&gt;}
              XML resource containing additional data to
@@ -1851,6 +1905,19 @@
         <attr name="dropDownVerticalOffset" format="dimension" />
         <!-- Amount of pixels by which the drop down should be offset horizontally. -->
         <attr name="dropDownHorizontalOffset" format="dimension" />
+        <!-- View to anchor the auto-complete dropdown to. If not specified, the text view itself
+             is used. -->
+        <attr name="dropDownAnchor" format="reference" />
+        <!-- Specifies the basic width of the dropdown. Its value may
+             be a dimension (such as "12dip") for a constant width, fill_parent
+             to fill the width of the screen, or wrap_content to match the width
+             of the anchored view. -->
+        <attr name="dropDownWidth" format="dimension">
+            <!-- The dropdown should fill the width of the screen. -->
+            <enum name="fill_parent" value="-1" />
+            <!-- The dropdown should fit the width of its anchor. -->
+            <enum name="wrap_content" value="-2" />
+        </attr>
         <attr name="inputType" />
     </declare-styleable>
     <declare-styleable name="PopupWindow">
@@ -2170,6 +2237,16 @@
         </attr>
     </declare-styleable>
 
+    <!-- Drawable used to draw 9-patches. -->
+    <declare-styleable name="NinePatchDrawable">
+        <!-- Identifier of the bitmap file. This attribute is mandatory. -->
+        <attr name="src" />
+        <!-- Enables or disables dithering of the bitmap if the bitmap does not have the
+             same pixel configuration as the screen (for instance: a ARGB 8888 bitmap with
+             an RGB 565 screen.) -->
+        <attr name="dither" />
+    </declare-styleable>
+
     <!-- Drawable used to draw a single color. -->
     <declare-styleable name="ColorDrawable">
         <!-- The color to use. -->
@@ -2534,6 +2611,7 @@
                        changing to use only icons for its buttons.}-->
         <attr name="searchButtonText" format="string" />
         <attr name="inputType" />
+        <attr name="imeOptions" />
         
         <!-- Additional features are controlled by mode bits in this field.  Omitting
             this field, or setting to zero, provides default behavior.  <i>Optional attribute.</i> 
@@ -3021,14 +3099,20 @@
     <!-- =============================== -->
 
     <!-- Use <code>gadget-provider</code> as the root tag of the XML resource that
-         describes a gadget provider.  See TODO android.gadget android.gadget package
+         describes a gadget provider.  See TODO android.gadget package
          for more info.
      -->
     <declare-styleable name="GadgetProviderInfo">
+        <!-- Minimum width of the gadget. -->
         <attr name="minWidth"/>
+        <!-- Minimum height of the gadget. -->
         <attr name="minHeight"/>
+        <!-- Update period in milliseconds, or 0 if the gadget will update itself. -->
         <attr name="updatePeriodMillis" format="integer" />
+        <!-- A resource id of a layout. -->
         <attr name="initialLayout" format="reference" />
+        <!-- A class name in the gadget's package to be launched to configure.
+             If not supplied, then no activity will be launched. -->
         <attr name="configure" format="string" />
     </declare-styleable>
     
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index e6b0ff7..94d0793 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -942,7 +942,7 @@
   <public type="attr" name="inputType" id="0x01010220" />
   <public type="attr" name="isDefault" id="0x01010221" />
   <public type="attr" name="windowDisablePreview" id="0x01010222" />
-  <public type="attr" name="editorPrivateContentType" id="0x01010223" />
+  <public type="attr" name="privateImeOptions" id="0x01010223" />
   <public type="attr" name="editorExtras" id="0x01010224" />
   <public type="attr" name="settingsActivity" id="0x01010225" />
   <public type="attr" name="fastScrollEnabled" id="0x01010226" />
@@ -1005,6 +1005,11 @@
   <public type="attr" name="innerRadius" id="0x0101025f" />
   <public type="attr" name="thickness" id="0x01010260" />
   <public type="attr" name="sharedUserLabel" id="0x01010261" />
+  <public type="attr" name="dropDownWidth" id="0x01010262" />
+  <public type="attr" name="dropDownAnchor" id="0x01010263" />
+  <public type="attr" name="imeOptions" id="0x01010264" />
+  <public type="attr" name="imeActionLabel" id="0x01010265" />
+  <public type="attr" name="imeActionId" id="0x01010266" />
 
   <!-- The part of the UI shown by an
        {@link android.inputmethodservice.InputMethodService} that contains the
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 7adf542..346fa80 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -240,6 +240,15 @@
     <!-- status message in phone options dialog for when silent mode is disabled -->
     <string name="global_action_silent_mode_off_status">Sound is ON</string>
 
+    <!-- label for item that toggles airplane mode -->
+    <string name="global_actions_toggle_airplane_mode">Airplane mode</string>
+
+    <!-- status message in phone options dialog for when airplane mode is on -->
+    <string name="global_actions_airplane_mode_on_status">Airplane mode is ON</string>
+
+    <!-- status message in phone options dialog for when airplane mode is off -->
+    <string name="global_actions_airplane_mode_off_status">Airplane mode is OFF</string>
+
     <!-- Displayed to the user to tell them that they have started up the phone in "safe mode" -->
     <string name="safeMode">Safe mode</string>
 
@@ -1116,7 +1125,7 @@
 
     <!-- When the lock screen is showing and the phone plugged in, show the current
          charge %.  -->
-    <string name="lockscreen_plugged_in">Charging (<xliff:g id="number">%d%%</xliff:g>)</string>
+    <string name="lockscreen_plugged_in">Charging (<xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g>)</string>
 
     <!-- When the lock screen is showing and the battery is low, warn user to plug
          in the phone soon. -->
@@ -2265,6 +2274,26 @@
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_pkgUsageStats">Allows the modification of collected component usage statistics. Not for use by normal applications.</string>
 
-    <!-- Shown in the tutorial for double tap to zoom. -->
-    <string name="tutorial_double_tap_to_zoom_message_short">Double tap to zoom</string>
+    <!-- Shown in the tutorial for tap twice for zoom control. -->
+    <string name="tutorial_double_tap_to_zoom_message_short">Tap twice for zoom control</string>
+
+    <!-- Shown in gadget hosts (e.g. the home screen) when there was an error inflating
+    the gadget. -->
+    <string name="gadget_host_error_inflating">Error inflating widget</string>
+
+    <!-- Long label for a button on a full-screen input method for the "Go" action. -->
+    <string name="ime_action_go">Go</string>
+    
+    <!-- Long label for a button on a full-screen input method for the "Search" action. -->
+    <string name="ime_action_search">Search</string>
+    
+    <!-- Long label for a button on a full-screen input method for the "Send" action. -->
+    <string name="ime_action_send">Send</string>
+    
+    <!-- Long label for a button on a full-screen input method for the "Next" action. -->
+    <string name="ime_action_next">Next</string>
+    
+    <!-- Long label for a button on a full-screen input method for an unknown action. -->
+    <string name="ime_action_default">Execute</string>
+    
 </resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 6ed2d8d..54eba62 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -349,8 +349,9 @@
         <item name="android:completionThreshold">2</item>
         <item name="android:dropDownSelector">@android:drawable/list_selector_background</item>
         <item name="android:popupBackground">@android:drawable/spinner_dropdown_background</item>
-        <item name="android:dropDownVerticalOffset">-8px</item>
+        <item name="android:dropDownVerticalOffset">-6px</item>
         <item name="android:dropDownHorizontalOffset">0px</item>
+        <item name="android:dropDownWidth">wrap_content</item>
     </style>
 
     <style name="Widget.Spinner">
diff --git a/docs/html/app.yaml b/docs/html/app.yaml
index c63791e..9ffb775 100644
--- a/docs/html/app.yaml
+++ b/docs/html/app.yaml
@@ -3,9 +3,36 @@
 runtime: python
 api_version: 1
 
+# This file defines two mutually exclusive 
+# hander blocks:
+# - a handler for use on a local dev_appserver
+#   during development or non-production doc build
+# - a handler for use on a production gae 
+#   instance. This handler requires that the
+#   docs files in the app have been compressed 
+#   with divide_and_compress.py and that main.py
+#   and gae_shell/ are present.
+#
+# Only one of the handler blocks should be
+# uncommented at any given time. By default,
+# the development handler is exposed. 
+
 handlers:
 
+# DEVELOPMENT HANDLER
+# (this handler block *must* be commented
+# out before pushing to a production server)
 - url: /
   static_dir: /
 
-
+# PRODUCTION GAE HANDLER
+#- url: /gae_shell/static
+#  static_dir: gae_shell/static
+#  expiration: 1d
+#
+#- url: /gae_shell/.*
+#  script: /gae_shell/shell.py
+#  login: admin
+#
+#- url: .*
+#  script: main.py
diff --git a/docs/html/community/index.jd b/docs/html/community/index.jd
index 4dc5503..2df4c01 100644
--- a/docs/html/community/index.jd
+++ b/docs/html/community/index.jd
@@ -4,7 +4,7 @@
 
 	<div id="mainBodyFluid">
 			<h1>Community</h1>
-			<p>Welcome to the Android developers community! We're glad you're here and invite you to participate in these discussions. Before posting, please red the <a href="#">Groups Charter</a> that covers the community guidelines.</p>
+			<p>Welcome to the Android developers community! We're glad you're here and invite you to participate in these discussions. Before posting, please read the <a href="http://source.android.com/discuss/android-discussion-groups-charter">Groups Charter</a> that covers the community guidelines.</p>
 
 <p class="note"><strong>Note:</strong> If you are seeking discussion about Android source code (not application development),
 then please refer to the <a href="http://source.android.com/discuss">Open Source Project Mailing lists</a>.</p>
@@ -115,4 +115,4 @@
 
 
 
-</div>
\ No newline at end of file
+</div>
diff --git a/docs/html/guide/publishing/app-signing.jd b/docs/html/guide/publishing/app-signing.jd
index 1862b50..28c927a 100644
--- a/docs/html/guide/publishing/app-signing.jd
+++ b/docs/html/guide/publishing/app-signing.jd
@@ -94,7 +94,7 @@
 application with Jarsigner.</li>
 </ul>
 
-<h2 id="strategies">Signing Strategies</h3>
+<h2 id="strategies">Signing Strategies</h2>
 
 <p>Some aspects of application signing may affect how you approach the development
 of your application, especially if you are planning to release multiple
diff --git a/docs/html/guide/publishing/preparing.jd b/docs/html/guide/publishing/preparing.jd
index 4db546d..d355265 100644
--- a/docs/html/guide/publishing/preparing.jd
+++ b/docs/html/guide/publishing/preparing.jd
@@ -18,9 +18,11 @@
 <p>Publishing an application means testing it, packaging it appropriately, and 
 making it available to users of Android-powered mobile devices.</p>
 
-<p>If you plan to publish your application for installation on Android-powered devices,
-there are several things you need to do, to get your application ready. This document 
-the significant checkpoints for preparing your application for a successful release. </p>
+<p>If you plan to publish your application for installation on
+Android-powered devices, there are several things you need to do, to get
+your application ready. This document highlights the significant
+checkpoints for preparing your application for a successful release.
+</p>
 
 <p>If you will publish your application on Android Market, please also see <a
 href="{@docRoot}guide/publishing/publishing.html#market">Publishing on Android Market</a> 
@@ -67,7 +69,7 @@
 {@link android.app.Instrumentation Instrumentation} to run JUnit and other 
 test cases, and you can use testing
 tools such as the <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application
-Exerciser Monkey</a>. </p>
+Exerciser Monkey</a>.  </p>
 
 <ul>
 <li>To ensure that your application will run properly for users, you should make
@@ -131,7 +133,7 @@
 
 <h2 id="finalcompile">Before you do the final compile of your application</h2>
 
-<h3 id="versionapp">5. Version Your Application</h3>
+<h3 id="versionapp">5. Version your application</h3>
 
 <p>Before you compile your application, you must make sure that you have defined
 a version number for your application, specifying an appropriate value for both
@@ -147,7 +149,8 @@
 element in the application's manifest file, using appropriate values. </p>
 
 <p>For detailed information about how to define version information for your
-application, see <a href="{@docRoot}guide/publishing/versioning.html">Versioning Your Applications</a>.</p>
+application, see <a href="{@docRoot}guide/publishing/versioning.html">Versioning 
+Your Applications</a>.</p>
 
 <h3 id="cryptokey">6. Obtain a suitable cryptographic key</h3>
 
@@ -158,7 +161,8 @@
 
 <p>Before you sign your application, you need to make sure that you have a
 suitable private key. For complete information about how to obtain (or generate)
-a private key, see <a href="#cert">Obtaining a Private Key</a>.</p>
+a private key, see <a href="{@docRoot}guide/publishing/app-signing.html#cert">
+Obtaining a Suitable Private Key</a>.</p>
 
 <p>Once you have obtained (or generated) a suitable private key, you will use it
 to:</p>
@@ -166,20 +170,18 @@
 <ul>
 <li>Register for a Maps API Key (see below), if your application uses MapView
 elements.</li>
-<li>Sign your application for release</li>
+<li>Sign your application for release, later in the preparation process</li>
 </ul>
 
-
 <h3 id="mapsApiKey">7. Register for a Maps API Key, if your application is using
 MapView elements</h3>
 
-<div class="sidebox" style="margin-bottom:.5em;"><p>For complete information
-about getting a Maps API Key, see <a
+<div class="sidebox" style="margin-bottom:.5em;padding:1em;"><p>
+For complete information about getting a Maps API Key, see <a
 href="{@docRoot}guide/topics/location/geo/mapkey.html">Obtaining a Maps API
 Key</a>.<br></p></div>
 
-<p>If your application uses one or more 
-{@link-fixme com.google.android.maps.MapView Mapview} elements, you will need to 
+<p>If your application uses one or more Mapview elements, you will need to 
 register your application with the Google
 Maps service and obtain a Maps API Key, before your MapView(s) will be able to
 retrieve data from Google Maps. To do so, you supply an MD5 fingerprint of your
@@ -222,20 +224,20 @@
 href="#signing">Signing Your Applications</a>.</p>
 
 
-<h2 id="compile">Compile Your Application</h2>
+<h2 id="compile">Compile your application</h2>
 
 <p>When you've prepared your application as described in the previous sections,
 you can compile your application for release. </p>
 
-<h2 id="post-compile">After Compiling Your Application</h2>
+<h2 id="post-compile">After compiling your application</h2>
 
-<h3 id="signapp">8. Sign Your Application</h3>
+<h3 id="signapp">8. Sign your application</h3>
 
 <p>Sign your application using your private key. Signing your application
 correctly is critically important. Please see <a href="#signing">Signing Your
 Applications</a> for complete information. </p>
 
-<h3 id="testapp">9. Test Your Compiled and Signed Application</h3>
+<h3 id="testapp">9. Test your compiled and signed application</h3>
 
 <p>Before you release your compiled application, you should thoroughly test it
 on the target mobile device (and target network, if possible). In particular,
diff --git a/docs/html/guide/publishing/publishing.jd b/docs/html/guide/publishing/publishing.jd
index aed244e..3aea3cf 100644
--- a/docs/html/guide/publishing/publishing.jd
+++ b/docs/html/guide/publishing/publishing.jd
@@ -84,7 +84,7 @@
 server when you upload the application.</p>
 
 <div class="special">
-<p>Requirements enforced by the Android Market server</p>
+<p>Requirements enforced by the Android Market server:</p>
 <ol>
 <li>Your application must be signed with a cryptographic private key whose
 validity period ends after <span style="color:red">22 October 2033</span>. </li>
diff --git a/docs/html/guide/topics/manifest/manifest-intro.jd b/docs/html/guide/topics/manifest/manifest-intro.jd
index 3c8a34a..aa14308 100644
--- a/docs/html/guide/topics/manifest/manifest-intro.jd
+++ b/docs/html/guide/topics/manifest/manifest-intro.jd
@@ -51,7 +51,7 @@
 are present in the manifest only while the application is being developed and 
 tested; they're removed before the application is published.</li>
 
-<li>It declares the minimum version of the Android API that the application 
+<li>It declares the minimum level of the Android API that the application 
 requires.</li>
 
 <li>It lists the libraries that the application must be linked against.</li>
diff --git a/docs/html/guide/topics/ui/themes.jd b/docs/html/guide/topics/ui/themes.jd
index 956ffe1..41e8563 100644
--- a/docs/html/guide/topics/ui/themes.jd
+++ b/docs/html/guide/topics/ui/themes.jd
@@ -36,8 +36,8 @@
   <li>Create a file named <code>styles.xml</code> in the your application's <code>res/values</code> directory. Add a root <code>&lt;resources></code> node.</li>
   <li>For each style or theme, add a <code>&lt;style&gt;</code> element with a unique <code>name</code> and, optionally, a <code>parent</code> attribute.
     The name is used for referencing these styles later, and the parent indicates what style resource to inherit from.</li>
-  <li>Inside the <code>style</code> element, declare format values in one or more <code>&lt;item&gt;</code> element. 
-    Each <code>item</code> identifies its style property with a <code>name</code> attribute and defines its style value inside the element.</li>
+  <li>Inside the <code>&lt;style></code> element, declare format values in one or more <code>&lt;item&gt;</code> element(s). 
+    Each <code>&lt;item&gt;</code> identifies its style property with a <code>name</code> attribute and defines its style value inside the element.</li>
   <li>You can then reference the custom resources from other XML resources, your manifest or application code.</li>
 </ol>
 
@@ -60,7 +60,7 @@
 The <code>name</code> attribute in the <code>item</code> can refer to a standard string, a hex color value, 
 or a reference to any other resource type.</p>
 
-<p>Note the <code>parent</code> attribute in the <code>style</code> element. This attribute lets you specify a resource from which the current style will inherit values. The style can inherit from any type of resource that contains the style(s) you want. In general, your styles should always inherit (directly or indirectly) from a standard Android style resource. This way, you only have to define the values that you want to change.</p>
+<p>Notice the <code>parent</code> attribute in the <code>&lt;style></code> element. This attribute lets you specify a resource from which the current style will inherit values. The style can inherit from any type of resource that contains the style(s) you want. In general, your styles should always inherit (directly or indirectly) from a standard Android style resource. This way, you only have to define the values that you want to change.</p>
 
 <p>Here's how you would reference the custom style from an XML layout, in this case, for an EditText element:</p>
 
@@ -72,14 +72,15 @@
           android:text="Hello, World!" /&gt;
 </pre>
 
-<p>Now this EditText widget will be styled as defined by the <code>style</code> example above.</p>
+<p>Now this EditText widget will be styled as defined by the XML example above.</p>
 
 
 <h2 id="themes">Themes</h2>
 
 <p>Just like styles, themes are also declared in XML <code>&lt;style&gt;</code> elements, and are referenced in the same manner.
-The difference is that you can add a theme style only to <code>&lt;application&gt;</code> and <code>&lt;activity&gt;</code> elements &mdash;
-they cannot be applied to individual views in the layout.</p>
+The difference is that you add a theme to an entire application or activity, via the <code>&lt;application&gt;</code> 
+and <code>&lt;activity&gt;</code> elements in the Android Manifest &mdash;
+themes cannot be applied to individual Views.</p>
 
 <p>Here's an example declaration of a theme:</p>
 
@@ -130,32 +131,26 @@
 </pre>
 
 <p>If you like a theme, but want to slightly tweak it, just add the theme as the <code>parent</code> of your custom theme.
-For example, we'll modify the <code>Theme.Dialog</code> theme. First, we need to import the parent of the
-<code>Dialog</code> theme: <code>Theme</code>. At the top of the <code>resources</code>, add:</p>
-<pre>
-&lt;style name="Theme" parent="@android:Theme">
-    &lt;!-- no modification -->
-&lt;/style>
-</pre>
-<p>Now create a a new theme with <code>Theme.Dialog</code> as the parent:</p>
+For example, we'll modify the <code>Theme.Dialog</code> theme. To do so, create a style
+with <code>Theme.Dialog</code> as the parent:</p>
 <pre>
 &lt;style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
 </pre>
-<p>There it is. We've inherited the Dialog theme, so we can adjust its styles as we like. 
-So, for each item in the Dialog theme that we want to override, we re-define the value under this style and 
-then use <var>CustomDialogTheme</var> instead of the <var>Theme.Dialog</var>.</p>
+<p>There it is. We've inherited the Android Dialog theme so we can adjust its styles as we like. 
+So, for each item in the Dialog theme that we want to change, we re-define the value here and 
+use <var>CustomDialogTheme</var> instead of <var>Theme.Dialog</var> inside the Android Manifest.</p>
 
 <h3 id="fromTheApp">Set the theme from the application</h3>
 <p>You can also load a theme for an Activity programmatically, if needed. 
 To do so, use the {@link android.app.Activity#setTheme(int) setTheme()} 
 method. Note that, when doing so, you must be sure to set the theme <em>before</em> 
 instantiating any Views in the context, for example, before calling 
-setContentView(View) or inflate(int, ViewGroup). This ensures that 
+<code>setContentView(View)</code> or <code>inflate(int, ViewGroup)</code>. This ensures that 
 the system applies the same theme for all of your UI screens. Here's an example:</p>
 
 <pre>
- protected void onCreate(Bundle icicle) {
-    super.onCreate(icicle);
+ protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
     ...
     setTheme(android.R.style.Theme_Light);
     setContentView(R.layout.linear_layout_3);
@@ -164,14 +159,14 @@
 
 <p>If you are considering loading a theme programmatically for the main
 screen of your application, note that the theme would not be applied
-in any animations the system would use to show the activity, which
-would take place before your application starts. In most cases, if 
+in any animations the system would use to start the activity, which
+would take place before your application opens. In most cases, if 
 you want to apply a theme to your main screen, doing so in XML
  is a better approach. </p>
 
 <p>For detailed information about custom styles and themes and referencing them from your application, see
-<a href="{@docRoot}guide/topics/resources/available-resources.html#stylesandthemes">Style
-and Theme Resources</a>.</p>
+<a href="{@docRoot}guide/topics/resources/available-resources.html#stylesandthemes">Available Resource Types:
+Style and Themes</a>.</p>
 
 <p>For information about default themes and styles available, see {@link android.R.style}.</p>
 
diff --git a/docs/html/guide/tutorials/views/hello-autocomplete.jd b/docs/html/guide/tutorials/views/hello-autocomplete.jd
index de3ba29..fba1ad8 100644
--- a/docs/html/guide/tutorials/views/hello-autocomplete.jd
+++ b/docs/html/guide/tutorials/views/hello-autocomplete.jd
@@ -40,7 +40,7 @@
 
     AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit);
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
-            android.R.layout.simple_dropdown_item_1line, R.array.planets);
+            android.R.layout.simple_dropdown_item_1line, COUNTRIES);
     textView.setAdapter(adapter);
 }
 </pre>
diff --git a/docs/html/guide/tutorials/views/hello-formstuff.jd b/docs/html/guide/tutorials/views/hello-formstuff.jd
index f858ce32..da4289c 100644
--- a/docs/html/guide/tutorials/views/hello-formstuff.jd
+++ b/docs/html/guide/tutorials/views/hello-formstuff.jd
@@ -32,7 +32,7 @@
 <ol>
   <li><img src="images/android.png" align="right"/>
 	Drag the Android image on the right (or your own image) into the
-	res/drawables/ directory of your project. 
+	res/drawable/ directory of your project. 
         We'll use this for the button.</li>
   <li>Open the layout file and, inside the LinearLayout, add the {@link android.widget.ImageButton} element:
 <pre>
@@ -43,7 +43,7 @@
     android:src="@drawable/android" />	
 </pre>
 	<p>The source of the button
-	is from the res/drawables/ directory, where we've placed the android.png.</p>
+	is from the res/drawable/ directory, where we've placed the android.png.</p>
         <p class="note"><strong>Tip:</strong> You can also reference some of the many built-in
         images from the Android {@link android.R.drawable} resources, 
         like <code>ic_media_play</code>, for a "play" button image. To do so, change the source
@@ -52,7 +52,7 @@
 <li>To make the button to actually do something, add the following
 code at the end of the <code>onCreate()</code> method:
 <pre>
-ImageButton button = (ImageButton) findViewById(R.id.android_button);
+final ImageButton button = (ImageButton) findViewById(R.id.android_button);
 button.setOnClickListener(new OnClickListener() {
     public void onClick(View v) {
         // Perform action on clicks
@@ -84,12 +84,12 @@
 <li>To do something with the text that the user enters, add the following code
 to the end of the <code>onCreate()</code> method:
 <pre>
-EditText edittext = (EditText) findViewById(R.id.edittext);
+final EditText edittext = (EditText) findViewById(R.id.edittext);
 edittext.setOnKeyListener(new OnKeyListener() {
     public boolean onKey(View v, int keyCode, KeyEvent event) {
         if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
           // Perform action on key press
-          Toast.makeText(HelloImageButton.this, edittext.getText(), Toast.LENGTH_SHORT).show();
+          Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
           return true;
         }
         return false;
@@ -127,9 +127,9 @@
     public void onClick(View v) {
         // Perform action on clicks
         if (checkbox.isChecked()) {
-            Toast.makeText(HelloImageButton.this, "Selected", Toast.LENGTH_SHORT).show();
+            Toast.makeText(HelloFormStuff.this, "Selected", Toast.LENGTH_SHORT).show();
         } else {
-            Toast.makeText(HelloImageButton.this, "Not selected", Toast.LENGTH_SHORT).show();
+            Toast.makeText(HelloFormStuff.this, "Not selected", Toast.LENGTH_SHORT).show();
         }
     }
 });
@@ -183,7 +183,7 @@
     public void onClick(View v) {
         // Perform action on clicks
         RadioButton rb = (RadioButton) v;
-        Toast.makeText(HelloImageButton.this, rb.getText(), Toast.LENGTH_SHORT).show();
+        Toast.makeText(HelloFormStuff.this, rb.getText(), Toast.LENGTH_SHORT).show();
     }
 };
 </pre>
@@ -225,9 +225,9 @@
     public void onClick(View v) {
         // Perform action on clicks
         if (togglebutton.isChecked()) {
-            Toast.makeText(HelloImageButton.this, "ON", Toast.LENGTH_SHORT).show();
+            Toast.makeText(HelloFormStuff.this, "ON", Toast.LENGTH_SHORT).show();
         } else {
-            Toast.makeText(HelloImageButton.this, "OFF", Toast.LENGTH_SHORT).show();
+            Toast.makeText(HelloFormStuff.this, "OFF", Toast.LENGTH_SHORT).show();
         }
     }
 });
diff --git a/docs/html/guide/tutorials/views/hello-gridview.jd b/docs/html/guide/tutorials/views/hello-gridview.jd
index 623a03d..ffb6c93 100644
--- a/docs/html/guide/tutorials/views/hello-gridview.jd
+++ b/docs/html/guide/tutorials/views/hello-gridview.jd
@@ -25,6 +25,7 @@
     android:stretchMode="columnWidth"
     android:gravity="center"
 />
+</pre>
 </li>
   <li>Open the HelloGridView Java file. Insert the following for the <code>onCreate()</code> method:
 <pre>
diff --git a/docs/html/guide/tutorials/views/hello-mapview.jd b/docs/html/guide/tutorials/views/hello-mapview.jd
index b0f59de..976b8ab 100644
--- a/docs/html/guide/tutorials/views/hello-mapview.jd
+++ b/docs/html/guide/tutorials/views/hello-mapview.jd
@@ -16,8 +16,13 @@
 
     <pre>&lt;uses-library android:name="com.google.android.maps" /></pre>
       </li>
-
-   <li>Open the layout file. Define the layout with a MapView inside a RelativeLayout:
+   <li>We also need access to the internet in order to retrieve the Google Maps tiles,
+    so the application must request the {@link android.Manifest.permission#INTERNET INTERNET} permissions.
+    In the manifest file, add the following as a child of the <code>&lt;manifest></code> element:
+    <pre>&lt;uses-permission android:name="android.permission.INTERNET" /></pre>
+   </li>
+   <li>Now open the main layout file for your project. Define a layout with a com.google.android.maps.MapView 
+    inside a android.widget.RelativeLayout:
 
 <pre>
 &lt;?xml version="1.0" encoding="utf-8"?>
@@ -32,22 +37,21 @@
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:clickable="true"
-        android:apiKey="INSERT YOUR KEY HERE"
+        android:apiKey="<em>Your Maps API Key</em>"
     />
 
-&lt;RelativeLayout>
+&lt;/RelativeLayout>
 </pre>
-      <p>Setting <code>clickable</code> is important. Otherwise, the map does not allow any user interaction.</p>
+      <p>The <code>clickable</code> attribute defines whether you want to allow user-interaction with the map.
+      In this case, we set it "true" so that the user can navigate.</p>
 
-      <p>The <code>android:apiKey</code> must contain an authentic Android Maps API key.
-      The API key is generated using the MD5 fingerprint of your application certificate. For the purposes of 
-      this exercise, you should use the fingerprint of your debug certificate (which cannot be used to release
-      your application for Android devices, but will work while developing). See how to 
-      <a href="{@docRoot}guide/topics/location/geo/mapkey.html#getdebugfingerprint">generate a fingerprint from your 
-      debug certificate</a>, then <a href="http://code.google.com/android/maps-api-signup.html">register the 
-      certificate</a> to retieve an API key.
-      Insert the API key as the value of the <code>apiKey</code> attribute. If you do not insert a valid
-      Maps API key, the application will still run, but no map tiles will load.</p></li>
+      <p>The <code>apiKey</code> attribute holds the Google Maps API Key that proves your application and signer
+      certificate has been registered with the Google Maps service. Because MapView uses Google Maps data, this key is required
+      in order to receive the map data, even while you are developing. Registration is free and it only takes a couple
+      minutes to register your certificate and receive a Maps API Key. For instructions on getting a key, read
+      <a href="{@docRoot}guide/topics/location/geo/mapkey.html">Obtaining a Maps API Key</a>.
+      (For the purpose of this tutorial, you should register with the fingerprint of the SDK debug certificate.)
+      Once you've acquired the Maps API Key, insert it for the <code>apiKey</code> value.</p></li>
 
    <li>Now open the HelloMapView.java file. For this Activity, we're going to extend the special sub-class of 
       Activity called MapActivity, so change the class declaration to extend 
diff --git a/docs/html/sdk/1.0_r1/index.jd b/docs/html/sdk/1.0_r1/index.jd
index d236844..b6e0e9f 100644
--- a/docs/html/sdk/1.0_r1/index.jd
+++ b/docs/html/sdk/1.0_r1/index.jd
@@ -22,43 +22,44 @@
 
 <h2>Included in this SDK</h2>
 
-<p>This SDK includes some awesome stuff.</p>
+<h4>Development tools</h4>
+
+<p>The SDK includes a variety of tools for developing and debugging application code and designing 
+an application UI. You can read about the tools in the documentation included with the SDK. 
+You can access the tools in the <code>&lt;sdk&gt;/tools/</code> directory.</p>
+
+<h4 id="system_images">System Images</h4>
+
+<p>The Android system images listed below are included in this SDK.</p>
+
+<table style="margin-right:1em;" width="80%">
+<tr>
+<th><nobr>System Image</nobr></th><th><nobr>API Level</nobr></th><th>Notes</th><th>Description</th>
+</tr>
+
+<tr>
+<td width="5%"><nobr>Android 1.0</nobr></td>
+<td  width="5%">1</td>
+<td  width="5%"><nobr>N/A</nobr></td>
+<td>Includes the {@code com.google.android.maps} external library and a set of standard development 
+applications. </td>
+
+</tr>
+
+</table>
+
+<h4>Sample Code and Applications</h4>
+
+<p>You can look at a variety of tutorials and samples in the 
+documentation included with the SDK and access the sample code itself
+in the <code>&lt;sdk&gt;/samples/</code> directory of the SDK package.</p>
+
+<h4>Documentation</h4>
+
+<p>The SDK package provides a full set of local documentation, including installation and upgrade 
+instructions. To view it, open the <code>&lt;sdk&gt;/documentation.html</code> file in a web browser. 
+If you are developing in an IDE such as Eclipse, you can also view the reference documentation 
+directly in the IDE. </p>
 
 
-<h2>System and Software Requirements</h2>
 
-<p>The following systems and development environments are supported by this SDK.</p>
-
-<h4>Supported Operating Systems:</h4>
-<ul>
-  <li>Windows XP or Vista</li>
-  <li>Mac OS X 10.4.8 or later (x86 only)</li>
-  <li>Linux (tested on Linux Ubuntu Dapper Drake)</li>
-</ul>
-
-<h4>Supported Development Environments:</h4>
-<ul>
-  <li>Eclipse IDE
-    <ul>
-      <li><a href="http://www.eclipse.org/downloads/">Eclipse</a> 3.3 (Europa), 3.4 (Ganymede)
-        <ul>
-        <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included in most Eclipse IDE packages) </li>
-        <li><a href="http://www.eclipse.org/webtools">WST</a> (optional, but needed for the Android Editors feature; included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse IDE packages</a>)</li>
-        </ul>
-      </li>     
-      <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
-      <li><a href="installing.html#installingplugin">Android Development Tools plugin</a> (optional)</li>
-      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
-    </ul>
-  </li>
-  <li>Other development environments or IDEs
-    <ul>
-      <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
-      <li><a href="http://ant.apache.org/">Apache Ant</a> 1.6.5 or later for Linux and Mac, 1.7 or later for Windows</li>
-      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
-    </ul>
-  </li>
-</ul>
-
-<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In
-particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.0_r1/installing.jd b/docs/html/sdk/1.0_r1/installing.jd
index 0f15396..8ac524c 100644
--- a/docs/html/sdk/1.0_r1/installing.jd
+++ b/docs/html/sdk/1.0_r1/installing.jd
@@ -1,29 +1,27 @@
 page.title=Installing the SDK
+sdk.version=1.0_r1
 @jd:body
 
+<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
 
-<p>This page describes how to install the Android SDK and set up your development environment. If you haven't 
-downloaded the SDK yet, follow the link below.</p>
+<p>This page describes how to install the Android 1.0 SDK, Release 1, and set up your development environment. 
+If you haven't downloaded the SDK yet, you can so from the <a href="{@docRoot}sdk/1.0_r1/index.html">Download</a> page.</p>
 
-<div class="linkbox"><a href="http://developer.android.com/sdk/">Download the SDK</a></div>
+<p>Before you begin, be sure that your development environment meets the SDK
+<a href="{@docRoot}sdk/1.0_r1/requirements.html">System Requirements</a>. If you encounter any problems during installation,
+see the <a href="#installnotes">Installation Notes</a> at the bottom of this page.</p>
 
-<p>Before you begin, be sure that you're development environment meets the SDK
-<a href="requirements.html">System and Software Requirements</a>.</p>
-
-<div class="special">
 <h4 style="margin-top">Upgrading?</h4>
 <p>If you have already developed applications using an earlier version of the 
 SDK, please skip this page and read the 
-<b><a href="upgrading.html">Upgrading the SDK</a></b> document.  
+<a href="{@docRoot}sdk/1.0_r1/upgrading.html"><strong>Upgrading the SDK</strong></a></b> document instead.
 </p>
-</div>
-
 
 <a name="installingsdk"></a>
 <a name="setup"></a>
 <h2>Installing the SDK</h2>
 
-	<p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named  <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
+	<p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named  <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains a link to a local copy of the documentation and the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
 	
 	<p>Make a note of the name and location of the unpacked SDK directory on your system &mdash; you will need to refer to the SDK directory later, when setting up the Android plugin or using SDK tools. </p>
 
@@ -47,10 +45,86 @@
 
         <p>Adding <code>tools</code> to your path lets you run Android Debug Bridge (adb) and the other command line <a href="{@docRoot}guide/developing/tools/index.html">tools</a> without needing to supply the full path to the tools directory. Note that, if you update your SDK, you should remember to update your PATH settings to point to the new location, if different.</p>
 
-<h3>Setting up Eclipse</h3>
-<p>If you'll be developing with the Eclipse IDE, follow the following procedure to setup the IDE
-to use the Android SDK.</p>
-<p>Basically, you just need to update your Eclipse preferences to point to the Android SDK directory:</p>
+
+<p>If you will be using the Eclipse IDE as your environment for developing Android applications, continue reading the next
+section in order to install the Android Development Tools plugin and setup Eclipse. If you choose not to use Eclipse, you can 
+develop Android applications using other tools &mdash; read the guide to developing 
+<a href="{@docRoot}guide/developing/other-ide.html">In other IDEs</a>.</p>
+
+
+<h2>Setting up Eclipse</h2>
+
+<p>First, you should install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. Developing in ADT/Eclipse is highly recommended for Eclipse users and those new to Android.</p>
+
+<p>To download and install the ADT plugin, follow the steps below for your respective Eclipse version. </p>
+
+<table style="font-size:100%">
+<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
+<tr>
+<td width="45%">
+<ol>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
+            and Install...</strong>. </li>
+
+    <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click <strong>Next</strong>. </li>
+    <li>Click <strong>New Remote Site</strong>. </li>
+    <li>In the resulting dialog box, enter a name for the remote site (e.g. Android Plugin) and enter this as its URL:
+        <pre>https://dl-ssl.google.com/android/eclipse/</pre>
+        <p>Alternatively, you can use http in the Location URL, if you are having 
+         trouble with https (https is preferred for security reasons).</p>
+        <pre>http://dl-ssl.google.com/android/eclipse/</pre>
+        <p>Click <strong>OK</strong>.</p> </li>
+    <li>You should now see the new site added to the search list (and checked).
+        Click <strong>Finish</strong>. </li>
+    <li>In the subsequent Search Results dialog box, select the checkbox for
+    <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
+    This will check both features:  "Android Developer Tools", and "Android
+    Editors". The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>. </li>
+    <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>. 
+     Click <strong>Next</strong>. </li>
+    <li>Click <strong>Finish</strong>. </li>
+
+    <li>The ADT plugin is not signed; you can accept the installation anyway
+        by clicking <strong>Install All</strong>. </li>
+    <li>Restart Eclipse. </li>
+</ol>
+
+</td>
+<td>
+
+<ol>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.
+    </li>
+    <li>In the dialog that appears, click the <strong>Available Software</strong> tab.
+    </li>
+    <li>Click <strong>Add Site...</strong>
+    </li>
+    <li>Enter this as the Location:
+      <pre>https://dl-ssl.google.com/android/eclipse/</pre>
+      <p>Alternatively, you can use http in the Location URL, if you are having 
+         trouble with https (https is preferred for security reasons).</p>
+      <pre>http://dl-ssl.google.com/android/eclipse/</pre>
+      <p>Click <strong>OK</strong>.</p></li>
+    <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to 
+      <em>Developer Tools</em>  and click <strong>Install...</strong>
+    </li>
+    <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked. 
+    The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>.
+     </li>
+    <li>Accept the license agreement and click <strong>Finish</strong>.</li>
+    <li>Restart Eclipse. </li>
+</ol>
+
+</td>
+</tr>
+</table>
+
+
+<p>Now, you just need to modify your Eclipse preferences to point to the Android SDK directory:</p>
 <ol>
     <li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
         panel. (Mac OS X: <strong>Eclipse</strong> &gt; <strong>Preferences</strong>) </li>
@@ -58,16 +132,55 @@
     <li>For the SDK Location in the main panel, click <strong>Browse...</strong> and locate the SDK directory. </li>
     <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
 </ol>
-<p>Done! We now recommend that you install the ADT Eclipse plugin, which will provide some much-appreciated assistance in developing Android apps with Eclipse...</p>
 
-<a name="installingplugin"></a>
-<h2>Installing the Eclipse Plugin (ADT)</h2>
+<p>Done! If you haven't encountered any problems, then you're ready to begin developing Android applications.
+We recommend you begin with the <a href="{@docRoot}guide/tutorials/hello-world.html">Hello World</a> tutorial,
+which will teach you some basics about Android applications and how to create projects using Eclipse.</p>
 
-<p>If you will be using the Eclipse IDE as your environment for developing Android applications, you can install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. This plugin is highly recommended for Eclipse users.</p>
 
-<p>If you <em>will not</em> be using the Eclipse IDE, you do not need to download or install the ADT plugin.</p>
+<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
+<p> 
+If you are having trouble downloading the ADT plugin after following the steps above, here are some suggestions: </p>
 
-<p><strong>Follow this guide to install the ADT Plugin</strong></p>
+<ul>
+	<li>If Eclipse can not find the remote update site containing the ADT plugin, try changing the remote site URL to use http, rather than https. That is, set the Location for the remote site to:
+        <pre>http://dl-ssl.google.com/android/eclipse/</pre></li>
+	<li>If you are behind a firewall (such as a corporate firewall), make
+        sure that you have properly configured your proxy settings in Eclipse.
+        In Eclipse 3.3/3.4, you can configure proxy information from the main
+        Eclipse menu in <strong>Window</strong> (on Mac, <strong>Eclipse</strong>) &gt; <strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network Connections</strong>.</li>
+</ul>
+<p> 
+If you are still unable to use Eclipse to download the ADT plugin as a remote update site, you can download the ADT files to your local machine using a browser and the install the files in Eclipse from there:
+</p>
+<ol>
+<li><a href="{@docRoot}sdk/adt_download.html">Download the ADT zip file</a> (do not unpack it).
+<li>Follow steps 1 and 2 in the default install instructions (above).
+<li>In Eclipse 3.3, click <strong>New Archive Site...</strong>. <br/>
+    In Eclipse 3.4, click <strong>Add Site...</strong>, then <strong>Archive...</strong>
+<li>Browse and select the downloaded the zip file.
+<li>Follow the remaining procedures, above, starting from steps 5.
+</ol>
+<p> 
+Note that to update your plugin, you will have to follow these steps again instead of the default update instructions.</p>
+
+<p>Note that the "Android Editors" feature of ADT requires several optional 
+Eclipse components (for example, WST). If you encounter an error when 
+installing ADT, your Eclipse installion might not include those components. 
+For information about how to quickly add the necessary components to your 
+Eclipse installation, see the troubleshooting topic 
+<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#installeclipsecomponents">ADT Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>
+
+<h4>For Linux users</h4>
+<p>If you encounter this error when installing the ADT Plugin for Eclipse: 
+<pre>
+An error occurred during provisioning.
+Cannot connect to keystore.
+JKS</pre>
+<p>
+...then your development machine lacks a suitable Java VM. Installing Sun
+Java 6 will resolve this issue and you can then reinstall the ADT
+Plugin.</p>
 
 <a name="installnotes"></a>
 <h2>Installation Notes</h2>
@@ -106,19 +219,3 @@
 distributions may include JDK 1.4 or Gnu Compiler for Java, both of
 which are not supported for Android development.</li>
 </ul>
-
-<a name="developingwitheclipse"></a>
-<a name="existingcode"></a>
-<a name="creatingaproject" id="creatingaproject"></a>
-<a name="launchconfig" id="launchconfig"></a>
-<a name="installingrunningdebugging" id="installingrunningdebugging"></a>
-<a name="otherides" id="otherides"></a>
-<a name="buildingwithant"></a>
-<a name="debugging" id="debugging"></a>
-<a name="additionaldebugging" id="additionaldebugging"></a>
-<a name="toptips" id="toptips"></a>
-<a name="debughelpers"></a>
-<a name="uninstalling" id="uninstalling"></a>
-<a name="tips" id="tips"></a>
-<a name="eclipse" id="eclipse"></a> 
-<a name="building"></a>
diff --git a/docs/html/sdk/1.0_r1/upgrading.jd b/docs/html/sdk/1.0_r1/upgrading.jd
index 168f1be..480bff3 100644
--- a/docs/html/sdk/1.0_r1/upgrading.jd
+++ b/docs/html/sdk/1.0_r1/upgrading.jd
@@ -1,37 +1,12 @@
 page.title=Upgrading the SDK
+sdk.version=1.0_r1
 @jd:body
 
-<div class="sidebox-wrapper">
-  <div class="sidebox-inner">
-
-     <h2>Useful Links</h2>
-
-      <ul class="noindent">
-        <li><a href="migrating/0.9-1.0/changes-overview.html">Overview of Changes</a>
-		      <p>A high-level look at what's changed in Android, with 
-		       discussion of how the changes may affect your apps.</p></li>
-
-        <li><a href="migrating/0.9-1.0/changes.html">API Diff Report</a> 
-                <p>A detailed report that lists all the specific changes in the latest SDK.</p></li>
-
-        <li><a href="RELEASENOTES.html">Release Notes</a> 
-                <p>Version details, known issues, and resolved issues. </p></li>
-
-        <li><a href="http://groups.google.com/group/android-developers">Android Developers Group</a> 
-            <p>A forum where you can discuss migration issues and learn from other Android developers. </p></li>
- 
-        <li><a href="http://code.google.com/p/android/issues/list">Android Issue Tracker</a>
-            <p>If you think you may have found a bug, use the issue tracker to report it.</p></li>
-      </ul>
-
-   </div>
-</div><!-- class-sidebox -->
-
+<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
 
 <p>This guide will help you migrate your development environment and applications
-to the latest version of the SDK. Use this guide if you've been developing applications
-on a previous version of the Android SDK. 
-</p>
+to <strong>version 1.0, release 1</strong>, of the Android SDK. Use this guide if you've been developing applications
+on a different version of the Android SDK.</p>
 
 <p>To ensure that your applications are compliant with the Android 1.0 system available 
 on mobile devices, you need to install the new SDK and port your existing Android 
@@ -39,9 +14,7 @@
 
 <h2 id="install-new">Install the new SDK</h2>
 
-<p><a href="{@docRoot}download.html">Download the SDK</a> and unpack it into a safe location.</p>
-
-<p>After unpacking the new SDK, you should:</p>
+<p>After unpacking the SDK, you should:</p>
 
 <ul>
   <li>Wipe your emulator data. <p>Some data formats have changed since the last
@@ -60,27 +33,58 @@
 
 <h2 id="update-plugin">Update your ADT Eclipse Plugin</h2>
 
-<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the new plugin that accompanies the latest SDK.</p>
+<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the
+plugin that's required for this version of the SDK.</p>
 
 <table style="font-size:100%">
 <tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
 <tr>
-<td width="50%">
+<td width="45%">
 <ol>
-    <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find and Install...</strong>. </li>
-    <li> Select <strong>Search for updates of the currently installed features</strong> and click <strong>Finish</strong>. </li>
-    <li> If any update for ADT is available, select and install. </li>
-    <li> Restart Eclipse.</li>
+    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
+      file</a> (do not unpack it).</li>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
+            and Install...</strong>. </li>
+    <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click 
+      <strong>Next</strong>. </li>
+    <li>Click <strong>New Archive Site...</strong></li>
+    <li>Browse and select the downloaded the zip file.</li>
+    <li>You should now see the new site added to the search list (and checked).
+        Click <strong>Finish</strong>. </li>
+    <li>In the subsequent Search Results dialog box, select the checkbox for
+    <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
+    This will check both features:  "Android Developer Tools", and "Android
+    Editors". The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>. </li>
+    <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>. 
+     Click <strong>Next</strong>. </li>
+    <li>Click <strong>Finish</strong>. </li>
+    <li>The ADT plugin is not signed; you can accept the installation anyway
+        by clicking <strong>Install All</strong>. </li>
+    <li>Restart Eclipse. </li>
 </ol>
+
 </td>
 <td>
+
 <ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates...</strong></li>
-    <li>Select the <strong>Installed Software</strong> tab.</li>
-    <li>Click <strong>Update...</strong></li>
-    <li>If an update for ADT is available, select it and click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse.</li>
+    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
+      file</a> (do not unpack it).</li>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.</li>
+    <li>In the dialog that appears, click the <strong>Available Software</strong> tab.</li>
+    <li>Click <strong>Add Site...</strong>, then <strong>Archive...</strong>.</li>
+    <li>Browse and select the downloaded the zip file.</li>
+    <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to 
+      <em>Developer Tools</em>  and click <strong>Install...</strong></li>
+    <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked. 
+    The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>.</li>
+    <li>Accept the license agreement and click <strong>Finish</strong>.</li>
+    <li>Restart Eclipse. </li>
 </ol>
+
 </td>
 </tr>
 </table>
@@ -99,7 +103,7 @@
 the ADT plugin and the Ant-based build tools support this requirement by signing compiled 
 .apk files with a debug key. To do so, the build tools use the Keytool utility included 
 in the JDK to to create a keystore and a key with a known alias and password. For more 
-information, see <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.
+information, see "Signing and Publishing Your App" in the documentation included with the SDK.
 
 <p>To support signing, you should first make sure that Keytool is available to the SDK build 
 tools. In most cases, you can tell the SDK build tools how to find Keytool by making sure that 
@@ -133,10 +137,7 @@
 framework and API changes. You'll need to update your code to match changes in the Android APIs.</p>
 
 <p>One way to start is to open your project in Eclipse and see where the ADT
-identifies errors in your application. From there, you can lookup
-respective changes in the 
-<a href="migrating/changes-overview.html">Overview of Changes</a>
-and <a href="migrating/changes.html">API Diffs Report</a>.</p>
+identifies errors in your application.</p>
 
 <p>If you have additional trouble updating your code, visit the 
 <a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
@@ -144,8 +145,4 @@
 
 <p>If you have modified one of the ApiDemos applications and would like to migrate it 
 to the new SDK, note that you will need to uninstall the version of ApiDemos that comes 
-preinstalled in the emulator. For more information, or if you encounter an "reinstallation" 
-error when running or installing ApiDemos, see the troubleshooting topic 
-<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#apidemosreinstall">I can't install ApiDemos 
-apps in my IDE because of a signing error</a> for information about how to solve the problem.</p>
-
+preinstalled in the emulator.</p>
diff --git a/docs/html/sdk/1.0_r2/index.jd b/docs/html/sdk/1.0_r2/index.jd
index 6fbca6d..2446c09 100644
--- a/docs/html/sdk/1.0_r2/index.jd
+++ b/docs/html/sdk/1.0_r2/index.jd
@@ -22,43 +22,44 @@
 
 <h2>Included in this SDK</h2>
 
-<p>This SDK includes some awesome stuff.</p>
+<h4>Development tools</h4>
+
+<p>The SDK includes a variety of tools for developing and debugging application code and designing 
+an application UI. You can read about the tools in the documentation included with the SDK. 
+You can access the tools in the <code>&lt;sdk&gt;/tools/</code> directory.</p>
+
+<h4 id="system_images">System Images</h4>
+
+<p>The Android system images listed below are included in this SDK.</p>
+
+<table style="margin-right:1em;" width="80%">
+<tr>
+<th><nobr>System Image</nobr></th><th><nobr>API Level</nobr></th><th>Notes</th><th>Description</th>
+</tr>
+
+<tr>
+<td width="5%"><nobr>Android 1.0</nobr></td>
+<td  width="5%">1</td>
+<td  width="5%"><nobr>N/A</nobr></td>
+<td>Includes the {@code com.google.android.maps} external library and a set of standard development 
+applications. </td>
+
+</tr>
+
+</table>
+
+<h4>Sample Code and Applications</h4>
+
+<p>You can look at a variety of tutorials and samples in the 
+documentation included with the SDK and access the sample code itself
+in the <code>&lt;sdk&gt;/samples/</code> directory of the SDK package.</p>
+
+<h4>Documentation</h4>
+
+<p>The SDK package provides a full set of local documentation, including installation and upgrade 
+instructions. To view it, open the <code>&lt;sdk&gt;/documentation.html</code> file in a web browser. 
+If you are developing in an IDE such as Eclipse, you can also view the reference documentation 
+directly in the IDE. </p>
 
 
-<h2>System and Software Requirements</h2>
 
-<p>The following systems and development environments are supported by this SDK.</p>
-
-<h4>Supported Operating Systems:</h4>
-<ul>
-  <li>Windows XP or Vista</li>
-  <li>Mac OS X 10.4.8 or later (x86 only)</li>
-  <li>Linux (tested on Linux Ubuntu Dapper Drake)</li>
-</ul>
-
-<h4>Supported Development Environments:</h4>
-<ul>
-  <li>Eclipse IDE
-    <ul>
-      <li><a href="http://www.eclipse.org/downloads/">Eclipse</a> 3.3 (Europa), 3.4 (Ganymede)
-        <ul>
-        <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included in most Eclipse IDE packages) </li>
-        <li><a href="http://www.eclipse.org/webtools">WST</a> (optional, but needed for the Android Editors feature; included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse IDE packages</a>)</li>
-        </ul>
-      </li>     
-      <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
-      <li><a href="installing.html#installingplugin">Android Development Tools plugin</a> (optional)</li>
-      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
-    </ul>
-  </li>
-  <li>Other development environments or IDEs
-    <ul>
-      <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
-      <li><a href="http://ant.apache.org/">Apache Ant</a> 1.6.5 or later for Linux and Mac, 1.7 or later for Windows</li>
-      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
-    </ul>
-  </li>
-</ul>
-
-<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In
-particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.0_r2/installing.jd b/docs/html/sdk/1.0_r2/installing.jd
index 0f15396..2c58dfd 100644
--- a/docs/html/sdk/1.0_r2/installing.jd
+++ b/docs/html/sdk/1.0_r2/installing.jd
@@ -1,29 +1,27 @@
 page.title=Installing the SDK
+sdk.version=1.0_r2
 @jd:body
 
+<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
 
-<p>This page describes how to install the Android SDK and set up your development environment. If you haven't 
-downloaded the SDK yet, follow the link below.</p>
+<p>This page describes how to install the Android 1.0 SDK, Release 2, and set up your development environment. 
+If you haven't downloaded the SDK yet, you can so from the <a href="{@docRoot}sdk/1.0_r2/index.html">Download</a> page.</p>
 
-<div class="linkbox"><a href="http://developer.android.com/sdk/">Download the SDK</a></div>
+<p>Before you begin, be sure that your development environment meets the SDK
+<a href="{@docRoot}sdk/1.0_r2/requirements.html">System Requirements</a>. If you encounter any problems during installation,
+see the <a href="#installnotes">Installation Notes</a> at the bottom of this page.</p>
 
-<p>Before you begin, be sure that you're development environment meets the SDK
-<a href="requirements.html">System and Software Requirements</a>.</p>
-
-<div class="special">
 <h4 style="margin-top">Upgrading?</h4>
 <p>If you have already developed applications using an earlier version of the 
 SDK, please skip this page and read the 
-<b><a href="upgrading.html">Upgrading the SDK</a></b> document.  
+<a href="{@docRoot}sdk/1.0_r2/upgrading.html"><strong>Upgrading the SDK</strong></a></b> document instead.
 </p>
-</div>
-
 
 <a name="installingsdk"></a>
 <a name="setup"></a>
 <h2>Installing the SDK</h2>
 
-	<p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named  <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
+	<p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named  <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains a link to a local copy of the documentation and the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
 	
 	<p>Make a note of the name and location of the unpacked SDK directory on your system &mdash; you will need to refer to the SDK directory later, when setting up the Android plugin or using SDK tools. </p>
 
@@ -47,10 +45,86 @@
 
         <p>Adding <code>tools</code> to your path lets you run Android Debug Bridge (adb) and the other command line <a href="{@docRoot}guide/developing/tools/index.html">tools</a> without needing to supply the full path to the tools directory. Note that, if you update your SDK, you should remember to update your PATH settings to point to the new location, if different.</p>
 
-<h3>Setting up Eclipse</h3>
-<p>If you'll be developing with the Eclipse IDE, follow the following procedure to setup the IDE
-to use the Android SDK.</p>
-<p>Basically, you just need to update your Eclipse preferences to point to the Android SDK directory:</p>
+
+<p>If you will be using the Eclipse IDE as your environment for developing Android applications, continue reading the next
+section in order to install the Android Development Tools plugin and setup Eclipse. If you choose not to use Eclipse, you can 
+develop Android applications using other tools &mdash; read the guide to developing 
+<a href="{@docRoot}guide/developing/other-ide.html">In other IDEs</a>.</p>
+
+
+<h2>Setting up Eclipse</h2>
+
+<p>First, you should install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. Developing in ADT/Eclipse is highly recommended for Eclipse users and those new to Android.</p>
+
+<p>To download and install the ADT plugin, follow the steps below for your respective Eclipse version. </p>
+
+<table style="font-size:100%">
+<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
+<tr>
+<td width="45%">
+<ol>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
+            and Install...</strong>. </li>
+
+    <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click <strong>Next</strong>. </li>
+    <li>Click <strong>New Remote Site</strong>. </li>
+    <li>In the resulting dialog box, enter a name for the remote site (e.g. Android Plugin) and enter this as its URL:
+        <pre>https://dl-ssl.google.com/android/eclipse/</pre>
+        <p>Alternatively, you can use http in the Location URL, if you are having 
+         trouble with https (https is preferred for security reasons).</p>
+        <pre>http://dl-ssl.google.com/android/eclipse/</pre>
+        <p>Click <strong>OK</strong>.</p> </li>
+    <li>You should now see the new site added to the search list (and checked).
+        Click <strong>Finish</strong>. </li>
+    <li>In the subsequent Search Results dialog box, select the checkbox for
+    <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
+    This will check both features:  "Android Developer Tools", and "Android
+    Editors". The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>. </li>
+    <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>. 
+     Click <strong>Next</strong>. </li>
+    <li>Click <strong>Finish</strong>. </li>
+
+    <li>The ADT plugin is not signed; you can accept the installation anyway
+        by clicking <strong>Install All</strong>. </li>
+    <li>Restart Eclipse. </li>
+</ol>
+
+</td>
+<td>
+
+<ol>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.
+    </li>
+    <li>In the dialog that appears, click the <strong>Available Software</strong> tab.
+    </li>
+    <li>Click <strong>Add Site...</strong>
+    </li>
+    <li>Enter this as the Location:
+      <pre>https://dl-ssl.google.com/android/eclipse/</pre>
+      <p>Alternatively, you can use http in the Location URL, if you are having 
+         trouble with https (https is preferred for security reasons).</p>
+      <pre>http://dl-ssl.google.com/android/eclipse/</pre>
+      <p>Click <strong>OK</strong>.</p></li>
+    <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to 
+      <em>Developer Tools</em>  and click <strong>Install...</strong>
+    </li>
+    <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked. 
+    The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>.
+     </li>
+    <li>Accept the license agreement and click <strong>Finish</strong>.</li>
+    <li>Restart Eclipse. </li>
+</ol>
+
+</td>
+</tr>
+</table>
+
+
+<p>Now, you just need to modify your Eclipse preferences to point to the Android SDK directory:</p>
 <ol>
     <li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
         panel. (Mac OS X: <strong>Eclipse</strong> &gt; <strong>Preferences</strong>) </li>
@@ -58,16 +132,55 @@
     <li>For the SDK Location in the main panel, click <strong>Browse...</strong> and locate the SDK directory. </li>
     <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
 </ol>
-<p>Done! We now recommend that you install the ADT Eclipse plugin, which will provide some much-appreciated assistance in developing Android apps with Eclipse...</p>
 
-<a name="installingplugin"></a>
-<h2>Installing the Eclipse Plugin (ADT)</h2>
+<p>Done! If you haven't encountered any problems, then you're ready to begin developing Android applications.
+We recommend you begin with the <a href="{@docRoot}guide/tutorials/hello-world.html">Hello World</a> tutorial,
+which will teach you some basics about Android applications and how to create projects using Eclipse.</p>
 
-<p>If you will be using the Eclipse IDE as your environment for developing Android applications, you can install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. This plugin is highly recommended for Eclipse users.</p>
 
-<p>If you <em>will not</em> be using the Eclipse IDE, you do not need to download or install the ADT plugin.</p>
+<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
+<p> 
+If you are having trouble downloading the ADT plugin after following the steps above, here are some suggestions: </p>
 
-<p><strong>Follow this guide to install the ADT Plugin</strong></p>
+<ul>
+	<li>If Eclipse can not find the remote update site containing the ADT plugin, try changing the remote site URL to use http, rather than https. That is, set the Location for the remote site to:
+        <pre>http://dl-ssl.google.com/android/eclipse/</pre></li>
+	<li>If you are behind a firewall (such as a corporate firewall), make
+        sure that you have properly configured your proxy settings in Eclipse.
+        In Eclipse 3.3/3.4, you can configure proxy information from the main
+        Eclipse menu in <strong>Window</strong> (on Mac, <strong>Eclipse</strong>) &gt; <strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network Connections</strong>.</li>
+</ul>
+<p> 
+If you are still unable to use Eclipse to download the ADT plugin as a remote update site, you can download the ADT files to your local machine using a browser and the install the files in Eclipse from there:
+</p>
+<ol>
+<li><a href="{@docRoot}sdk/adt_download.html">Download the ADT zip file</a> (do not unpack it).
+<li>Follow steps 1 and 2 in the default install instructions (above).
+<li>In Eclipse 3.3, click <strong>New Archive Site...</strong>. <br/>
+    In Eclipse 3.4, click <strong>Add Site...</strong>, then <strong>Archive...</strong>
+<li>Browse and select the downloaded the zip file.
+<li>Follow the remaining procedures, above, starting from steps 5.
+</ol>
+<p> 
+Note that to update your plugin, you will have to follow these steps again instead of the default update instructions.</p>
+
+<p>Note that the "Android Editors" feature of ADT requires several optional 
+Eclipse components (for example, WST). If you encounter an error when 
+installing ADT, your Eclipse installion might not include those components. 
+For information about how to quickly add the necessary components to your 
+Eclipse installation, see the troubleshooting topic 
+<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#installeclipsecomponents">ADT Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>
+
+<h4>For Linux users</h4>
+<p>If you encounter this error when installing the ADT Plugin for Eclipse: 
+<pre>
+An error occurred during provisioning.
+Cannot connect to keystore.
+JKS</pre>
+<p>
+...then your development machine lacks a suitable Java VM. Installing Sun
+Java 6 will resolve this issue and you can then reinstall the ADT
+Plugin.</p>
 
 <a name="installnotes"></a>
 <h2>Installation Notes</h2>
@@ -106,19 +219,3 @@
 distributions may include JDK 1.4 or Gnu Compiler for Java, both of
 which are not supported for Android development.</li>
 </ul>
-
-<a name="developingwitheclipse"></a>
-<a name="existingcode"></a>
-<a name="creatingaproject" id="creatingaproject"></a>
-<a name="launchconfig" id="launchconfig"></a>
-<a name="installingrunningdebugging" id="installingrunningdebugging"></a>
-<a name="otherides" id="otherides"></a>
-<a name="buildingwithant"></a>
-<a name="debugging" id="debugging"></a>
-<a name="additionaldebugging" id="additionaldebugging"></a>
-<a name="toptips" id="toptips"></a>
-<a name="debughelpers"></a>
-<a name="uninstalling" id="uninstalling"></a>
-<a name="tips" id="tips"></a>
-<a name="eclipse" id="eclipse"></a> 
-<a name="building"></a>
diff --git a/docs/html/sdk/1.0_r2/requirements.jd b/docs/html/sdk/1.0_r2/requirements.jd
new file mode 100644
index 0000000..74d90ef
--- /dev/null
+++ b/docs/html/sdk/1.0_r2/requirements.jd
@@ -0,0 +1,44 @@
+page.title=System Requirements
+sdk.version=1.0_r2
+
+
+@jd:body
+
+<p>The sections below describe the system and software requirements for developing Android applications using the Android SDK tools included in Android 1.0 SDK, Release 2. </p>
+
+<h2>System and Software Requirements</h2>
+<p>The following systems and development environments are supported by this SDK.</p>
+
+<h4>Supported Operating Systems:</h4>
+<ul>
+  <li>Windows XP or Vista</li>
+  <li>Mac OS X 10.4.8 or later (x86 only)</li>
+  <li>Linux (tested on Linux Ubuntu Dapper Drake)</li>
+</ul>
+
+<h4>Supported Development Environments:</h4>
+<ul>
+  <li>Eclipse IDE
+    <ul>
+      <li><a href="http://www.eclipse.org/downloads/">Eclipse</a> 3.3 (Europa), 3.4 (Ganymede)
+        <ul>
+        <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included in most Eclipse IDE packages) </li>
+        <li><a href="http://www.eclipse.org/webtools">WST</a> (optional, but needed for the Android Editors feature; included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse IDE packages</a>)</li>
+        </ul>
+      </li>     
+      <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
+      <li><a href="installing.html#installingplugin">Android Development Tools plugin</a> (optional)</li>
+      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+    </ul>
+  </li>
+  <li>Other development environments or IDEs
+    <ul>
+      <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
+      <li><a href="http://ant.apache.org/">Apache Ant</a> 1.6.5 or later for Linux and Mac, 1.7 or later for Windows</li>
+      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+    </ul>
+  </li>
+</ul>
+
+<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In
+particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.0_r2/upgrading.jd b/docs/html/sdk/1.0_r2/upgrading.jd
index 168f1be..df9b657 100644
--- a/docs/html/sdk/1.0_r2/upgrading.jd
+++ b/docs/html/sdk/1.0_r2/upgrading.jd
@@ -1,37 +1,12 @@
 page.title=Upgrading the SDK
+sdk.version=1.0_r2
 @jd:body
 
-<div class="sidebox-wrapper">
-  <div class="sidebox-inner">
-
-     <h2>Useful Links</h2>
-
-      <ul class="noindent">
-        <li><a href="migrating/0.9-1.0/changes-overview.html">Overview of Changes</a>
-		      <p>A high-level look at what's changed in Android, with 
-		       discussion of how the changes may affect your apps.</p></li>
-
-        <li><a href="migrating/0.9-1.0/changes.html">API Diff Report</a> 
-                <p>A detailed report that lists all the specific changes in the latest SDK.</p></li>
-
-        <li><a href="RELEASENOTES.html">Release Notes</a> 
-                <p>Version details, known issues, and resolved issues. </p></li>
-
-        <li><a href="http://groups.google.com/group/android-developers">Android Developers Group</a> 
-            <p>A forum where you can discuss migration issues and learn from other Android developers. </p></li>
- 
-        <li><a href="http://code.google.com/p/android/issues/list">Android Issue Tracker</a>
-            <p>If you think you may have found a bug, use the issue tracker to report it.</p></li>
-      </ul>
-
-   </div>
-</div><!-- class-sidebox -->
-
+<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
 
 <p>This guide will help you migrate your development environment and applications
-to the latest version of the SDK. Use this guide if you've been developing applications
-on a previous version of the Android SDK. 
-</p>
+to <strong>version 1.0, release 2</strong>, of the Android SDK. Use this guide if you've been developing applications
+on a different version of the Android SDK.</p>
 
 <p>To ensure that your applications are compliant with the Android 1.0 system available 
 on mobile devices, you need to install the new SDK and port your existing Android 
@@ -39,9 +14,7 @@
 
 <h2 id="install-new">Install the new SDK</h2>
 
-<p><a href="{@docRoot}download.html">Download the SDK</a> and unpack it into a safe location.</p>
-
-<p>After unpacking the new SDK, you should:</p>
+<p>After unpacking the SDK, you should:</p>
 
 <ul>
   <li>Wipe your emulator data. <p>Some data formats have changed since the last
@@ -60,27 +33,58 @@
 
 <h2 id="update-plugin">Update your ADT Eclipse Plugin</h2>
 
-<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the new plugin that accompanies the latest SDK.</p>
+<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the
+plugin that's required for this version of the SDK.</p>
 
 <table style="font-size:100%">
 <tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
 <tr>
-<td width="50%">
+<td width="45%">
 <ol>
-    <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find and Install...</strong>. </li>
-    <li> Select <strong>Search for updates of the currently installed features</strong> and click <strong>Finish</strong>. </li>
-    <li> If any update for ADT is available, select and install. </li>
-    <li> Restart Eclipse.</li>
+    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
+      file</a> (do not unpack it).</li>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
+            and Install...</strong>. </li>
+    <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click 
+      <strong>Next</strong>. </li>
+    <li>Click <strong>New Archive Site...</strong></li>
+    <li>Browse and select the downloaded the zip file.</li>
+    <li>You should now see the new site added to the search list (and checked).
+        Click <strong>Finish</strong>. </li>
+    <li>In the subsequent Search Results dialog box, select the checkbox for
+    <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
+    This will check both features:  "Android Developer Tools", and "Android
+    Editors". The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>. </li>
+    <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>. 
+     Click <strong>Next</strong>. </li>
+    <li>Click <strong>Finish</strong>. </li>
+    <li>The ADT plugin is not signed; you can accept the installation anyway
+        by clicking <strong>Install All</strong>. </li>
+    <li>Restart Eclipse. </li>
 </ol>
+
 </td>
 <td>
+
 <ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Software Updates...</strong></li>
-    <li>Select the <strong>Installed Software</strong> tab.</li>
-    <li>Click <strong>Update...</strong></li>
-    <li>If an update for ADT is available, select it and click <strong>Finish</strong>.</li>
-    <li>Restart Eclipse.</li>
+    <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip 
+      file</a> (do not unpack it).</li>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.</li>
+    <li>In the dialog that appears, click the <strong>Available Software</strong> tab.</li>
+    <li>Click <strong>Add Site...</strong>, then <strong>Archive...</strong>.</li>
+    <li>Browse and select the downloaded the zip file.</li>
+    <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to 
+      <em>Developer Tools</em>  and click <strong>Install...</strong></li>
+    <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked. 
+    The Android Editors feature is optional, but recommended.  If
+    you choose to install it, you need the WST plugin mentioned earlier in this
+    page. Click <strong>Next</strong>.</li>
+    <li>Accept the license agreement and click <strong>Finish</strong>.</li>
+    <li>Restart Eclipse. </li>
 </ol>
+
 </td>
 </tr>
 </table>
@@ -99,7 +103,7 @@
 the ADT plugin and the Ant-based build tools support this requirement by signing compiled 
 .apk files with a debug key. To do so, the build tools use the Keytool utility included 
 in the JDK to to create a keystore and a key with a known alias and password. For more 
-information, see <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.
+information, see "Signing and Publishing Your App" in the documentation included with the SDK.
 
 <p>To support signing, you should first make sure that Keytool is available to the SDK build 
 tools. In most cases, you can tell the SDK build tools how to find Keytool by making sure that 
@@ -133,10 +137,7 @@
 framework and API changes. You'll need to update your code to match changes in the Android APIs.</p>
 
 <p>One way to start is to open your project in Eclipse and see where the ADT
-identifies errors in your application. From there, you can lookup
-respective changes in the 
-<a href="migrating/changes-overview.html">Overview of Changes</a>
-and <a href="migrating/changes.html">API Diffs Report</a>.</p>
+identifies errors in your application.</p>
 
 <p>If you have additional trouble updating your code, visit the 
 <a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
@@ -144,8 +145,4 @@
 
 <p>If you have modified one of the ApiDemos applications and would like to migrate it 
 to the new SDK, note that you will need to uninstall the version of ApiDemos that comes 
-preinstalled in the emulator. For more information, or if you encounter an "reinstallation" 
-error when running or installing ApiDemos, see the troubleshooting topic 
-<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#apidemosreinstall">I can't install ApiDemos 
-apps in my IDE because of a signing error</a> for information about how to solve the problem.</p>
-
+preinstalled in the emulator.</p>
diff --git a/docs/html/sdk/1.1_r1/index.jd b/docs/html/sdk/1.1_r1/index.jd
index 7e70b6b..c4a9bf0 100644
--- a/docs/html/sdk/1.1_r1/index.jd
+++ b/docs/html/sdk/1.1_r1/index.jd
@@ -4,16 +4,16 @@
 sdk.date=February 2009
 
 sdk.win_download=android-sdk-windows-1.1_r1.zip
-sdk.win_bytes=84533935
-sdk.win_checksum=4cec82e3d2c1658d73182e543d130a06
+sdk.win_bytes=86038515
+sdk.win_checksum=8c4b9080b430025370689e03d20842f3
 
 sdk.mac_download=android-sdk-mac_x86-1.1_r1.zip
-sdk.mac_bytes=78918508
-sdk.mac_checksum=d67fb5f0eaf4f5a83dc985f5790940c6
+sdk.mac_bytes=79046151
+sdk.mac_checksum=becf0f1763d61eedce15d2a903d6c1dd
 
 sdk.linux_download=android-sdk-linux_x86-1.1_r1.zip
-sdk.linux_bytes=79219171
-sdk.linux_checksum=df88091c9f0ef6cc56cd92afcdad8d56
+sdk.linux_bytes=79345522
+sdk.linux_checksum=ebcb16b0cd4aef198b4dd9a1418efbf1
 
 
 @jd:body
diff --git a/docs/html/sdk/1.1_r1/installing.jd b/docs/html/sdk/1.1_r1/installing.jd
index b198800..d5a7106 100644
--- a/docs/html/sdk/1.1_r1/installing.jd
+++ b/docs/html/sdk/1.1_r1/installing.jd
@@ -4,22 +4,43 @@
 @jd:body
 
 
-<p>This page describes how to install the Android 1.1 SDK, Release 1, and set up your development environment. 
-If you haven't downloaded the SDK yet, you can so from the <a href="{@docRoot}sdk/1.1_r1/index.html">Download</a> page.</p>
+<p>This page describes how to install the Android SDK and set up your
+development environment. If you haven't downloaded the SDK, you can
+do so from the 
+<a href="{@docRoot}sdk/1.1_r1/index.html">Download</a> page.</p>
 
-<p>Before you begin, be sure that your development environment meets the SDK
-<a href="{@docRoot}sdk/1.1_r1/requirements.html">System Requirements</a>. If you encounter any problems during installation,
-see the <a href="#installnotes">Installation Notes</a> at the bottom of this page.</p>
+<p>If you encounter any problems during installation, see the 
+<a href="#installnotes">Installation Notes</a> at the bottom of
+this page.</p>
 
 <h4 style="margin-top">Upgrading?</h4>
-<p>If you have already developed applications using an earlier version of the 
-SDK, please skip this page and read the 
-<a href="{@docRoot}sdk/1.1_r1/upgrading.html"><strong>Upgrading the SDK</strong></a></b> document instead.
+<p>If you have already developed applications using an earlier version
+of the SDK, please skip this page and read the 
+<a href="{@docRoot}sdk/1.1_r1/upgrading.html"><strong>Upgrading the
+SDK</strong></a></b> document instead.
 </p>
 
-<a name="installingsdk"></a>
-<a name="setup"></a>
-<h2>Installing the SDK</h2>
+
+<h2 id="setup">Preparing for Installation</h2>
+
+<p>Before you get started with the Android SDK, take a moment to confirm
+that your development machine meets the <a
+href="{@docRoot}sdk/1.1_r1/requirements.html">system requirements</a>.
+</p>
+
+<p>If you will be developing on Eclipse with the Android Development
+Tools (ADT) Plugin &mdash; the recommended path if you are new to
+Android &mdash; make sure that you have a suitable version of Eclipse
+installed on your computer. If you need to install Eclipse, you can
+download it from this location: </p>
+
+<p style="margin-left:2em;"><a href=
+"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a
+></p>
+
+<p>A Java or RCP version of Eclipse is recommended. </p>
+
+<h2 id="installingsdk">Installing the SDK</h2>
 
 	<p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named  <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains a link to a local copy of the documentation and the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
 	
@@ -47,16 +68,34 @@
 
 
 <p>If you will be using the Eclipse IDE as your environment for developing Android applications, continue reading the next
-section in order to install the Android Development Tools plugin and setup Eclipse. If you choose not to use Eclipse, you can 
+section in order to install the Android Development Tools plugin and set up Eclipse. If you choose not to use Eclipse, you can 
 develop Android applications using other tools &mdash; read the guide to developing 
-<a href="{@docRoot}guide/developing/other-ide.html">In other IDEs</a>.</p>
+<a href="{@docRoot}guide/developing/other-ide.html">in other IDEs</a>.</p>
 
 
-<h2>Setting up Eclipse</h2>
+<h2 id="installingplugin">Installing the ADT Plugin for Eclipse</h2>
 
-<p>First, you should install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. Developing in ADT/Eclipse is highly recommended for Eclipse users and those new to Android.</p>
+<p>Android offers a custom plugin for the Eclipse IDE, called Android
+Development Tools (ADT), that is designed to give you a powerful,
+integrated environment in which to build Android applications. It
+extends the capabilites of Eclipse to let you quickly set up new Android
+projects, create an application UI, add components based on the Android
+Framework API, and debug using the Android SDK tools.</p>
 
-<p>To download and install the ADT plugin, follow the steps below for your respective Eclipse version. </p>
+<p>If you are new to Android or want to develop using the Eclipse IDE,
+the ADT plugin will be an essential part of your development
+environment. In general, using Eclipse with ADT is a highly recommended
+approach and is the fastest way to get started. This section describes
+how to install ADT into your Eclipse environment. 
+
+<p>If you prefer to work in a development environment other than Eclipse,
+you do not need to install Eclipse or the ADT Plugin. Instead, you can 
+access the SDK tools directly to build and debug your application. </p>
+
+<p>Once you have Eclipse installed, as described in <a href="#setup">
+Preparing for Installation</a>, follow the steps below to
+download the ADT plugin and install it in your respective Eclipse
+environment. </p>
 
 <table style="font-size:100%">
 <tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
@@ -123,7 +162,6 @@
 </tr>
 </table>
 
-
 <p>Now, you just need to modify your Eclipse preferences to point to the Android SDK directory:</p>
 <ol>
     <li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
@@ -133,9 +171,9 @@
     <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
 </ol>
 
-<p>Done! If you haven't encountered any problems, then you're ready to begin developing Android applications.
-We recommend you begin with the <a href="{@docRoot}guide/tutorials/hello-world.html">Hello World</a> tutorial,
-which will teach you some basics about Android applications and how to create projects using Eclipse.</p>
+<p>Done! If you haven't encountered any problems, then you're ready to
+begin developing Android applications. See the <a href="#next">After 
+Installation: Next Steps</a> section for suggestions on how to start. </p>
 
 
 <h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
@@ -182,8 +220,59 @@
 Java 6 will resolve this issue and you can then reinstall the ADT
 Plugin.</p>
 
-<a name="installnotes"></a>
-<h2>Installation Notes</h2>
+
+<h2 id="next">After Installation: Next Steps</h2>
+<p>Once you have installed the SDK and the ADT Plugin, you are ready to
+begin developing applications. Here are a few ways you can get started: </p>
+
+<p><strong>Learn about Android</strong></p>
+<ul>
+<li>Take a look at the <a href="{@docRoot}guide/index.html">Dev
+Guide</a> and the types of information it provides</li>
+<li>Read an introduction to Android as a platform in <a
+href="{@docRoot}guide/basics/what-is-android.html">What is
+Android?</a></li>
+<li>Learn about the Android framework and how applications run on it in
+<a href="{@docRoot}guide/topics/fundamentals.html">Application
+Fundamentals</a></li>
+<li>Take a look at the Android framework API specification in the <a
+href="{@docRoot}reference/index.html">Reference</a> tab</li>
+</ul>
+
+<p><strong>Explore the SDK</strong></p>
+<ul>
+<li>Get an overview of the <a
+href="{@docRoot}guide/development/tools/index.html">development
+tools</a> that are available to you</li>
+<li>Read the overviews of how to develop <a
+href="{@docRoot}guide/developing/eclipse-adt.html">in Eclipse/ADT</a> or
+<a href="{@docRoot}guide/developing/other-ide.html">in other IDEs</a>
+</li>
+</ul>
+
+<p><strong>Explore some code</strong></p>
+<ul>
+<li>Set up a <a href="{@docRoot}guide/tutorials/hello-world.html">Hello
+World application</a></li>
+<li>Follow the <a href="{@docRoot}guide/tutorials/notepad/index.html">
+Notepad Tutorial</a> to build a full Android application </li>
+<li>Create a new project for one of the other sample applications
+included in <code>&lt;sdk&gt;/samples</code>, then compile and run it in
+your development environment</li>
+</ul>
+
+<p><strong>Visit the Android developer groups</strong></p>
+<ul>
+<li>Take a look at the <a
+href="{@docRoot}community/index.html">Community</a> tab to see a list of
+Android developers groups. In particular, you might want to look at the
+<a href="http://groups.google.com/group/android-developers">Android
+Developers</a> group to get a sense for what the Android developer
+community is like.</li>
+</ul>
+
+
+<h2 id="installnotes">Installation Notes</h2>
 <h4>Ubuntu Linux Notes</h4>
 <ul>
     <li>If you need help installing and configuring Java on your
@@ -215,9 +304,9 @@
 <ul>
     <li>If JDK is already installed on your development computer, please
 take a moment to make sure that it meets the version requirements listed
-at the top of this page. In particular, note that some Linux
-distributions may include JDK 1.4 or Gnu Compiler for Java, both of
-which are not supported for Android development.</li>
+in the <a href="{@docRoot}sdk/1.1_r1/requirements.html">System Requirements</a>.
+In particular, note that some Linux distributions may include JDK 1.4 or Gnu
+Compiler for Java, both of which are not supported for Android development.</li>
 </ul>
 
 
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 688929f..76c1c84 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -1,26 +1,42 @@
 
 <ul>
-  <li>
-    <?cs if:android.whichdoc != "online" ?><h2>Android 1.1 SDK, r1</h2>
-    <?cs else ?><h2>Latest SDK Release</h2><?cs /if ?>
-    <ul>
-      <?cs if:android.whichdoc == "online" ?>
-        <li><a href="<?cs var:toroot ?>sdk/1.1_r1/index.html">Download</a></li>
-      <?cs /if ?>
+  <li><?cs 
+   if:android.whichdoc != "online" ?>
+    <h2>Android 1.1 SDK, r1</h2><?cs 
+   else ?>
+    <h2>Current SDK Release</h2><?cs 
+   /if ?>
+    <ul><?cs 
+     if:android.whichdoc == "online" ?>
+      <li><a href="<?cs var:toroot ?>sdk/1.1_r1/index.html">Download</a></li><?cs 
+     /if ?>
       <li><a href="<?cs var:toroot ?>sdk/1.1_r1/installing.html">Installing</a></li>
       <li><a href="<?cs var:toroot ?>sdk/1.1_r1/upgrading.html">Upgrading</a></li>
       <li><a href="<?cs var:toroot ?>sdk/1.1_r1/requirements.html">System Requirements</a></li>
-      <li><a href="<?cs var:toroot ?>sdk/RELEASENOTES.html">SDK Release Notes</a></li>
     </ul>
     <ul>
+      <li><a href="<?cs var:toroot ?>sdk/terms.html">SDK Terms and Conditions</a></li>
+      <li><a href="<?cs var:toroot ?>sdk/RELEASENOTES.html">SDK Release Notes</a></li>
+    </ul><?cs 
+ if:android.whichdoc == "online" ?>
+  <li>
+    <h2>Android System Images</h2>
+    <ul>
       <li><a href="<?cs var:toroot ?>sdk/android-1.1.html">Android 1.1 Version Notes</a></li>
     </ul>
   </li>
-</ul>
-<ul>
-  <li><a href="<?cs var:toroot ?>sdk/terms.html">SDK Terms and Conditions</a></li>
-  <?cs if:android.whichdoc == "online" ?>
-    <li><a href="http://code.google.com/android/download_list.html">Previous SDK Releases</a></li>
-  <?cs /if ?>
+  <li>
+    <h2>Previous SDK Releases</h2>
+    <ul>
+      <li><a href="<?cs var:toroot ?>sdk/1.0_r2/index.html">Android 1.0 SDK, release 2</a></li>
+      <li><a href="<?cs var:toroot ?>sdk/1.0_r1/index.html">Android 1.0 SDK, release 1</a></li>
+    </ul>
+  </li><?cs 
+ /if ?>
 </ul>
 
+<script type="text/javascript">
+<!--
+    buildToggleLists();
+//-->
+</script>
\ No newline at end of file
diff --git a/docs/html/search.jd b/docs/html/search.jd
index 979964b..0a802a6 100644
--- a/docs/html/search.jd
+++ b/docs/html/search.jd
@@ -1,8 +1,8 @@
 page.title=Search Results
 @jd:body
 
-
 <script src="http://www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/jquery-history.js" type="text/javascript"></script>
 <script type="text/javascript">
       google.load('search', '1');
 
@@ -20,36 +20,80 @@
         // configure search result options
         searchOptions = new google.search.SearcherOptions();
         searchOptions.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
-        searchOptions.setRoot(document.getElementById("leftSearchControl"));
 
-        // configure searcher options
-        searcher = new google.search.WebSearch();
-        searcher.setUserDefinedLabel("Android Developers");
-        searcher.setSiteRestriction("001283715400630100512:ggqrtvkztwm");
+        // configure each of the searchers, for each tab
+        devSiteSearcher = new google.search.WebSearch();
+        devSiteSearcher.setUserDefinedLabel("All Developers Site");
+        devSiteSearcher.setSiteRestriction("http://developer.android.com/");
+
+        devGuideSearcher = new google.search.WebSearch();
+        devGuideSearcher.setUserDefinedLabel("Dev Guide");
+        devGuideSearcher.setSiteRestriction("http://developer.android.com/guide/");
+
+        referenceSearcher = new google.search.WebSearch();
+        referenceSearcher.setUserDefinedLabel("Reference");
+        referenceSearcher.setSiteRestriction("http://developer.android.com/reference/");
+
+        blogSearcher = new google.search.WebSearch();
+        blogSearcher.setUserDefinedLabel("Blog");
+        blogSearcher.setSiteRestriction("http://android-developers.blogspot.com");
+
+        groupsSearcher = new google.search.WebSearch();
+        groupsSearcher.setUserDefinedLabel("Developer Groups");
+        groupsSearcher.setSiteRestriction("001283715400630100512:ggqrtvkztwm");
+
+        sourceSiteSearcher = new google.search.WebSearch();
+        sourceSiteSearcher.setUserDefinedLabel("Android Source");
+        sourceSiteSearcher.setSiteRestriction("http://source.android.com");
+
+        homeSiteSearcher = new google.search.WebSearch();
+        homeSiteSearcher.setUserDefinedLabel("Android Home");
+        homeSiteSearcher.setSiteRestriction("http://www.android.com");
  
-        searchControl.addSearcher(searcher, searchOptions);
+        // add each searcher to the search control
+        searchControl.addSearcher(devSiteSearcher, searchOptions);
+        searchControl.addSearcher(devGuideSearcher, searchOptions);
+        searchControl.addSearcher(referenceSearcher, searchOptions);
+        searchControl.addSearcher(groupsSearcher, searchOptions);
+        searchControl.addSearcher(sourceSiteSearcher, searchOptions);
+        searchControl.addSearcher(blogSearcher, searchOptions);
+
+        // configure result options
         searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
         searchControl.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
+        searchControl.setTimeoutInterval(google.search.SearchControl.TIMEOUT_LONG);
         searchControl.setNoResultsString(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING);
 
         // upon ajax search, refresh the url and search title
         searchControl.setSearchStartingCallback(this, function(control, searcher, query) {
-            temp = location.href.split('#');
-            url = temp ? temp[0] : location.href;
-            location.href = url + '#q=' + query;
-            document.getElementById("searchTitle").innerHTML = "search results for <em>" + query + "</em>"
+            $("#searchTitle").html("search results for <em>" + query + "</em>");
+            $.history.add('q=' + query); // add the current query to the browser history
         });
 
-        searchControl.draw(null, drawOptions);
+        // draw the search results box
+        searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
 
         // execute a search upon page load, from url hash query
         if (location.href.indexOf("#q=") != -1) {
           url = location.href.split("#q=");
           searchControl.execute(decodeURI(url[1]));
         }
+        document.getElementById("search_autocomplete").focus();
       }
 
       google.setOnLoadCallback(OnLoad, true);
+
+      // when an event on the browser history occurs (back, forward, load) perform a search
+      $(window).history(function(e, hash) {
+        hashParts = hash.split('=');
+        searchControl.execute(decodeURI(hashParts[1]));
+        $("#searchTitle").html("search results for <em>" + decodeURI(hashParts[1]) + "</em>");
+      });
+
+      // forcefully regain key-up event control (previously jacked by search api)
+      $("#search_autocomplete").keyup(function(event) {
+        return search_changed(event, false, '/');
+      });
 </script>
 
   <div id="mainBodyFixed" style="width:auto; margin:20px">
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
new file mode 100644
index 0000000..a8221bf
--- /dev/null
+++ b/docs/html/sitemap.txt
@@ -0,0 +1,5444 @@
+http://developer.android.com/index.html
+http://developer.android.com/sdk/1.1_r1/index.html
+http://developer.android.com/guide/index.html 
+http://developer.android.com/reference/packages.html
+http://developer.android.com/community/index.html
+http://developer.android.com/sdk/index.html
+http://developer.android.com/license.html
+http://developer.android.com/sdk/terms.html
+http://developer.android.com/guide/developing/tools/index.html
+http://developer.android.com/reference/com/google/android/maps/package-summary.html
+http://developer.android.com/reference/classes.html
+http://developer.android.com/reference/android/package-summary.html
+http://developer.android.com/reference/android/app/package-summary.html
+http://developer.android.com/reference/android/content/package-summary.html
+http://developer.android.com/reference/android/content/pm/package-summary.html
+http://developer.android.com/reference/android/content/res/package-summary.html
+http://developer.android.com/reference/android/database/package-summary.html
+http://developer.android.com/reference/android/database/sqlite/package-summary.html
+http://developer.android.com/reference/android/graphics/package-summary.html
+http://developer.android.com/reference/android/graphics/drawable/package-summary.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/package-summary.html
+http://developer.android.com/reference/android/hardware/package-summary.html
+http://developer.android.com/reference/android/location/package-summary.html
+http://developer.android.com/reference/android/media/package-summary.html
+http://developer.android.com/reference/android/net/package-summary.html
+
+http://developer.android.com/reference/android/net/http/package-summary.html
+http://developer.android.com/reference/android/net/wifi/package-summary.html
+
+http://developer.android.com/reference/android/opengl/package-summary.html
+http://developer.android.com/reference/android/os/package-summary.html
+
+http://developer.android.com/reference/android/preference/package-summary.html
+http://developer.android.com/reference/android/provider/package-summary.html
+
+http://developer.android.com/reference/android/sax/package-summary.html
+http://developer.android.com/reference/android/telephony/package-summary.html
+
+http://developer.android.com/reference/android/telephony/gsm/package-summary.html
+http://developer.android.com/reference/android/test/package-summary.html
+
+http://developer.android.com/reference/android/test/mock/package-summary.html
+http://developer.android.com/reference/android/test/suitebuilder/package-summary.html
+
+http://developer.android.com/reference/android/text/package-summary.html
+http://developer.android.com/reference/android/text/method/package-summary.html
+
+http://developer.android.com/reference/android/text/style/package-summary.html
+http://developer.android.com/reference/android/text/util/package-summary.html
+
+http://developer.android.com/reference/android/util/package-summary.html
+http://developer.android.com/reference/android/view/package-summary.html
+
+http://developer.android.com/reference/android/view/animation/package-summary.html
+http://developer.android.com/reference/android/webkit/package-summary.html
+
+http://developer.android.com/reference/android/widget/package-summary.html
+http://developer.android.com/reference/dalvik/bytecode/package-summary.html
+
+http://developer.android.com/reference/dalvik/system/package-summary.html
+http://developer.android.com/reference/java/awt/font/package-summary.html
+
+http://developer.android.com/reference/java/io/package-summary.html
+http://developer.android.com/reference/java/lang/package-summary.html
+
+http://developer.android.com/reference/java/lang/annotation/package-summary.html
+http://developer.android.com/reference/java/lang/ref/package-summary.html
+
+http://developer.android.com/reference/java/lang/reflect/package-summary.html
+http://developer.android.com/reference/java/math/package-summary.html
+
+http://developer.android.com/reference/java/net/package-summary.html
+http://developer.android.com/reference/java/nio/package-summary.html
+
+http://developer.android.com/reference/java/nio/channels/package-summary.html
+http://developer.android.com/reference/java/nio/channels/spi/package-summary.html
+
+http://developer.android.com/reference/java/nio/charset/package-summary.html
+http://developer.android.com/reference/java/nio/charset/spi/package-summary.html
+
+http://developer.android.com/reference/java/security/package-summary.html
+http://developer.android.com/reference/java/security/acl/package-summary.html
+
+http://developer.android.com/reference/java/security/cert/package-summary.html
+http://developer.android.com/reference/java/security/interfaces/package-summary.html
+
+http://developer.android.com/reference/java/security/spec/package-summary.html
+http://developer.android.com/reference/java/sql/package-summary.html
+
+http://developer.android.com/reference/java/text/package-summary.html
+http://developer.android.com/reference/java/util/package-summary.html
+
+http://developer.android.com/reference/java/util/concurrent/package-summary.html
+http://developer.android.com/reference/java/util/concurrent/atomic/package-summary.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/package-summary.html
+http://developer.android.com/reference/java/util/jar/package-summary.html
+
+http://developer.android.com/reference/java/util/logging/package-summary.html
+http://developer.android.com/reference/java/util/prefs/package-summary.html
+
+http://developer.android.com/reference/java/util/regex/package-summary.html
+http://developer.android.com/reference/java/util/zip/package-summary.html
+
+http://developer.android.com/reference/javax/crypto/package-summary.html
+http://developer.android.com/reference/javax/crypto/interfaces/package-summary.html
+
+http://developer.android.com/reference/javax/crypto/spec/package-summary.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/package-summary.html
+
+http://developer.android.com/reference/javax/microedition/khronos/opengles/package-summary.html
+
+http://developer.android.com/reference/javax/net/package-summary.html
+http://developer.android.com/reference/javax/net/ssl/package-summary.html
+
+http://developer.android.com/reference/javax/security/auth/package-summary.html
+http://developer.android.com/reference/javax/security/auth/callback/package-summary.html
+
+http://developer.android.com/reference/javax/security/auth/login/package-summary.html
+http://developer.android.com/reference/javax/security/auth/x500/package-summary.html
+
+http://developer.android.com/reference/javax/security/cert/package-summary.html
+http://developer.android.com/reference/javax/sql/package-summary.html
+
+http://developer.android.com/reference/javax/xml/package-summary.html
+http://developer.android.com/reference/javax/xml/parsers/package-summary.html
+
+http://developer.android.com/reference/junit/framework/package-summary.html
+http://developer.android.com/reference/junit/runner/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/package-summary.html
+http://developer.android.com/reference/org/apache/http/auth/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/auth/params/package-summary.html
+http://developer.android.com/reference/org/apache/http/client/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/client/entity/package-summary.html
+http://developer.android.com/reference/org/apache/http/client/methods/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/client/params/package-summary.html
+http://developer.android.com/reference/org/apache/http/client/protocol/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/client/utils/package-summary.html
+http://developer.android.com/reference/org/apache/http/conn/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/conn/params/package-summary.html
+http://developer.android.com/reference/org/apache/http/conn/routing/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/conn/scheme/package-summary.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/conn/util/package-summary.html
+http://developer.android.com/reference/org/apache/http/cookie/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/cookie/params/package-summary.html
+http://developer.android.com/reference/org/apache/http/entity/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/impl/package-summary.html
+http://developer.android.com/reference/org/apache/http/impl/auth/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/package-summary.html
+http://developer.android.com/reference/org/apache/http/impl/conn/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/package-summary.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/impl/entity/package-summary.html
+http://developer.android.com/reference/org/apache/http/impl/io/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/io/package-summary.html
+http://developer.android.com/reference/org/apache/http/message/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/params/package-summary.html
+http://developer.android.com/reference/org/apache/http/protocol/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/util/package-summary.html
+http://developer.android.com/reference/org/json/package-summary.html
+
+http://developer.android.com/reference/org/w3c/dom/package-summary.html
+http://developer.android.com/reference/org/xml/sax/package-summary.html
+
+http://developer.android.com/reference/org/xml/sax/ext/package-summary.html
+http://developer.android.com/reference/org/xml/sax/helpers/package-summary.html
+
+http://developer.android.com/reference/org/xmlpull/v1/package-summary.html
+http://developer.android.com/reference/org/xmlpull/v1/sax2/package-summary.html
+
+http://developer.android.com/reference/org/apache/http/message/AbstractHttpMessage.html
+http://developer.android.com/guide/basics/what-is-android.html
+
+http://developer.android.com/guide/topics/fundamentals.html
+http://developer.android.com/guide/topics/ui/index.html
+
+http://developer.android.com/guide/topics/ui/declaring-layout.html
+http://developer.android.com/guide/topics/ui/menus.html
+
+http://developer.android.com/guide/topics/ui/layout-objects.html
+http://developer.android.com/guide/topics/ui/binding.html
+
+http://developer.android.com/guide/topics/ui/ui-events.html
+http://developer.android.com/guide/topics/ui/themes.html
+
+http://developer.android.com/guide/topics/ui/custom-components.html
+http://developer.android.com/guide/topics/ui/how-android-draws.html
+
+http://developer.android.com/guide/topics/resources/index.html
+http://developer.android.com/guide/topics/resources/resources-i18n.html
+
+http://developer.android.com/guide/topics/resources/available-resources.html
+http://developer.android.com/guide/topics/intents/intents-filters.html
+
+http://developer.android.com/guide/topics/data/data-storage.html
+http://developer.android.com/guide/topics/providers/content-providers.html
+
+http://developer.android.com/guide/topics/security/security.html
+http://developer.android.com/guide/topics/manifest/manifest-intro.html
+
+http://developer.android.com/guide/topics/manifest/action-element.html
+http://developer.android.com/guide/topics/manifest/activity-element.html
+
+http://developer.android.com/guide/topics/manifest/activity-alias-element.html
+http://developer.android.com/guide/topics/manifest/application-element.html
+
+http://developer.android.com/guide/topics/manifest/category-element.html
+http://developer.android.com/guide/topics/manifest/data-element.html
+
+http://developer.android.com/guide/topics/manifest/grant-uri-permission-element.html
+http://developer.android.com/guide/topics/manifest/instrumentation-element.html
+
+http://developer.android.com/guide/topics/manifest/intent-filter-element.html
+http://developer.android.com/guide/topics/manifest/manifest-element.html
+
+http://developer.android.com/guide/topics/manifest/meta-data-element.html
+http://developer.android.com/guide/topics/manifest/permission-element.html
+
+http://developer.android.com/guide/topics/manifest/permission-group-element.html
+http://developer.android.com/guide/topics/manifest/permission-tree-element.html
+
+http://developer.android.com/guide/topics/manifest/provider-element.html
+http://developer.android.com/guide/topics/manifest/receiver-element.html
+
+http://developer.android.com/guide/topics/manifest/service-element.html
+http://developer.android.com/guide/topics/manifest/uses-library-element.html
+
+http://developer.android.com/guide/topics/manifest/uses-permission-element.html
+http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
+
+http://developer.android.com/guide/topics/graphics/index.html
+http://developer.android.com/guide/topics/graphics/2d-graphics.html
+
+http://developer.android.com/guide/topics/graphics/opengl.html
+http://developer.android.com/guide/topics/media/index.html
+
+http://developer.android.com/guide/topics/location/index.html
+http://developer.android.com/guide/developing/eclipse-adt.html
+
+http://developer.android.com/guide/developing/other-ide.html
+http://developer.android.com/guide/developing/device.html
+
+http://developer.android.com/guide/developing/debug-tasks.html
+http://developer.android.com/guide/developing/tools/aapt.html
+
+http://developer.android.com/guide/developing/tools/adb.html
+http://developer.android.com/guide/developing/tools/othertools.html
+
+http://developer.android.com/guide/developing/tools/aidl.html
+http://developer.android.com/guide/developing/tools/ddms.html
+
+http://developer.android.com/guide/developing/tools/draw9patch.html
+http://developer.android.com/guide/developing/tools/emulator.html
+
+http://developer.android.com/guide/developing/tools/hierarchy-viewer.html
+http://developer.android.com/guide/developing/tools/monkey.html
+
+http://developer.android.com/guide/developing/tools/traceview.html
+http://developer.android.com/guide/publishing/app-signing.html
+
+http://developer.android.com/guide/publishing/versioning.html
+http://developer.android.com/guide/publishing/preparing.html
+
+http://developer.android.com/guide/publishing/publishing.html
+http://developer.android.com/guide/practices/design/performance.html
+
+http://developer.android.com/guide/practices/design/responsiveness.html
+http://developer.android.com/guide/practices/design/seamlessness.html
+
+http://developer.android.com/guide/tutorials/hello-world.html
+http://developer.android.com/guide/tutorials/views/index.html
+
+http://developer.android.com/guide/tutorials/notepad/index.html
+http://developer.android.com/guide/samples/ApiDemos/index.html
+
+http://developer.android.com/guide/samples/LunarLander/index.html
+http://developer.android.com/guide/samples/NotePad/index.html
+
+http://developer.android.com/guide/appendix/media-formats.html
+http://developer.android.com/guide/appendix/g-app-intents.html
+
+http://developer.android.com/guide/appendix/glossary.html
+http://developer.android.com/guide/appendix/faq/commontasks.html
+
+http://developer.android.com/guide/appendix/faq/framework.html
+http://developer.android.com/guide/appendix/faq/troubleshooting.html
+
+http://developer.android.com/guide/appendix/faq/licensingandoss.html
+http://developer.android.com/guide/appendix/faq/security.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/AbstractAuthenticationHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/AbstractHttpClient.html
+http://developer.android.com/reference/org/apache/http/impl/client/BasicCookieStore.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/BasicCredentialsProvider.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/BasicResponseHandler.html
+http://developer.android.com/reference/org/apache/http/impl/client/ClientParamsStack.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultRedirectHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultRequestDirector.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultUserTokenHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/EntityEnclosingRequestWrapper.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/RedirectLocations.html
+http://developer.android.com/reference/org/apache/http/impl/client/RequestWrapper.html
+
+http://developer.android.com/reference/org/apache/http/impl/client/RoutedRequest.html
+http://developer.android.com/reference/org/apache/http/impl/client/TunnelRefusedException.html
+
+http://developer.android.com/reference/org/apache/http/client/CookieStore.html
+http://developer.android.com/reference/org/apache/http/client/CredentialsProvider.html
+
+http://developer.android.com/reference/org/apache/http/client/ResponseHandler.html
+http://developer.android.com/reference/org/apache/http/client/HttpRequestRetryHandler.html
+
+http://developer.android.com/reference/org/apache/http/client/RedirectHandler.html
+http://developer.android.com/reference/org/apache/http/client/RequestDirector.html
+
+http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
+http://developer.android.com/reference/org/apache/http/HttpRequest.html
+
+http://developer.android.com/reference/android/Manifest.html
+http://developer.android.com/reference/android/Manifest.permission.html
+
+http://developer.android.com/reference/android/Manifest.permission_group.html
+http://developer.android.com/reference/android/R.html
+
+http://developer.android.com/reference/android/R.anim.html
+http://developer.android.com/reference/android/R.array.html
+
+http://developer.android.com/reference/android/R.attr.html
+http://developer.android.com/reference/android/R.color.html
+
+http://developer.android.com/reference/android/R.dimen.html
+http://developer.android.com/reference/android/R.drawable.html
+
+http://developer.android.com/reference/android/R.id.html
+http://developer.android.com/reference/android/R.layout.html
+
+http://developer.android.com/reference/android/R.plurals.html
+http://developer.android.com/reference/android/R.raw.html
+
+http://developer.android.com/reference/android/R.string.html
+http://developer.android.com/reference/android/R.style.html
+
+http://developer.android.com/reference/android/R.styleable.html
+http://developer.android.com/reference/android/R.xml.html
+
+http://developer.android.com/reference/android/package-descr.html
+http://developer.android.com/reference/android/os/Debug.html
+
+http://developer.android.com/reference/java/security/acl/Acl.html
+http://developer.android.com/reference/java/security/acl/AclEntry.html
+
+http://developer.android.com/reference/java/security/acl/Group.html
+http://developer.android.com/reference/java/security/acl/Owner.html
+
+http://developer.android.com/reference/java/security/acl/Permission.html
+http://developer.android.com/reference/java/security/acl/AclNotFoundException.html
+
+http://developer.android.com/reference/java/security/acl/LastOwnerException.html
+http://developer.android.com/reference/java/security/acl/NotOwnerException.html
+
+http://developer.android.com/reference/java/security/acl/package-descr.html
+http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
+
+http://developer.android.com/reference/java/text/CharacterIterator.html
+http://developer.android.com/reference/java/text/Annotation.html
+
+http://developer.android.com/reference/java/text/AttributedCharacterIterator.Attribute.html
+http://developer.android.com/reference/java/text/AttributedString.html
+
+http://developer.android.com/reference/java/text/Bidi.html
+http://developer.android.com/reference/java/text/BreakIterator.html
+
+http://developer.android.com/reference/java/text/ChoiceFormat.html
+http://developer.android.com/reference/java/text/CollationElementIterator.html
+
+http://developer.android.com/reference/java/text/CollationKey.html
+http://developer.android.com/reference/java/text/Collator.html
+
+http://developer.android.com/reference/java/text/DateFormat.html
+http://developer.android.com/reference/java/text/DateFormat.Field.html
+
+http://developer.android.com/reference/java/text/DateFormatSymbols.html
+http://developer.android.com/reference/java/text/DecimalFormat.html
+
+http://developer.android.com/reference/java/text/DecimalFormatSymbols.html
+http://developer.android.com/reference/java/text/FieldPosition.html
+
+http://developer.android.com/reference/java/text/Format.html
+http://developer.android.com/reference/java/text/Format.Field.html
+
+http://developer.android.com/reference/java/text/MessageFormat.html
+http://developer.android.com/reference/java/text/MessageFormat.Field.html
+
+http://developer.android.com/reference/java/text/NumberFormat.html
+http://developer.android.com/reference/java/text/NumberFormat.Field.html
+
+http://developer.android.com/reference/java/text/ParsePosition.html
+http://developer.android.com/reference/java/text/RuleBasedCollator.html
+
+http://developer.android.com/reference/java/text/SimpleDateFormat.html
+http://developer.android.com/reference/java/text/StringCharacterIterator.html
+
+http://developer.android.com/reference/java/text/ParseException.html
+http://developer.android.com/reference/java/text/package-descr.html
+
+http://developer.android.com/reference/android/view/Menu.html
+http://developer.android.com/reference/android/view/ContextMenu.html
+
+http://developer.android.com/reference/android/view/SubMenu.html
+http://developer.android.com/reference/android/app/Activity.html
+
+http://developer.android.com/reference/android/view/MenuItem.html
+http://developer.android.com/reference/android/widget/ListView.html
+
+http://developer.android.com/reference/android/view/View.html
+http://developer.android.com/reference/android/view/ContextMenu.ContextMenuInfo.html
+
+http://developer.android.com/reference/android/widget/AdapterView.AdapterContextMenuInfo.html
+
+http://developer.android.com/reference/android/app/ListActivity.html
+http://developer.android.com/reference/android/view/MenuInflater.html
+
+http://developer.android.com/reference/android/preference/PreferenceActivity.html
+http://developer.android.com/reference/android/media/MediaPlayer.html
+
+http://developer.android.com/reference/android/media/MediaRecorder.html
+http://developer.android.com/reference/android/content/ContentValues.html
+
+http://developer.android.com/reference/android/content/ContentResolver.html
+http://developer.android.com/reference/android/test/PerformanceTestCase.html
+
+http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
+http://developer.android.com/reference/android/test/TestSuiteProvider.html
+
+http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
+http://developer.android.com/reference/android/test/ActivityTestCase.html
+
+http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
+http://developer.android.com/reference/android/test/AndroidTestCase.html
+
+http://developer.android.com/reference/android/test/AndroidTestRunner.html
+http://developer.android.com/reference/android/test/ApplicationTestCase.html
+
+http://developer.android.com/reference/android/app/Application.html
+http://developer.android.com/reference/android/test/InstrumentationTestCase.html
+
+http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
+http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
+
+http://developer.android.com/reference/android/test/IsolatedContext.html
+http://developer.android.com/reference/android/test/MoreAsserts.html
+
+http://developer.android.com/reference/android/test/ProviderTestCase.html
+http://developer.android.com/reference/android/content/ContentProvider.html
+
+http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
+http://developer.android.com/reference/android/test/ServiceTestCase.html
+
+http://developer.android.com/reference/android/app/Service.html
+http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
+
+http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
+http://developer.android.com/reference/android/test/TouchUtils.html
+
+http://developer.android.com/reference/android/test/ViewAsserts.html
+http://developer.android.com/reference/android/test/AssertionFailedError.html
+
+http://developer.android.com/reference/android/test/ComparisonFailure.html
+http://developer.android.com/reference/android/app/Instrumentation.html
+
+http://developer.android.com/reference/junit/framework/TestCase.html
+http://developer.android.com/reference/junit/framework/TestSuite.html
+
+http://developer.android.com/reference/android/content/Intent.html
+http://developer.android.com/reference/android/content/Context.html
+
+http://developer.android.com/reference/android/os/Bundle.html
+http://developer.android.com/reference/android/view/ViewGroup.html
+
+http://developer.android.com/reference/android/widget/Button.html
+http://developer.android.com/reference/android/widget/TextView.html
+
+http://developer.android.com/reference/android/widget/EditText.html
+http://developer.android.com/reference/android/widget/CheckBox.html
+
+http://developer.android.com/reference/android/widget/RadioButton.html
+http://developer.android.com/reference/android/widget/Gallery.html
+
+http://developer.android.com/reference/android/widget/Spinner.html
+http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
+
+http://developer.android.com/reference/android/widget/ImageSwitcher.html
+http://developer.android.com/reference/android/widget/TextSwitcher.html
+
+http://developer.android.com/reference/android/widget/LinearLayout.html
+http://developer.android.com/reference/android/widget/FrameLayout.html
+
+http://developer.android.com/reference/android/widget/AbsoluteLayout.html
+http://developer.android.com/reference/android/graphics/Canvas.html
+
+http://developer.android.com/reference/android/view/SurfaceView.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_view_1.html
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
+
+http://developer.android.com/reference/java/net/ContentHandlerFactory.html
+http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
+
+http://developer.android.com/reference/java/net/FileNameMap.html
+http://developer.android.com/reference/java/net/SocketImplFactory.html
+
+http://developer.android.com/reference/java/net/SocketOptions.html
+http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
+
+http://developer.android.com/reference/java/net/Authenticator.html
+http://developer.android.com/reference/java/net/CacheRequest.html
+
+http://developer.android.com/reference/java/net/CacheResponse.html
+http://developer.android.com/reference/java/net/ContentHandler.html
+
+http://developer.android.com/reference/java/net/CookieHandler.html
+http://developer.android.com/reference/java/net/DatagramPacket.html
+
+http://developer.android.com/reference/java/net/DatagramSocket.html
+http://developer.android.com/reference/java/net/DatagramSocketImpl.html
+
+http://developer.android.com/reference/java/net/HttpURLConnection.html
+http://developer.android.com/reference/java/net/Inet4Address.html
+
+http://developer.android.com/reference/java/net/Inet6Address.html
+http://developer.android.com/reference/java/net/InetAddress.html
+
+http://developer.android.com/reference/java/net/InetSocketAddress.html
+http://developer.android.com/reference/java/net/JarURLConnection.html
+
+http://developer.android.com/reference/java/net/MulticastSocket.html
+http://developer.android.com/reference/java/net/NetPermission.html
+
+http://developer.android.com/reference/java/net/NetworkInterface.html
+http://developer.android.com/reference/java/net/PasswordAuthentication.html
+
+http://developer.android.com/reference/java/net/Proxy.html
+http://developer.android.com/reference/java/net/ProxySelector.html
+
+http://developer.android.com/reference/java/net/ResponseCache.html
+http://developer.android.com/reference/java/net/SecureCacheResponse.html
+
+http://developer.android.com/reference/java/net/ServerSocket.html
+http://developer.android.com/reference/java/net/Socket.html
+
+http://developer.android.com/reference/java/net/SocketAddress.html
+http://developer.android.com/reference/java/net/SocketImpl.html
+
+http://developer.android.com/reference/java/net/SocketPermission.html
+http://developer.android.com/reference/java/net/URI.html
+
+http://developer.android.com/reference/java/net/URL.html
+http://developer.android.com/reference/java/net/URLClassLoader.html
+
+http://developer.android.com/reference/java/net/URLConnection.html
+http://developer.android.com/reference/java/net/URLDecoder.html
+
+http://developer.android.com/reference/java/net/URLEncoder.html
+http://developer.android.com/reference/java/net/URLStreamHandler.html
+
+http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
+http://developer.android.com/reference/java/net/Proxy.Type.html
+
+http://developer.android.com/reference/java/net/BindException.html
+http://developer.android.com/reference/java/net/ConnectException.html
+
+http://developer.android.com/reference/java/net/HttpRetryException.html
+http://developer.android.com/reference/java/net/MalformedURLException.html
+
+http://developer.android.com/reference/java/net/NoRouteToHostException.html
+http://developer.android.com/reference/java/net/PortUnreachableException.html
+
+http://developer.android.com/reference/java/net/ProtocolException.html
+http://developer.android.com/reference/java/net/SocketException.html
+
+http://developer.android.com/reference/java/net/SocketTimeoutException.html
+http://developer.android.com/reference/java/net/UnknownHostException.html
+
+http://developer.android.com/reference/java/net/UnknownServiceException.html
+http://developer.android.com/reference/java/net/URISyntaxException.html
+
+http://developer.android.com/reference/java/net/package-descr.html
+http://developer.android.com/reference/android/graphics/drawable/Drawable.html
+
+http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html
+
+http://developer.android.com/reference/android/graphics/drawable/PictureDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html
+
+http://developer.android.com/reference/android/widget/ImageView.html
+http://developer.android.com/reference/android/content/res/Resources.html
+
+http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
+http://developer.android.com/reference/android/graphics/drawable/NinePatchDrawable.html
+
+http://developer.android.com/reference/android/view/animation/AnimationSet.html
+http://developer.android.com/reference/android/view/animation/Animation.html
+
+http://developer.android.com/reference/android/view/animation/Interpolator.html
+http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
+
+http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
+http://developer.android.com/reference/java/util/logging/Filter.html
+
+http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
+http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
+
+http://developer.android.com/reference/java/util/logging/ErrorManager.html
+http://developer.android.com/reference/java/util/logging/FileHandler.html
+
+http://developer.android.com/reference/java/util/logging/Formatter.html
+http://developer.android.com/reference/java/util/logging/Handler.html
+
+http://developer.android.com/reference/java/util/logging/Level.html
+http://developer.android.com/reference/java/util/logging/Logger.html
+
+http://developer.android.com/reference/java/util/logging/LoggingPermission.html
+http://developer.android.com/reference/java/util/logging/LogManager.html
+
+http://developer.android.com/reference/java/util/logging/LogRecord.html
+http://developer.android.com/reference/java/util/logging/MemoryHandler.html
+
+http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
+http://developer.android.com/reference/java/util/logging/SocketHandler.html
+
+http://developer.android.com/reference/java/util/logging/StreamHandler.html
+http://developer.android.com/reference/java/util/logging/XMLFormatter.html
+
+http://developer.android.com/reference/java/util/logging/package-descr.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
+
+http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
+http://developer.android.com/reference/android/os/Process.html
+
+http://developer.android.com/reference/android/graphics/AvoidXfermode.html
+http://developer.android.com/reference/android/graphics/Bitmap.html
+
+http://developer.android.com/reference/android/graphics/BitmapFactory.html
+http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
+
+http://developer.android.com/reference/android/graphics/BitmapShader.html
+http://developer.android.com/reference/android/graphics/BlurMaskFilter.html
+
+http://developer.android.com/reference/android/graphics/Camera.html
+http://developer.android.com/reference/android/graphics/Color.html
+
+http://developer.android.com/reference/android/graphics/ColorFilter.html
+http://developer.android.com/reference/android/graphics/ColorMatrix.html
+
+http://developer.android.com/reference/android/graphics/ColorMatrixColorFilter.html
+http://developer.android.com/reference/android/graphics/ComposePathEffect.html
+
+http://developer.android.com/reference/android/graphics/ComposeShader.html
+http://developer.android.com/reference/android/graphics/CornerPathEffect.html
+
+http://developer.android.com/reference/android/graphics/DashPathEffect.html
+http://developer.android.com/reference/android/graphics/DiscretePathEffect.html
+
+http://developer.android.com/reference/android/graphics/DrawFilter.html
+http://developer.android.com/reference/android/graphics/EmbossMaskFilter.html
+
+http://developer.android.com/reference/android/graphics/Interpolator.html
+http://developer.android.com/reference/android/graphics/LayerRasterizer.html
+
+http://developer.android.com/reference/android/graphics/LightingColorFilter.html
+http://developer.android.com/reference/android/graphics/LinearGradient.html
+
+http://developer.android.com/reference/android/graphics/MaskFilter.html
+http://developer.android.com/reference/android/graphics/Matrix.html
+
+http://developer.android.com/reference/android/graphics/Movie.html
+http://developer.android.com/reference/android/graphics/NinePatch.html
+
+http://developer.android.com/reference/android/graphics/Paint.html
+http://developer.android.com/reference/android/graphics/Paint.FontMetrics.html
+
+http://developer.android.com/reference/android/graphics/Paint.FontMetricsInt.html
+http://developer.android.com/reference/android/graphics/PaintFlagsDrawFilter.html
+
+http://developer.android.com/reference/android/graphics/Path.html
+http://developer.android.com/reference/android/graphics/PathDashPathEffect.html
+
+http://developer.android.com/reference/android/graphics/PathEffect.html
+http://developer.android.com/reference/android/graphics/PathMeasure.html
+
+http://developer.android.com/reference/android/graphics/Picture.html
+http://developer.android.com/reference/android/graphics/PixelFormat.html
+
+http://developer.android.com/reference/android/graphics/PixelXorXfermode.html
+http://developer.android.com/reference/android/graphics/Point.html
+
+http://developer.android.com/reference/android/graphics/PointF.html
+http://developer.android.com/reference/android/graphics/PorterDuff.html
+
+http://developer.android.com/reference/android/graphics/PorterDuffColorFilter.html
+http://developer.android.com/reference/android/graphics/PorterDuffXfermode.html
+
+http://developer.android.com/reference/android/graphics/RadialGradient.html
+http://developer.android.com/reference/android/graphics/Rasterizer.html
+
+http://developer.android.com/reference/android/graphics/Rect.html
+http://developer.android.com/reference/android/graphics/RectF.html
+
+http://developer.android.com/reference/android/graphics/Region.html
+http://developer.android.com/reference/android/graphics/RegionIterator.html
+
+http://developer.android.com/reference/android/graphics/Shader.html
+http://developer.android.com/reference/android/graphics/SumPathEffect.html
+
+http://developer.android.com/reference/android/graphics/SweepGradient.html
+http://developer.android.com/reference/android/graphics/Typeface.html
+
+http://developer.android.com/reference/android/graphics/Xfermode.html
+http://developer.android.com/reference/android/graphics/AvoidXfermode.Mode.html
+
+http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html
+http://developer.android.com/reference/android/graphics/Bitmap.Config.html
+
+http://developer.android.com/reference/android/graphics/BlurMaskFilter.Blur.html
+http://developer.android.com/reference/android/graphics/Canvas.EdgeType.html
+
+http://developer.android.com/reference/android/graphics/Canvas.VertexMode.html
+http://developer.android.com/reference/android/graphics/Interpolator.Result.html
+
+http://developer.android.com/reference/android/graphics/Matrix.ScaleToFit.html
+http://developer.android.com/reference/android/graphics/Paint.Align.html
+
+http://developer.android.com/reference/android/graphics/Paint.Cap.html
+http://developer.android.com/reference/android/graphics/Paint.Join.html
+
+http://developer.android.com/reference/android/graphics/Paint.Style.html
+http://developer.android.com/reference/android/graphics/Path.Direction.html
+
+http://developer.android.com/reference/android/graphics/Path.FillType.html
+http://developer.android.com/reference/android/graphics/PathDashPathEffect.Style.html
+
+http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
+http://developer.android.com/reference/android/graphics/Region.Op.html
+
+http://developer.android.com/reference/android/graphics/Shader.TileMode.html
+http://developer.android.com/reference/android/graphics/package-descr.html
+
+http://developer.android.com/reference/android/content/BroadcastReceiver.html
+http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
+
+http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieAttributeHandler.html
+
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
+
+http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
+http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
+
+http://developer.android.com/reference/org/apache/http/cookie/SM.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieIdentityComparator.html
+
+http://developer.android.com/reference/org/apache/http/cookie/CookieOrigin.html
+http://developer.android.com/reference/org/apache/http/cookie/CookiePathComparator.html
+
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpecRegistry.html
+http://developer.android.com/reference/org/apache/http/cookie/MalformedCookieException.html
+
+http://developer.android.com/reference/org/apache/http/cookie/package-descr.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
+
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectionKey.html
+
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
+http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
+
+http://developer.android.com/reference/java/nio/channels/spi/package-descr.html
+http://developer.android.com/reference/org/apache/http/client/AuthenticationHandler.html
+
+http://developer.android.com/reference/org/apache/http/client/HttpClient.html
+http://developer.android.com/reference/org/apache/http/client/UserTokenHandler.html
+
+http://developer.android.com/reference/org/apache/http/client/CircularRedirectException.html
+http://developer.android.com/reference/org/apache/http/client/ClientProtocolException.html
+
+http://developer.android.com/reference/org/apache/http/client/HttpResponseException.html
+http://developer.android.com/reference/org/apache/http/client/NonRepeatableRequestException.html
+
+http://developer.android.com/reference/org/apache/http/client/RedirectException.html
+http://developer.android.com/reference/org/apache/http/client/package-descr.html
+
+http://developer.android.com/reference/org/apache/http/HttpResponse.html
+http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
+
+http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
+http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
+
+http://developer.android.com/reference/java/util/prefs/AbstractPreferences.html
+http://developer.android.com/reference/java/util/prefs/NodeChangeEvent.html
+
+http://developer.android.com/reference/java/util/prefs/PreferenceChangeEvent.html
+http://developer.android.com/reference/java/util/prefs/Preferences.html
+
+http://developer.android.com/reference/java/util/prefs/BackingStoreException.html
+http://developer.android.com/reference/java/util/prefs/InvalidPreferencesFormatException.html
+
+http://developer.android.com/reference/java/util/prefs/package-descr.html
+http://developer.android.com/sdk/adt_download.html
+http://developer.android.com/reference/android/provider/BaseColumns.html
+
+http://developer.android.com/reference/android/provider/Contacts.ContactMethodsColumns.html
+http://developer.android.com/reference/android/provider/Contacts.ExtensionsColumns.html
+
+http://developer.android.com/reference/android/provider/Contacts.GroupsColumns.html
+http://developer.android.com/reference/android/provider/Contacts.OrganizationColumns.html
+
+http://developer.android.com/reference/android/provider/Contacts.PeopleColumns.html
+http://developer.android.com/reference/android/provider/Contacts.PhonesColumns.html
+
+http://developer.android.com/reference/android/provider/Contacts.PhotosColumns.html
+http://developer.android.com/reference/android/provider/Contacts.PresenceColumns.html
+
+http://developer.android.com/reference/android/provider/Contacts.SettingsColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Audio.GenresColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.PlaylistsColumns.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html
+http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html
+http://developer.android.com/reference/android/provider/OpenableColumns.html
+
+http://developer.android.com/reference/android/provider/Browser.html
+http://developer.android.com/reference/android/provider/Browser.BookmarkColumns.html
+
+http://developer.android.com/reference/android/provider/Browser.SearchColumns.html
+http://developer.android.com/reference/android/provider/CallLog.html
+
+http://developer.android.com/reference/android/provider/CallLog.Calls.html
+http://developer.android.com/reference/android/provider/Contacts.html
+
+http://developer.android.com/reference/android/provider/Contacts.ContactMethods.html
+http://developer.android.com/reference/android/provider/Contacts.Extensions.html
+
+http://developer.android.com/reference/android/provider/Contacts.GroupMembership.html
+http://developer.android.com/reference/android/provider/Contacts.Groups.html
+
+http://developer.android.com/reference/android/provider/Contacts.Intents.html
+http://developer.android.com/reference/android/provider/Contacts.Intents.Insert.html
+
+http://developer.android.com/reference/android/provider/Contacts.Intents.UI.html
+http://developer.android.com/reference/android/provider/Contacts.Organizations.html
+
+http://developer.android.com/reference/android/provider/Contacts.People.html
+http://developer.android.com/reference/android/provider/Contacts.People.ContactMethods.html
+
+http://developer.android.com/reference/android/provider/Contacts.People.Extensions.html
+http://developer.android.com/reference/android/provider/Contacts.People.Phones.html
+
+http://developer.android.com/reference/android/provider/Contacts.Phones.html
+http://developer.android.com/reference/android/provider/Contacts.Photos.html
+
+http://developer.android.com/reference/android/provider/Contacts.Settings.html
+http://developer.android.com/reference/android/provider/MediaStore.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Audio.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Albums.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.Albums.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.Members.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Media.html
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.Members.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Images.html
+http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Images.Thumbnails.html
+http://developer.android.com/reference/android/provider/MediaStore.Video.html
+
+http://developer.android.com/reference/android/provider/MediaStore.Video.Media.html
+http://developer.android.com/reference/android/provider/SearchRecentSuggestions.html
+
+http://developer.android.com/reference/android/provider/Settings.html
+http://developer.android.com/reference/android/provider/Settings.NameValueTable.html
+
+http://developer.android.com/reference/android/provider/Settings.System.html
+http://developer.android.com/reference/android/provider/Settings.SettingNotFoundException.html
+
+http://developer.android.com/reference/android/provider/package-descr.html
+http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
+
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
+http://developer.android.com/reference/android/net/ConnectivityManager.html
+
+http://developer.android.com/reference/android/net/Credentials.html
+http://developer.android.com/reference/android/net/DhcpInfo.html
+
+http://developer.android.com/reference/android/net/LocalServerSocket.html
+http://developer.android.com/reference/android/net/LocalSocket.html
+
+http://developer.android.com/reference/android/net/LocalSocketAddress.html
+http://developer.android.com/reference/android/net/MailTo.html
+
+http://developer.android.com/reference/android/net/NetworkInfo.html
+http://developer.android.com/reference/android/net/Proxy.html
+
+http://developer.android.com/reference/android/net/SSLCertificateSocketFactory.html
+http://developer.android.com/reference/android/net/Uri.html
+
+http://developer.android.com/reference/android/net/Uri.Builder.html
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.html
+
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.IllegalCharacterValueSanitizer.html
+
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.ParameterValuePair.html
+http://developer.android.com/reference/android/net/LocalSocketAddress.Namespace.html
+
+http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html
+http://developer.android.com/reference/android/net/NetworkInfo.State.html
+
+http://developer.android.com/reference/android/net/package-descr.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGL.html
+
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGL10.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGL11.html
+
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGLConfig.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGLContext.html
+
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGLDisplay.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGLSurface.html
+
+http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
+http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
+
+http://developer.android.com/reference/org/apache/http/auth/params/AuthParamBean.html
+http://developer.android.com/reference/org/apache/http/auth/params/AuthParams.html
+
+http://developer.android.com/reference/org/apache/http/auth/params/package-descr.html
+http://developer.android.com/reference/org/apache/http/params/HttpParams.html
+
+http://developer.android.com/reference/java/lang/Object.html
+http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpContext.html
+http://developer.android.com/reference/java/lang/Class.html
+
+http://developer.android.com/reference/java/lang/String.html
+http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
+
+http://developer.android.com/reference/org/xml/sax/ext/Attributes2.html
+http://developer.android.com/reference/org/xml/sax/ext/DeclHandler.html
+
+http://developer.android.com/reference/org/xml/sax/ext/EntityResolver2.html
+http://developer.android.com/reference/org/xml/sax/ext/LexicalHandler.html
+
+http://developer.android.com/reference/org/xml/sax/ext/Locator2.html
+http://developer.android.com/reference/org/xml/sax/ext/Attributes2Impl.html
+
+http://developer.android.com/reference/org/xml/sax/ext/DefaultHandler2.html
+http://developer.android.com/reference/org/xml/sax/ext/Locator2Impl.html
+
+http://developer.android.com/reference/org/xml/sax/ext/package-descr.html
+http://developer.android.com/reference/org/xml/sax/Attributes.html
+
+http://developer.android.com/reference/org/xml/sax/Locator.html
+http://developer.android.com/reference/android/content/pm/PackageManager.html
+
+http://developer.android.com/reference/org/apache/http/HttpHost.html
+
+http://developer.android.com/reference/org/apache/http/HttpException.html
+http://developer.android.com/reference/java/io/IOException.html
+
+http://developer.android.com/reference/javax/security/auth/x500/X500Principal.html
+http://developer.android.com/reference/javax/security/auth/x500/package-descr.html
+
+http://developer.android.com/reference/java/util/Date.html
+http://developer.android.com/reference/java/util/List.html
+
+http://developer.android.com/reference/android/sax/ElementListener.html
+http://developer.android.com/reference/android/sax/EndElementListener.html
+
+http://developer.android.com/reference/android/sax/EndTextElementListener.html
+http://developer.android.com/reference/android/sax/StartElementListener.html
+
+http://developer.android.com/reference/android/sax/TextElementListener.html
+http://developer.android.com/reference/android/sax/Element.html
+
+http://developer.android.com/reference/android/sax/RootElement.html
+http://developer.android.com/reference/android/sax/package-descr.html
+
+http://developer.android.com/reference/junit/runner/BaseTestRunner.html
+http://developer.android.com/reference/junit/framework/TestListener.html
+
+http://developer.android.com/reference/junit/framework/TestResult.html
+http://developer.android.com/reference/junit/framework/Test.html
+
+http://developer.android.com/reference/java/lang/Throwable.html
+http://developer.android.com/reference/junit/framework/AssertionFailedError.html
+
+http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
+http://developer.android.com/reference/java/util/Properties.html
+
+http://developer.android.com/reference/java/lang/ClassNotFoundException.html
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageParser.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageWriter.html
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionInputBuffer.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionOutputBuffer.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/ChunkedInputStream.html
+http://developer.android.com/reference/org/apache/http/impl/io/ChunkedOutputStream.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthInputStream.html
+http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthOutputStream.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestParser.html
+http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestWriter.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseParser.html
+http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseWriter.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/HttpTransportMetricsImpl.html
+http://developer.android.com/reference/org/apache/http/impl/io/IdentityInputStream.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/IdentityOutputStream.html
+http://developer.android.com/reference/org/apache/http/impl/io/SocketInputBuffer.html
+
+http://developer.android.com/reference/org/apache/http/impl/io/SocketOutputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/io/package-descr.html
+
+http://developer.android.com/reference/java/io/InputStream.html
+http://developer.android.com/reference/java/io/OutputStream.html
+
+http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
+http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
+
+http://developer.android.com/reference/junit/framework/Assert.html
+http://developer.android.com/reference/java/lang/IllegalAccessException.html
+
+http://developer.android.com/reference/java/lang/Exception.html
+http://developer.android.com/reference/java/util/jar/Pack200.Packer.html
+
+http://developer.android.com/reference/java/util/jar/Pack200.Unpacker.html
+http://developer.android.com/reference/java/util/jar/Attributes.html
+
+http://developer.android.com/reference/java/util/jar/Attributes.Name.html
+http://developer.android.com/reference/java/util/jar/JarEntry.html
+
+http://developer.android.com/reference/java/util/jar/JarFile.html
+http://developer.android.com/reference/java/util/jar/JarInputStream.html
+
+http://developer.android.com/reference/java/util/jar/JarOutputStream.html
+http://developer.android.com/reference/java/util/jar/Manifest.html
+
+http://developer.android.com/reference/java/util/jar/Pack200.html
+http://developer.android.com/reference/java/util/jar/JarException.html
+
+http://developer.android.com/reference/java/util/jar/package-descr.html
+http://developer.android.com/reference/android/view/View.MeasureSpec.html
+
+http://developer.android.com/guide/tutorials/views/hello-formstuff.html
+http://developer.android.com/reference/android/view/View.OnClickListener.html
+
+http://developer.android.com/reference/android/view/View.OnLongClickListener.html
+http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
+
+http://developer.android.com/reference/android/view/View.OnKeyListener.html
+http://developer.android.com/reference/android/view/View.OnTouchListener.html
+
+http://developer.android.com/reference/android/view/View.OnCreateContextMenuListener.html
+http://developer.android.com/reference/android/view/ViewParent.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteQuery.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteAbortException.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteConstraintException.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseCorruptException.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteDiskIOException.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteDoneException.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteException.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteFullException.html
+
+http://developer.android.com/reference/android/database/sqlite/SQLiteMisuseException.html
+http://developer.android.com/reference/android/database/sqlite/package-descr.html
+
+http://developer.android.com/reference/android/database/Cursor.html
+http://developer.android.com/reference/java/lang/StackTraceElement.html
+
+http://developer.android.com/reference/java/io/PrintWriter.html
+http://developer.android.com/reference/java/io/PrintStream.html
+
+http://developer.android.com/reference/java/math/BigDecimal.html
+http://developer.android.com/reference/java/math/BigInteger.html
+
+http://developer.android.com/reference/java/math/MathContext.html
+http://developer.android.com/reference/java/math/RoundingMode.html
+
+http://developer.android.com/reference/java/math/package-descr.html
+http://developer.android.com/reference/dalvik/system/DexFile.html
+
+http://developer.android.com/reference/dalvik/system/PathClassLoader.html
+http://developer.android.com/reference/dalvik/system/TemporaryDirectory.html
+
+http://developer.android.com/reference/dalvik/system/TouchDex.html
+http://developer.android.com/reference/dalvik/system/VMDebug.html
+
+http://developer.android.com/reference/dalvik/system/VMRuntime.html
+http://developer.android.com/reference/dalvik/system/VMStack.html
+
+http://developer.android.com/reference/dalvik/system/Zygote.html
+http://developer.android.com/reference/dalvik/system/AllocationLimitError.html
+
+http://developer.android.com/reference/dalvik/system/PotentialDeadlockError.html
+http://developer.android.com/reference/dalvik/system/StaleDexCacheError.html
+
+http://developer.android.com/reference/org/apache/http/client/protocol/ClientContext.html
+http://developer.android.com/reference/org/apache/http/client/protocol/ClientContextConfigurer.html
+
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestAddCookies.html
+
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestDefaultHeaders.html
+
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestProxyAuthentication.html
+
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestTargetAuthentication.html
+
+http://developer.android.com/reference/org/apache/http/client/protocol/ResponseProcessCookies.html
+
+http://developer.android.com/reference/org/apache/http/client/protocol/package-descr.html
+http://developer.android.com/reference/android/graphics/drawable/Drawable.Callback.html
+
+http://developer.android.com/reference/android/graphics/drawable/ClipDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/ColorDrawable.html
+
+http://developer.android.com/reference/android/graphics/drawable/Drawable.ConstantState.html
+http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html
+
+http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.DrawableContainerState.html
+
+http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html
+
+http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/PaintDrawable.html
+
+http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/ScaleDrawable.html
+
+http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.ShaderFactory.html
+
+http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
+
+http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.Orientation.html
+
+http://developer.android.com/reference/java/lang/Runnable.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
+
+http://developer.android.com/reference/android/util/AttributeSet.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserException.html
+
+http://developer.android.com/reference/java/util/EventListener.html
+http://developer.android.com/reference/android/app/AliasActivity.html
+
+http://developer.android.com/reference/java/lang/ref/PhantomReference.html
+http://developer.android.com/reference/java/lang/ref/Reference.html
+
+http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
+http://developer.android.com/reference/java/lang/ref/SoftReference.html
+
+http://developer.android.com/reference/java/lang/ref/WeakReference.html
+http://developer.android.com/reference/javax/xml/parsers/DocumentBuilder.html
+
+http://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html
+http://developer.android.com/reference/javax/xml/parsers/SAXParser.html
+
+http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html
+http://developer.android.com/reference/javax/xml/parsers/ParserConfigurationException.html
+
+http://developer.android.com/reference/javax/xml/parsers/FactoryConfigurationError.html
+http://developer.android.com/reference/javax/xml/parsers/package-descr.html
+
+http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
+http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
+
+http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
+http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
+
+http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
+http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
+
+http://developer.android.com/reference/android/app/ActivityGroup.html
+http://developer.android.com/reference/android/app/ActivityManager.html
+
+http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
+
+http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
+
+http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
+http://developer.android.com/reference/android/app/AlarmManager.html
+
+http://developer.android.com/reference/android/app/AlertDialog.html
+http://developer.android.com/reference/android/app/AlertDialog.Builder.html
+
+http://developer.android.com/reference/android/app/DatePickerDialog.html
+http://developer.android.com/reference/android/app/Dialog.html
+
+http://developer.android.com/reference/android/app/ExpandableListActivity.html
+http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
+
+http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
+http://developer.android.com/reference/android/app/KeyguardManager.html
+
+http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
+http://developer.android.com/reference/android/app/LauncherActivity.html
+
+http://developer.android.com/reference/android/app/LocalActivityManager.html
+http://developer.android.com/reference/android/app/Notification.html
+
+http://developer.android.com/reference/android/app/NotificationManager.html
+http://developer.android.com/reference/android/app/PendingIntent.html
+
+http://developer.android.com/reference/android/app/ProgressDialog.html
+http://developer.android.com/reference/android/app/SearchManager.html
+
+http://developer.android.com/reference/android/app/TabActivity.html
+http://developer.android.com/reference/android/app/TimePickerDialog.html
+
+http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
+http://developer.android.com/reference/android/content/ContextWrapper.html
+
+http://developer.android.com/reference/android/view/ContextThemeWrapper.html
+http://developer.android.com/reference/android/widget/ListAdapter.html
+
+http://developer.android.com/reference/android/widget/SimpleAdapter.html
+http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
+
+http://developer.android.com/reference/android/media/AudioManager.html
+http://developer.android.com/reference/android/text/ClipboardManager.html
+
+http://developer.android.com/reference/android/view/LayoutInflater.html
+http://developer.android.com/reference/android/location/LocationManager.html
+
+http://developer.android.com/reference/android/os/PowerManager.html
+http://developer.android.com/reference/android/hardware/SensorManager.html
+
+http://developer.android.com/reference/android/telephony/TelephonyManager.html
+http://developer.android.com/reference/android/os/Vibrator.html
+
+http://developer.android.com/reference/android/net/wifi/WifiManager.html
+http://developer.android.com/reference/android/view/WindowManager.html
+
+http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html
+http://developer.android.com/reference/android/view/KeyEvent.html
+
+http://developer.android.com/reference/android/view/MotionEvent.html
+http://developer.android.com/reference/android/content/ComponentName.html
+
+http://developer.android.com/reference/android/view/Window.html
+http://developer.android.com/reference/android/content/SharedPreferences.html
+
+http://developer.android.com/reference/java/lang/CharSequence.html
+http://developer.android.com/reference/android/content/res/Resources.Theme.html
+
+http://developer.android.com/reference/android/content/res/Configuration.html
+http://developer.android.com/reference/android/view/Window.Callback.html
+
+http://developer.android.com/reference/android/view/LayoutInflater.Factory.html
+http://developer.android.com/reference/android/view/KeyEvent.Callback.html
+
+http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
+http://developer.android.com/reference/android/content/ServiceConnection.html
+
+http://developer.android.com/reference/java/lang/SecurityException.html
+http://developer.android.com/reference/android/content/res/AssetManager.html
+
+http://developer.android.com/reference/java/io/File.html
+http://developer.android.com/reference/java/lang/ClassLoader.html
+
+http://developer.android.com/reference/android/os/Looper.html
+http://developer.android.com/reference/java/io/FileInputStream.html
+
+http://developer.android.com/reference/java/io/FileOutputStream.html
+http://developer.android.com/reference/android/content/IntentFilter.html
+
+http://developer.android.com/reference/android/os/Handler.html
+http://developer.android.com/reference/java/util/Formatter.html
+
+http://developer.android.com/reference/android/content/res/TypedArray.html
+http://developer.android.com/reference/android/content/ComponentCallbacks.html
+
+http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
+
+http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
+
+http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
+http://developer.android.com/reference/android/view/animation/Animation.Description.html
+
+http://developer.android.com/reference/android/view/animation/AnimationUtils.html
+http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
+
+http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
+http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
+
+http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
+
+http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
+http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
+
+http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
+http://developer.android.com/reference/android/view/animation/RotateAnimation.html
+
+http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
+http://developer.android.com/reference/android/view/animation/Transformation.html
+
+http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
+http://developer.android.com/reference/android/view/animation/package-descr.html
+
+http://developer.android.com/reference/android/os/IBinder.html
+http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
+
+http://developer.android.com/reference/android/os/IInterface.html
+http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
+
+http://developer.android.com/reference/android/os/Parcelable.html
+http://developer.android.com/reference/android/os/Parcelable.Creator.html
+
+http://developer.android.com/reference/android/os/BatteryManager.html
+http://developer.android.com/reference/android/os/Binder.html
+
+http://developer.android.com/reference/android/os/Build.html
+http://developer.android.com/reference/android/os/Build.VERSION.html
+
+http://developer.android.com/reference/android/os/ConditionVariable.html
+http://developer.android.com/reference/android/os/CountDownTimer.html
+
+http://developer.android.com/reference/android/os/Debug.InstructionCount.html
+http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
+
+http://developer.android.com/reference/android/os/Environment.html
+http://developer.android.com/reference/android/os/FileObserver.html
+
+http://developer.android.com/reference/android/os/HandlerThread.html
+http://developer.android.com/reference/android/os/MemoryFile.html
+
+http://developer.android.com/reference/android/os/Message.html
+http://developer.android.com/reference/android/os/MessageQueue.html
+
+http://developer.android.com/reference/android/os/Messenger.html
+http://developer.android.com/reference/android/os/Parcel.html
+
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
+
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
+
+http://developer.android.com/reference/android/os/PatternMatcher.html
+http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
+
+http://developer.android.com/reference/android/os/RemoteCallbackList.html
+http://developer.android.com/reference/android/os/StatFs.html
+
+http://developer.android.com/reference/android/os/SystemClock.html
+http://developer.android.com/reference/android/os/TokenWatcher.html
+
+http://developer.android.com/reference/android/os/BadParcelableException.html
+http://developer.android.com/reference/android/os/DeadObjectException.html
+
+http://developer.android.com/reference/android/os/ParcelFormatException.html
+http://developer.android.com/reference/android/os/RemoteException.html
+
+http://developer.android.com/reference/java/lang/Cloneable.html
+http://developer.android.com/reference/java/lang/Byte.html
+
+http://developer.android.com/reference/java/util/ArrayList.html
+http://developer.android.com/reference/java/lang/Integer.html
+
+http://developer.android.com/reference/java/io/Serializable.html
+http://developer.android.com/reference/android/util/SparseArray.html
+
+http://developer.android.com/reference/java/util/Set.html
+http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
+
+http://developer.android.com/reference/java/lang/IllegalArgumentException.html
+http://developer.android.com/reference/android/webkit/WebView.html
+
+http://developer.android.com/reference/android/hardware/Camera.html
+http://developer.android.com/reference/android/text/Spannable.html
+
+http://developer.android.com/reference/android/util/Log.html
+http://developer.android.com/reference/org/xml/sax/helpers/AttributeListImpl.html
+
+http://developer.android.com/reference/org/xml/sax/helpers/AttributesImpl.html
+http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html
+
+http://developer.android.com/reference/org/xml/sax/helpers/LocatorImpl.html
+http://developer.android.com/reference/org/xml/sax/helpers/NamespaceSupport.html
+
+http://developer.android.com/reference/org/xml/sax/helpers/ParserAdapter.html
+http://developer.android.com/reference/org/xml/sax/helpers/ParserFactory.html
+
+http://developer.android.com/reference/org/xml/sax/helpers/XMLFilterImpl.html
+http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderAdapter.html
+
+http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderFactory.html
+http://developer.android.com/reference/org/xml/sax/helpers/package-descr.html
+
+http://developer.android.com/reference/org/xml/sax/AttributeList.html
+http://developer.android.com/reference/org/xml/sax/Parser.html
+
+http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
+http://developer.android.com/reference/android/widget/AbsListView.RecyclerListener.html
+
+http://developer.android.com/reference/android/widget/Adapter.html
+http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
+
+http://developer.android.com/reference/android/widget/AdapterView.OnItemLongClickListener.html
+
+http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html
+
+http://developer.android.com/reference/android/widget/AutoCompleteTextView.Validator.html
+http://developer.android.com/reference/android/widget/Checkable.html
+
+http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
+
+http://developer.android.com/reference/android/widget/DatePicker.OnDateChangedListener.html
+http://developer.android.com/reference/android/widget/ExpandableListAdapter.html
+
+http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html
+
+http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupClickListener.html
+
+http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupCollapseListener.html
+
+http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupExpandListener.html
+
+http://developer.android.com/reference/android/widget/Filter.FilterListener.html
+http://developer.android.com/reference/android/widget/Filterable.html
+
+http://developer.android.com/reference/android/widget/FilterQueryProvider.html
+http://developer.android.com/reference/android/widget/MediaController.MediaPlayerControl.html
+
+http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.Tokenizer.html
+
+http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
+
+http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html
+
+http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html
+http://developer.android.com/reference/android/widget/SimpleAdapter.ViewBinder.html
+
+http://developer.android.com/reference/android/widget/SimpleCursorAdapter.CursorToStringConverter.html
+
+http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html
+http://developer.android.com/reference/android/widget/SpinnerAdapter.html
+
+http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
+http://developer.android.com/reference/android/widget/TabHost.TabContentFactory.html
+
+http://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html
+http://developer.android.com/reference/android/widget/ViewSwitcher.ViewFactory.html
+
+http://developer.android.com/reference/android/widget/WrapperListAdapter.html
+http://developer.android.com/reference/android/widget/AbsListView.html
+
+http://developer.android.com/reference/android/widget/AbsListView.LayoutParams.html
+http://developer.android.com/reference/android/widget/AbsoluteLayout.LayoutParams.html
+
+http://developer.android.com/reference/android/widget/AbsSeekBar.html
+http://developer.android.com/reference/android/widget/AbsSpinner.html
+
+http://developer.android.com/reference/android/widget/AdapterView.html
+http://developer.android.com/reference/android/widget/AnalogClock.html
+
+http://developer.android.com/reference/android/widget/ArrayAdapter.html
+http://developer.android.com/reference/android/widget/BaseAdapter.html
+
+http://developer.android.com/reference/android/widget/BaseExpandableListAdapter.html
+http://developer.android.com/reference/android/widget/CheckedTextView.html
+
+http://developer.android.com/reference/android/widget/Chronometer.html
+http://developer.android.com/reference/android/widget/CompoundButton.html
+
+http://developer.android.com/reference/android/widget/CursorAdapter.html
+http://developer.android.com/reference/android/widget/CursorTreeAdapter.html
+
+http://developer.android.com/reference/android/widget/DatePicker.html
+http://developer.android.com/reference/android/widget/DialerFilter.html
+
+http://developer.android.com/reference/android/widget/DigitalClock.html
+http://developer.android.com/reference/android/widget/ExpandableListView.html
+
+http://developer.android.com/reference/android/widget/ExpandableListView.ExpandableListContextMenuInfo.html
+
+http://developer.android.com/reference/android/widget/Filter.html
+http://developer.android.com/reference/android/widget/Filter.FilterResults.html
+
+http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/Gallery.LayoutParams.html
+
+http://developer.android.com/reference/android/widget/GridView.html
+http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html
+
+http://developer.android.com/reference/android/widget/ImageButton.html
+http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
+
+http://developer.android.com/reference/android/widget/ListView.FixedViewInfo.html
+http://developer.android.com/reference/android/widget/MediaController.html
+
+http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html
+http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.CommaTokenizer.html
+
+http://developer.android.com/reference/android/widget/PopupWindow.html
+http://developer.android.com/reference/android/widget/ProgressBar.html
+
+http://developer.android.com/reference/android/widget/RadioGroup.html
+http://developer.android.com/reference/android/widget/RadioGroup.LayoutParams.html
+
+http://developer.android.com/reference/android/widget/RatingBar.html
+http://developer.android.com/reference/android/widget/RelativeLayout.html
+
+http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/RemoteViews.html
+
+http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html
+http://developer.android.com/reference/android/widget/ResourceCursorTreeAdapter.html
+
+http://developer.android.com/reference/android/widget/Scroller.html
+http://developer.android.com/reference/android/widget/ScrollView.html
+
+http://developer.android.com/reference/android/widget/SeekBar.html
+http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
+
+http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html
+http://developer.android.com/reference/android/widget/TabHost.html
+
+http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
+http://developer.android.com/reference/android/widget/TableLayout.html
+
+http://developer.android.com/reference/android/widget/TableLayout.LayoutParams.html
+http://developer.android.com/reference/android/widget/TableRow.html
+
+http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
+http://developer.android.com/reference/android/widget/TabWidget.html
+
+http://developer.android.com/reference/android/widget/TextView.SavedState.html
+http://developer.android.com/reference/android/widget/TimePicker.html
+
+http://developer.android.com/reference/android/widget/Toast.html
+http://developer.android.com/reference/android/widget/ToggleButton.html
+
+http://developer.android.com/reference/android/widget/TwoLineListItem.html
+http://developer.android.com/reference/android/widget/VideoView.html
+
+http://developer.android.com/reference/android/widget/ViewAnimator.html
+http://developer.android.com/reference/android/widget/ViewFlipper.html
+
+http://developer.android.com/reference/android/widget/ViewSwitcher.html
+http://developer.android.com/reference/android/widget/ZoomButton.html
+
+http://developer.android.com/reference/android/widget/ZoomControls.html
+http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
+
+http://developer.android.com/reference/android/widget/TextView.BufferType.html
+http://developer.android.com/reference/android/widget/RemoteViews.ActionException.html
+
+http://developer.android.com/reference/java/lang/RuntimeException.html
+http://developer.android.com/reference/android/view/ViewGroup.OnHierarchyChangeListener.html
+
+http://developer.android.com/reference/android/view/TouchDelegate.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.html
+
+http://developer.android.com/reference/android/view/ViewManager.html
+http://developer.android.com/reference/android/view/Gravity.html
+
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
+http://developer.android.com/reference/java/awt/font/NumericShaper.html
+
+http://developer.android.com/reference/java/awt/font/TextAttribute.html
+http://developer.android.com/reference/android/text/TextWatcher.html
+
+http://developer.android.com/reference/android/text/method/MovementMethod.html
+http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
+
+http://developer.android.com/reference/android/text/InputFilter.html
+http://developer.android.com/reference/android/content/res/ColorStateList.html
+
+http://developer.android.com/reference/android/text/method/KeyListener.html
+http://developer.android.com/reference/android/text/Layout.html
+
+http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
+http://developer.android.com/reference/android/text/TextPaint.html
+
+http://developer.android.com/reference/android/text/Selection.html
+http://developer.android.com/reference/android/text/method/TransformationMethod.html
+
+http://developer.android.com/reference/android/text/style/URLSpan.html
+http://developer.android.com/reference/android/text/util/Linkify.html
+
+http://developer.android.com/reference/android/text/Editable.Factory.html
+http://developer.android.com/reference/android/text/Spannable.Factory.html
+
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html
+http://developer.android.com/reference/java/security/BasicPermission.html
+
+http://developer.android.com/reference/java/security/Guard.html
+http://developer.android.com/reference/java/security/Permission.html
+
+http://developer.android.com/reference/java/security/PermissionCollection.html
+http://developer.android.com/reference/java/util/Locale.html
+
+http://developer.android.com/reference/java/lang/NullPointerException.html
+http://developer.android.com/reference/org/apache/http/FormattedHeader.html
+
+http://developer.android.com/reference/org/apache/http/Header.html
+http://developer.android.com/reference/org/apache/http/HeaderElement.html
+
+http://developer.android.com/reference/org/apache/http/HeaderElementIterator.html
+http://developer.android.com/reference/org/apache/http/HeaderIterator.html
+
+http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/HttpConnection.html
+
+http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
+http://developer.android.com/reference/org/apache/http/HttpEntity.html
+
+http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
+http://developer.android.com/reference/org/apache/http/HttpMessage.html
+
+http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
+http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
+
+http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
+http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
+
+http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/HttpStatus.html
+
+http://developer.android.com/reference/org/apache/http/NameValuePair.html
+http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
+
+http://developer.android.com/reference/org/apache/http/RequestLine.html
+http://developer.android.com/reference/org/apache/http/StatusLine.html
+
+http://developer.android.com/reference/org/apache/http/TokenIterator.html
+http://developer.android.com/reference/org/apache/http/HttpVersion.html
+
+http://developer.android.com/reference/org/apache/http/ProtocolVersion.html
+http://developer.android.com/reference/org/apache/http/ConnectionClosedException.html
+
+http://developer.android.com/reference/org/apache/http/MalformedChunkCodingException.html
+http://developer.android.com/reference/org/apache/http/MethodNotSupportedException.html
+
+http://developer.android.com/reference/org/apache/http/NoHttpResponseException.html
+http://developer.android.com/reference/org/apache/http/ParseException.html
+
+http://developer.android.com/reference/org/apache/http/ProtocolException.html
+http://developer.android.com/reference/org/apache/http/UnsupportedHttpVersionException.html
+
+http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
+
+http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
+http://developer.android.com/reference/java/lang/Enum.html
+
+http://developer.android.com/reference/java/lang/Comparable.html
+http://developer.android.com/reference/javax/crypto/SecretKey.html
+
+http://developer.android.com/reference/javax/crypto/Cipher.html
+http://developer.android.com/reference/javax/crypto/CipherInputStream.html
+
+http://developer.android.com/reference/javax/crypto/CipherOutputStream.html
+http://developer.android.com/reference/javax/crypto/CipherSpi.html
+
+http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
+http://developer.android.com/reference/javax/crypto/ExemptionMechanism.html
+
+http://developer.android.com/reference/javax/crypto/ExemptionMechanismSpi.html
+http://developer.android.com/reference/javax/crypto/KeyAgreement.html
+
+http://developer.android.com/reference/javax/crypto/KeyAgreementSpi.html
+http://developer.android.com/reference/javax/crypto/KeyGenerator.html
+
+http://developer.android.com/reference/javax/crypto/KeyGeneratorSpi.html
+http://developer.android.com/reference/javax/crypto/Mac.html
+
+http://developer.android.com/reference/javax/crypto/MacSpi.html
+http://developer.android.com/reference/javax/crypto/NullCipher.html
+
+http://developer.android.com/reference/javax/crypto/SealedObject.html
+http://developer.android.com/reference/javax/crypto/SecretKeyFactory.html
+
+http://developer.android.com/reference/javax/crypto/SecretKeyFactorySpi.html
+http://developer.android.com/reference/javax/crypto/BadPaddingException.html
+
+http://developer.android.com/reference/javax/crypto/ExemptionMechanismException.html
+http://developer.android.com/reference/javax/crypto/IllegalBlockSizeException.html
+
+http://developer.android.com/reference/javax/crypto/NoSuchPaddingException.html
+http://developer.android.com/reference/javax/crypto/ShortBufferException.html
+
+http://developer.android.com/reference/javax/crypto/package-descr.html
+http://developer.android.com/reference/android/database/CrossProcessCursor.html
+
+http://developer.android.com/reference/android/database/AbstractCursor.html
+http://developer.android.com/reference/android/database/AbstractCursor.SelfContentObserver.html
+
+http://developer.android.com/reference/android/database/AbstractWindowedCursor.html
+http://developer.android.com/reference/android/database/CharArrayBuffer.html
+
+http://developer.android.com/reference/android/database/ContentObservable.html
+http://developer.android.com/reference/android/database/ContentObserver.html
+
+http://developer.android.com/reference/android/database/CursorJoiner.html
+http://developer.android.com/reference/android/database/CursorWindow.html
+
+http://developer.android.com/reference/android/database/CursorWrapper.html
+http://developer.android.com/reference/android/database/DatabaseUtils.html
+
+http://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.html
+http://developer.android.com/reference/android/database/DataSetObservable.html
+
+http://developer.android.com/reference/android/database/DataSetObserver.html
+http://developer.android.com/reference/android/database/MatrixCursor.html
+
+http://developer.android.com/reference/android/database/MatrixCursor.RowBuilder.html
+http://developer.android.com/reference/android/database/MergeCursor.html
+
+http://developer.android.com/reference/android/database/Observable.html
+http://developer.android.com/reference/android/database/CursorJoiner.Result.html
+
+http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html
+http://developer.android.com/reference/android/database/SQLException.html
+
+http://developer.android.com/reference/android/database/StaleDataException.html
+http://developer.android.com/reference/android/database/package-descr.html
+
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
+
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
+
+http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
+http://developer.android.com/reference/org/apache/http/conn/EofSensorWatcher.html
+
+http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
+http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
+
+http://developer.android.com/reference/org/apache/http/conn/BasicEofSensorWatcher.html
+http://developer.android.com/reference/org/apache/http/conn/BasicManagedEntity.html
+
+http://developer.android.com/reference/org/apache/http/conn/EofSensorInputStream.html
+http://developer.android.com/reference/org/apache/http/conn/MultihomePlainSocketFactory.html
+
+http://developer.android.com/reference/org/apache/http/conn/ConnectionPoolTimeoutException.html
+
+http://developer.android.com/reference/org/apache/http/conn/ConnectTimeoutException.html
+http://developer.android.com/reference/org/apache/http/conn/HttpHostConnectException.html
+
+http://developer.android.com/reference/java/nio/charset/Charset.html
+http://developer.android.com/reference/java/nio/charset/CharsetDecoder.html
+
+http://developer.android.com/reference/java/nio/charset/CharsetEncoder.html
+http://developer.android.com/reference/java/nio/charset/CoderResult.html
+
+http://developer.android.com/reference/java/nio/charset/CodingErrorAction.html
+http://developer.android.com/reference/java/nio/charset/CharacterCodingException.html
+
+http://developer.android.com/reference/java/nio/charset/IllegalCharsetNameException.html
+http://developer.android.com/reference/java/nio/charset/MalformedInputException.html
+
+http://developer.android.com/reference/java/nio/charset/UnmappableCharacterException.html
+http://developer.android.com/reference/java/nio/charset/UnsupportedCharsetException.html
+
+http://developer.android.com/reference/java/nio/charset/CoderMalfunctionError.html
+http://developer.android.com/reference/java/nio/charset/package-descr.html
+
+http://developer.android.com/reference/com/google/android/maps/MapView.html
+http://developer.android.com/reference/com/google/android/maps/MapActivity.html
+
+http://developer.android.com/guide/topics/location/geo/mapkey.html
+http://developer.android.com/reference/com/google/android/maps/MapController.html
+
+http://developer.android.com/reference/com/google/android/maps/ItemizedOverlay.html
+http://developer.android.com/reference/com/google/android/maps/Overlay.html
+
+http://developer.android.com/reference/java/lang/CloneNotSupportedException.html
+http://developer.android.com/reference/java/security/AlgorithmParameters.html
+
+http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
+http://developer.android.com/reference/java/security/Key.html
+
+http://developer.android.com/reference/java/security/Provider.html
+http://developer.android.com/reference/java/security/NoSuchAlgorithmException.html
+
+http://developer.android.com/reference/java/security/NoSuchProviderException.html
+http://developer.android.com/reference/java/security/InvalidKeyException.html
+
+http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
+http://developer.android.com/reference/android/webkit/DownloadListener.html
+
+http://developer.android.com/reference/android/webkit/Plugin.PreferencesClickHandler.html
+http://developer.android.com/reference/android/webkit/UrlInterceptHandler.html
+
+http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
+http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
+
+http://developer.android.com/reference/android/webkit/CacheManager.html
+http://developer.android.com/reference/android/webkit/CacheManager.CacheResult.html
+
+http://developer.android.com/reference/android/webkit/CookieManager.html
+http://developer.android.com/reference/android/webkit/CookieSyncManager.html
+
+http://developer.android.com/reference/android/webkit/DateSorter.html
+http://developer.android.com/reference/android/webkit/HttpAuthHandler.html
+
+http://developer.android.com/reference/android/webkit/JsPromptResult.html
+http://developer.android.com/reference/android/webkit/JsResult.html
+
+http://developer.android.com/reference/android/webkit/MimeTypeMap.html
+http://developer.android.com/reference/android/webkit/Plugin.html
+
+http://developer.android.com/reference/android/webkit/PluginList.html
+http://developer.android.com/reference/android/webkit/SslErrorHandler.html
+
+http://developer.android.com/reference/android/webkit/UrlInterceptRegistry.html
+http://developer.android.com/reference/android/webkit/URLUtil.html
+
+http://developer.android.com/reference/android/webkit/WebBackForwardList.html
+http://developer.android.com/reference/android/webkit/WebChromeClient.html
+
+http://developer.android.com/reference/android/webkit/WebHistoryItem.html
+http://developer.android.com/reference/android/webkit/WebIconDatabase.html
+
+http://developer.android.com/reference/android/webkit/WebSettings.html
+http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
+
+http://developer.android.com/reference/android/webkit/WebView.WebViewTransport.html
+http://developer.android.com/reference/android/webkit/WebViewClient.html
+
+http://developer.android.com/reference/android/webkit/WebViewDatabase.html
+http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html
+
+http://developer.android.com/reference/android/webkit/WebSettings.RenderPriority.html
+http://developer.android.com/reference/android/webkit/WebSettings.TextSize.html
+
+http://developer.android.com/reference/android/webkit/package-descr.html
+http://developer.android.com/reference/java/util/Map.html
+
+http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
+
+http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
+
+http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
+http://developer.android.com/reference/android/graphics/drawable/package-descr.html
+
+http://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html
+http://developer.android.com/reference/android/content/pm/ActivityInfo.html
+
+http://developer.android.com/reference/java/lang/InstantiationException.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceView.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
+
+http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/Callable.html
+
+http://developer.android.com/reference/java/util/concurrent/CompletionService.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
+
+http://developer.android.com/reference/java/util/concurrent/Delayed.html
+http://developer.android.com/reference/java/util/concurrent/Executor.html
+
+http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/Future.html
+
+http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
+
+http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
+http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
+
+http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
+
+http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
+
+http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
+http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
+
+http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
+http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
+
+http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
+http://developer.android.com/reference/java/util/concurrent/Exchanger.html
+
+http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
+http://developer.android.com/reference/java/util/concurrent/Executors.html
+
+http://developer.android.com/reference/java/util/concurrent/FutureTask.html
+http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
+
+http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
+
+http://developer.android.com/reference/java/util/concurrent/Semaphore.html
+http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
+
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
+
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
+
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
+
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
+
+http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
+http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
+
+http://developer.android.com/reference/java/util/concurrent/CancellationException.html
+http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
+
+http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
+http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
+
+http://developer.android.com/reference/java/util/concurrent/package-descr.html
+http://developer.android.com/reference/java/util/Queue.html
+
+http://developer.android.com/reference/java/util/PriorityQueue.html
+http://developer.android.com/reference/android/telephony/CellLocation.html
+
+http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
+
+http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html
+http://developer.android.com/reference/android/telephony/PhoneStateListener.html
+
+http://developer.android.com/reference/android/telephony/ServiceState.html
+http://developer.android.com/reference/java/lang/Appendable.html
+
+http://developer.android.com/reference/java/lang/Iterable.html
+http://developer.android.com/reference/java/lang/Readable.html
+
+http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html
+http://developer.android.com/reference/java/lang/Boolean.html
+
+http://developer.android.com/reference/java/lang/Character.html
+http://developer.android.com/reference/java/lang/Character.Subset.html
+
+http://developer.android.com/reference/java/lang/Character.UnicodeBlock.html
+http://developer.android.com/reference/java/lang/Compiler.html
+
+http://developer.android.com/reference/java/lang/Double.html
+http://developer.android.com/reference/java/lang/Float.html
+
+http://developer.android.com/reference/java/lang/InheritableThreadLocal.html
+http://developer.android.com/reference/java/lang/Long.html
+
+http://developer.android.com/reference/java/lang/Math.html
+http://developer.android.com/reference/java/lang/Number.html
+
+http://developer.android.com/reference/java/lang/Package.html
+http://developer.android.com/reference/java/lang/Process.html
+
+http://developer.android.com/reference/java/lang/ProcessBuilder.html
+http://developer.android.com/reference/java/lang/Runtime.html
+
+http://developer.android.com/reference/java/lang/RuntimePermission.html
+http://developer.android.com/reference/java/lang/SecurityManager.html
+
+http://developer.android.com/reference/java/lang/Short.html
+http://developer.android.com/reference/java/lang/StrictMath.html
+
+http://developer.android.com/reference/java/lang/StringBuffer.html
+http://developer.android.com/reference/java/lang/StringBuilder.html
+
+http://developer.android.com/reference/java/lang/System.html
+http://developer.android.com/reference/java/lang/Thread.html
+
+http://developer.android.com/reference/java/lang/ThreadGroup.html
+http://developer.android.com/reference/java/lang/ThreadLocal.html
+
+http://developer.android.com/reference/java/lang/Void.html
+http://developer.android.com/reference/java/lang/Thread.State.html
+
+http://developer.android.com/reference/java/lang/ArithmeticException.html
+http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html
+
+http://developer.android.com/reference/java/lang/ArrayStoreException.html
+http://developer.android.com/reference/java/lang/ClassCastException.html
+
+http://developer.android.com/reference/java/lang/EnumConstantNotPresentException.html
+http://developer.android.com/reference/java/lang/IllegalMonitorStateException.html
+
+http://developer.android.com/reference/java/lang/IllegalStateException.html
+http://developer.android.com/reference/java/lang/IllegalThreadStateException.html
+
+http://developer.android.com/reference/java/lang/InterruptedException.html
+http://developer.android.com/reference/java/lang/NegativeArraySizeException.html
+
+http://developer.android.com/reference/java/lang/NoSuchFieldException.html
+http://developer.android.com/reference/java/lang/NoSuchMethodException.html
+
+http://developer.android.com/reference/java/lang/NumberFormatException.html
+http://developer.android.com/reference/java/lang/StringIndexOutOfBoundsException.html
+
+http://developer.android.com/reference/java/lang/TypeNotPresentException.html
+http://developer.android.com/reference/java/lang/UnsupportedOperationException.html
+
+http://developer.android.com/reference/java/lang/AbstractMethodError.html
+http://developer.android.com/reference/java/lang/AssertionError.html
+
+http://developer.android.com/reference/java/lang/ClassCircularityError.html
+http://developer.android.com/reference/java/lang/ClassFormatError.html
+
+http://developer.android.com/reference/java/lang/Error.html
+http://developer.android.com/reference/java/lang/ExceptionInInitializerError.html
+
+http://developer.android.com/reference/java/lang/IllegalAccessError.html
+http://developer.android.com/reference/java/lang/IncompatibleClassChangeError.html
+
+http://developer.android.com/reference/java/lang/InstantiationError.html
+http://developer.android.com/reference/java/lang/InternalError.html
+
+http://developer.android.com/reference/java/lang/LinkageError.html
+http://developer.android.com/reference/java/lang/NoClassDefFoundError.html
+
+http://developer.android.com/reference/java/lang/NoSuchFieldError.html
+http://developer.android.com/reference/java/lang/NoSuchMethodError.html
+
+http://developer.android.com/reference/java/lang/OutOfMemoryError.html
+http://developer.android.com/reference/java/lang/StackOverflowError.html
+
+http://developer.android.com/reference/java/lang/ThreadDeath.html
+http://developer.android.com/reference/java/lang/UnknownError.html
+
+http://developer.android.com/reference/java/lang/UnsatisfiedLinkError.html
+http://developer.android.com/reference/java/lang/UnsupportedClassVersionError.html
+
+http://developer.android.com/reference/java/lang/VerifyError.html
+http://developer.android.com/reference/java/lang/VirtualMachineError.html
+
+http://developer.android.com/reference/java/nio/ByteBuffer.html
+http://developer.android.com/reference/java/util/Calendar.html
+
+http://developer.android.com/reference/java/nio/CharBuffer.html
+http://developer.android.com/reference/android/preference/CheckBoxPreference.html
+
+http://developer.android.com/reference/java/sql/Date.html
+http://developer.android.com/reference/android/preference/DialogPreference.html
+
+http://developer.android.com/reference/java/nio/DoubleBuffer.html
+http://developer.android.com/reference/android/preference/EditTextPreference.html
+
+http://developer.android.com/reference/java/lang/annotation/ElementType.html
+http://developer.android.com/reference/java/nio/FloatBuffer.html
+
+http://developer.android.com/reference/java/util/Formatter.BigDecimalLayoutForm.html
+http://developer.android.com/reference/java/util/GregorianCalendar.html
+
+http://developer.android.com/reference/java/nio/IntBuffer.html
+http://developer.android.com/reference/java/security/KeyRep.Type.html
+
+http://developer.android.com/reference/android/text/Layout.Alignment.html
+http://developer.android.com/reference/android/preference/ListPreference.html
+
+http://developer.android.com/reference/java/nio/LongBuffer.html
+http://developer.android.com/reference/com/google/android/maps/MapView.ReticleDrawMode.html
+
+http://developer.android.com/reference/java/nio/MappedByteBuffer.html
+http://developer.android.com/reference/java/io/ObjectStreamField.html
+
+http://developer.android.com/reference/android/preference/Preference.html
+http://developer.android.com/reference/android/preference/PreferenceCategory.html
+
+http://developer.android.com/reference/android/preference/PreferenceGroup.html
+http://developer.android.com/reference/android/preference/PreferenceScreen.html
+
+http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
+http://developer.android.com/reference/android/preference/RingtonePreference.html
+
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.LayerType.html
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.TunnelType.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.HandshakeStatus.html
+http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.Status.html
+
+http://developer.android.com/reference/java/nio/ShortBuffer.html
+http://developer.android.com/reference/android/telephony/gsm/SmsMessage.MessageClass.html
+
+http://developer.android.com/reference/android/net/wifi/SupplicantState.html
+http://developer.android.com/reference/android/text/method/TextKeyListener.Capitalize.html
+
+http://developer.android.com/reference/java/sql/Time.html
+http://developer.android.com/reference/java/sql/Timestamp.html
+
+http://developer.android.com/reference/java/util/UUID.html
+http://developer.android.com/reference/android/view/ViewDebug.HierarchyTraceType.html
+
+http://developer.android.com/reference/android/view/ViewDebug.RecyclerTraceType.html
+http://developer.android.com/reference/android/util/Xml.Encoding.html
+
+http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
+http://developer.android.com/reference/org/apache/http/impl/auth/AuthSchemeBase.html
+
+http://developer.android.com/reference/org/apache/http/impl/auth/BasicScheme.html
+http://developer.android.com/reference/org/apache/http/impl/auth/BasicSchemeFactory.html
+
+http://developer.android.com/reference/org/apache/http/impl/auth/DigestScheme.html
+http://developer.android.com/reference/org/apache/http/impl/auth/DigestSchemeFactory.html
+
+http://developer.android.com/reference/org/apache/http/impl/auth/NTLMScheme.html
+http://developer.android.com/reference/org/apache/http/impl/auth/RFC2617Scheme.html
+
+http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngineException.html
+http://developer.android.com/reference/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.html
+
+http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
+
+http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
+
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
+
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
+
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
+
+http://developer.android.com/reference/android/preference/Preference.BaseSavedState.html
+http://developer.android.com/reference/android/preference/PreferenceManager.html
+
+http://developer.android.com/reference/android/util/Printer.html
+http://developer.android.com/reference/android/util/Config.html
+
+http://developer.android.com/reference/android/util/DebugUtils.html
+http://developer.android.com/reference/android/util/DisplayMetrics.html
+
+http://developer.android.com/reference/android/util/EventLogTags.html
+http://developer.android.com/reference/android/util/EventLogTags.Description.html
+
+http://developer.android.com/reference/android/util/FloatMath.html
+http://developer.android.com/reference/android/util/LogPrinter.html
+
+http://developer.android.com/reference/android/util/MonthDisplayHelper.html
+http://developer.android.com/reference/android/util/PrintWriterPrinter.html
+
+http://developer.android.com/reference/android/util/SparseBooleanArray.html
+http://developer.android.com/reference/android/util/SparseIntArray.html
+
+http://developer.android.com/reference/android/util/StateSet.html
+http://developer.android.com/reference/android/util/StringBuilderPrinter.html
+
+http://developer.android.com/reference/android/util/TimeUtils.html
+http://developer.android.com/reference/android/util/TimingLogger.html
+
+http://developer.android.com/reference/android/util/TypedValue.html
+http://developer.android.com/reference/android/util/Xml.html
+
+http://developer.android.com/reference/android/util/AndroidException.html
+http://developer.android.com/reference/android/util/AndroidRuntimeException.html
+
+http://developer.android.com/reference/android/util/TimeFormatException.html
+http://developer.android.com/reference/android/content/res/XmlResourceParser.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html
+http://developer.android.com/reference/javax/net/SocketFactory.html
+
+http://developer.android.com/reference/java/security/KeyManagementException.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeader.html
+
+http://developer.android.com/reference/org/apache/http/message/BufferedHeader.html
+http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html
+
+http://developer.android.com/reference/android/view/LayoutInflater.Filter.html
+http://developer.android.com/reference/android/view/MenuItem.OnMenuItemClickListener.html
+
+http://developer.android.com/reference/android/view/SurfaceHolder.html
+http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html
+
+http://developer.android.com/reference/android/view/ViewStub.OnInflateListener.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalFocusChangeListener.html
+
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html
+
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnTouchModeChangeListener.html
+
+http://developer.android.com/reference/android/view/AbsSavedState.html
+http://developer.android.com/reference/android/view/Display.html
+
+http://developer.android.com/reference/android/view/FocusFinder.html
+http://developer.android.com/reference/android/view/GestureDetector.html
+
+http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
+
+http://developer.android.com/reference/android/view/KeyCharacterMap.html
+http://developer.android.com/reference/android/view/KeyCharacterMap.KeyData.html
+
+http://developer.android.com/reference/android/view/OrientationListener.html
+http://developer.android.com/reference/android/view/SoundEffectConstants.html
+
+http://developer.android.com/reference/android/view/Surface.html
+http://developer.android.com/reference/android/view/VelocityTracker.html
+
+http://developer.android.com/reference/android/view/View.BaseSavedState.html
+http://developer.android.com/reference/android/view/ViewConfiguration.html
+
+http://developer.android.com/reference/android/view/ViewDebug.html
+http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
+
+http://developer.android.com/reference/android/view/ViewStub.html
+http://developer.android.com/reference/android/view/InflateException.html
+
+http://developer.android.com/reference/android/view/Surface.OutOfResourcesException.html
+http://developer.android.com/reference/android/view/SurfaceHolder.BadSurfaceTypeException.html
+
+http://developer.android.com/reference/android/view/WindowManager.BadTokenException.html
+http://developer.android.com/reference/org/apache/http/entity/AbstractHttpEntity.html
+
+http://developer.android.com/reference/org/apache/http/entity/BasicHttpEntity.html
+http://developer.android.com/reference/org/apache/http/entity/BufferedHttpEntity.html
+
+http://developer.android.com/reference/org/apache/http/entity/ByteArrayEntity.html
+http://developer.android.com/reference/org/apache/http/entity/EntityTemplate.html
+
+http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
+http://developer.android.com/reference/org/apache/http/entity/HttpEntityWrapper.html
+
+http://developer.android.com/reference/org/apache/http/entity/InputStreamEntity.html
+http://developer.android.com/reference/org/apache/http/entity/SerializableEntity.html
+
+http://developer.android.com/reference/org/apache/http/entity/StringEntity.html
+http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong.html
+
+http://developer.android.com/reference/java/util/Collection.html
+http://developer.android.com/reference/java/util/Comparator.html
+
+http://developer.android.com/reference/java/util/Enumeration.html
+http://developer.android.com/reference/java/util/Formattable.html
+
+http://developer.android.com/reference/java/util/Iterator.html
+http://developer.android.com/reference/java/util/ListIterator.html
+
+http://developer.android.com/reference/java/util/Map.Entry.html
+http://developer.android.com/reference/java/util/Observer.html
+
+http://developer.android.com/reference/java/util/RandomAccess.html
+http://developer.android.com/reference/java/util/SortedMap.html
+
+http://developer.android.com/reference/java/util/SortedSet.html
+http://developer.android.com/reference/java/util/AbstractCollection.html
+
+http://developer.android.com/reference/java/util/AbstractList.html
+http://developer.android.com/reference/java/util/AbstractMap.html
+
+http://developer.android.com/reference/java/util/AbstractQueue.html
+http://developer.android.com/reference/java/util/AbstractSequentialList.html
+
+http://developer.android.com/reference/java/util/AbstractSet.html
+http://developer.android.com/reference/java/util/Arrays.html
+
+http://developer.android.com/reference/java/util/BitSet.html
+http://developer.android.com/reference/java/util/Collections.html
+
+http://developer.android.com/reference/java/util/Currency.html
+http://developer.android.com/reference/java/util/Dictionary.html
+
+http://developer.android.com/reference/java/util/EnumMap.html
+http://developer.android.com/reference/java/util/EnumSet.html
+
+http://developer.android.com/reference/java/util/EventListenerProxy.html
+http://developer.android.com/reference/java/util/EventObject.html
+
+http://developer.android.com/reference/java/util/FormattableFlags.html
+http://developer.android.com/reference/java/util/HashMap.html
+
+http://developer.android.com/reference/java/util/HashSet.html
+http://developer.android.com/reference/java/util/Hashtable.html
+
+http://developer.android.com/reference/java/util/IdentityHashMap.html
+http://developer.android.com/reference/java/util/LinkedHashMap.html
+
+http://developer.android.com/reference/java/util/LinkedHashSet.html
+http://developer.android.com/reference/java/util/LinkedList.html
+
+http://developer.android.com/reference/java/util/ListResourceBundle.html
+http://developer.android.com/reference/java/util/Observable.html
+
+http://developer.android.com/reference/java/util/PropertyPermission.html
+http://developer.android.com/reference/java/util/PropertyResourceBundle.html
+
+http://developer.android.com/reference/java/util/Random.html
+http://developer.android.com/reference/java/util/ResourceBundle.html
+
+http://developer.android.com/reference/java/util/Scanner.html
+http://developer.android.com/reference/java/util/SimpleTimeZone.html
+
+http://developer.android.com/reference/java/util/Stack.html
+http://developer.android.com/reference/java/util/StringTokenizer.html
+
+http://developer.android.com/reference/java/util/Timer.html
+http://developer.android.com/reference/java/util/TimerTask.html
+
+http://developer.android.com/reference/java/util/TimeZone.html
+http://developer.android.com/reference/java/util/TreeMap.html
+
+http://developer.android.com/reference/java/util/TreeSet.html
+http://developer.android.com/reference/java/util/Vector.html
+
+http://developer.android.com/reference/java/util/WeakHashMap.html
+http://developer.android.com/reference/java/util/ConcurrentModificationException.html
+
+http://developer.android.com/reference/java/util/DuplicateFormatFlagsException.html
+http://developer.android.com/reference/java/util/EmptyStackException.html
+
+http://developer.android.com/reference/java/util/FormatFlagsConversionMismatchException.html
+http://developer.android.com/reference/java/util/FormatterClosedException.html
+
+http://developer.android.com/reference/java/util/IllegalFormatCodePointException.html
+http://developer.android.com/reference/java/util/IllegalFormatConversionException.html
+
+http://developer.android.com/reference/java/util/IllegalFormatException.html
+http://developer.android.com/reference/java/util/IllegalFormatFlagsException.html
+
+http://developer.android.com/reference/java/util/IllegalFormatPrecisionException.html
+http://developer.android.com/reference/java/util/IllegalFormatWidthException.html
+
+http://developer.android.com/reference/java/util/InputMismatchException.html
+http://developer.android.com/reference/java/util/InvalidPropertiesFormatException.html
+
+http://developer.android.com/reference/java/util/MissingFormatArgumentException.html
+http://developer.android.com/reference/java/util/MissingFormatWidthException.html
+
+http://developer.android.com/reference/java/util/MissingResourceException.html
+http://developer.android.com/reference/java/util/NoSuchElementException.html
+
+http://developer.android.com/reference/java/util/TooManyListenersException.html
+http://developer.android.com/reference/java/util/UnknownFormatConversionException.html
+
+http://developer.android.com/reference/java/util/UnknownFormatFlagsException.html
+http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
+
+http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
+http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
+
+http://developer.android.com/reference/org/apache/http/params/AbstractHttpParams.html
+http://developer.android.com/reference/org/apache/http/params/BasicHttpParams.html
+
+http://developer.android.com/reference/org/apache/http/params/DefaultedHttpParams.html
+http://developer.android.com/reference/org/apache/http/params/HttpAbstractParamBean.html
+
+http://developer.android.com/reference/org/apache/http/params/HttpConnectionParamBean.html
+http://developer.android.com/reference/org/apache/http/params/HttpConnectionParams.html
+
+http://developer.android.com/reference/org/apache/http/params/HttpProtocolParamBean.html
+http://developer.android.com/reference/org/apache/http/params/HttpProtocolParams.html
+
+http://developer.android.com/reference/org/apache/http/params/package-descr.html
+http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
+
+http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
+http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
+
+http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
+
+http://developer.android.com/reference/android/content/res/Resources.NotFoundException.html
+http://developer.android.com/reference/java/util/zip/ZipEntry.html
+
+http://developer.android.com/reference/java/security/cert/Certificate.html
+http://developer.android.com/reference/java/security/CodeSigner.html
+
+http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
+http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
+
+http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
+http://developer.android.com/reference/android/media/RingtoneManager.html
+
+http://developer.android.com/reference/android/content/DialogInterface.html
+http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
+
+http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
+
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRouteDirector.html
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
+
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
+http://developer.android.com/reference/org/apache/http/conn/routing/BasicRouteDirector.html
+
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteTracker.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
+
+http://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory.html
+http://developer.android.com/reference/java/nio/channels/Channel.html
+
+http://developer.android.com/reference/org/apache/http/message/LineParser.html
+http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
+
+http://developer.android.com/reference/java/security/AuthProvider.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie2.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderElement.html
+
+http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
+http://developer.android.com/reference/org/apache/http/message/BasicNameValuePair.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicRequestLine.html
+http://developer.android.com/reference/org/apache/http/message/BasicStatusLine.html
+
+http://developer.android.com/reference/java/security/cert/CRLSelector.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
+
+http://developer.android.com/reference/java/security/cert/CertPathParameters.html
+http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
+
+http://developer.android.com/reference/java/security/cert/CertSelector.html
+http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
+
+http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
+http://developer.android.com/reference/org/apache/http/message/HeaderGroup.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
+http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
+
+http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
+
+http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
+
+http://developer.android.com/reference/java/security/cert/PKIXParameters.html
+http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
+
+http://developer.android.com/reference/java/security/cert/X509CertSelector.html
+http://developer.android.com/reference/android/text/Editable.html
+http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
+
+http://developer.android.com/reference/java/security/SecureRandom.html
+http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
+
+http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
+http://developer.android.com/reference/javax/net/ssl/KeyManager.html
+
+http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
+http://developer.android.com/reference/javax/net/ssl/SSLSession.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
+http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
+
+http://developer.android.com/reference/javax/net/ssl/TrustManager.html
+http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
+
+http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
+http://developer.android.com/reference/javax/net/ssl/CertPathTrustManagerParameters.html
+
+http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedEvent.html
+http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
+
+http://developer.android.com/reference/javax/net/ssl/KeyManagerFactory.html
+http://developer.android.com/reference/javax/net/ssl/KeyManagerFactorySpi.html
+
+http://developer.android.com/reference/javax/net/ssl/KeyStoreBuilderParameters.html
+http://developer.android.com/reference/javax/net/ssl/SSLContext.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLContextSpi.html
+http://developer.android.com/reference/javax/net/ssl/SSLEngine.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.html
+http://developer.android.com/reference/javax/net/ssl/SSLPermission.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLServerSocket.html
+http://developer.android.com/reference/javax/net/ssl/SSLServerSocketFactory.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingEvent.html
+http://developer.android.com/reference/javax/net/ssl/SSLSocket.html
+
+http://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html
+http://developer.android.com/reference/javax/net/ssl/TrustManagerFactorySpi.html
+
+http://developer.android.com/reference/javax/net/ssl/X509ExtendedKeyManager.html
+http://developer.android.com/reference/javax/net/ssl/SSLException.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLHandshakeException.html
+http://developer.android.com/reference/javax/net/ssl/SSLKeyException.html
+
+http://developer.android.com/reference/javax/net/ssl/SSLPeerUnverifiedException.html
+http://developer.android.com/reference/javax/net/ssl/SSLProtocolException.html
+
+http://developer.android.com/reference/javax/crypto/spec/DESedeKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/DESKeySpec.html
+
+http://developer.android.com/reference/javax/crypto/spec/DHGenParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/DHParameterSpec.html
+
+http://developer.android.com/reference/javax/crypto/spec/DHPrivateKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/DHPublicKeySpec.html
+
+http://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/OAEPParameterSpec.html
+
+http://developer.android.com/reference/javax/crypto/spec/PBEKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/PBEParameterSpec.html
+
+http://developer.android.com/reference/javax/crypto/spec/PSource.html
+http://developer.android.com/reference/javax/crypto/spec/PSource.PSpecified.html
+
+http://developer.android.com/reference/javax/crypto/spec/RC2ParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/RC5ParameterSpec.html
+
+http://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/package-descr.html
+
+http://developer.android.com/reference/android/text/method/ArrowKeyMovementMethod.html
+http://developer.android.com/reference/android/text/method/BaseKeyListener.html
+
+http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
+http://developer.android.com/reference/android/text/method/DateKeyListener.html
+
+http://developer.android.com/reference/android/text/method/DateTimeKeyListener.html
+http://developer.android.com/reference/android/text/method/DialerKeyListener.html
+
+http://developer.android.com/reference/android/text/method/DigitsKeyListener.html
+http://developer.android.com/reference/android/text/method/HideReturnsTransformationMethod.html
+
+http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
+http://developer.android.com/reference/android/text/method/MultiTapKeyListener.html
+
+http://developer.android.com/reference/android/text/method/NumberKeyListener.html
+http://developer.android.com/reference/android/text/method/PasswordTransformationMethod.html
+
+http://developer.android.com/reference/android/text/method/QwertyKeyListener.html
+http://developer.android.com/reference/android/text/method/ReplacementTransformationMethod.html
+
+http://developer.android.com/reference/android/text/method/ScrollingMovementMethod.html
+http://developer.android.com/reference/android/text/method/SingleLineTransformationMethod.html
+
+http://developer.android.com/reference/android/text/method/TextKeyListener.html
+http://developer.android.com/reference/android/text/method/TimeKeyListener.html
+
+http://developer.android.com/reference/android/text/method/Touch.html
+http://developer.android.com/reference/android/location/Address.html
+
+http://developer.android.com/reference/android/content/pm/ApplicationInfo.html
+http://developer.android.com/reference/android/location/Criteria.html
+
+http://developer.android.com/reference/android/content/pm/InstrumentationInfo.html
+http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
+
+http://developer.android.com/reference/android/location/Location.html
+http://developer.android.com/reference/android/content/pm/PackageInfo.html
+
+http://developer.android.com/reference/android/content/pm/PackageStats.html
+http://developer.android.com/reference/android/content/pm/PermissionGroupInfo.html
+
+http://developer.android.com/reference/android/content/pm/PermissionInfo.html
+http://developer.android.com/reference/android/content/pm/ProviderInfo.html
+
+http://developer.android.com/reference/android/content/pm/ResolveInfo.html
+http://developer.android.com/reference/android/net/wifi/ScanResult.html
+
+http://developer.android.com/reference/android/content/pm/ServiceInfo.html
+http://developer.android.com/reference/android/content/pm/Signature.html
+
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html
+http://developer.android.com/reference/android/net/wifi/WifiInfo.html
+
+http://developer.android.com/reference/java/io/FileDescriptor.html
+http://developer.android.com/reference/java/security/SecureClassLoader.html
+
+http://developer.android.com/reference/java/security/ProtectionDomain.html
+http://developer.android.com/reference/java/io/Closeable.html
+
+http://developer.android.com/reference/java/io/DataInput.html
+http://developer.android.com/reference/java/io/DataOutput.html
+
+http://developer.android.com/reference/java/io/Externalizable.html
+http://developer.android.com/reference/java/io/FileFilter.html
+
+http://developer.android.com/reference/java/io/FilenameFilter.html
+http://developer.android.com/reference/java/io/Flushable.html
+
+http://developer.android.com/reference/java/io/ObjectInput.html
+http://developer.android.com/reference/java/io/ObjectInputValidation.html
+
+http://developer.android.com/reference/java/io/ObjectOutput.html
+http://developer.android.com/reference/java/io/ObjectStreamConstants.html
+
+http://developer.android.com/reference/java/io/BufferedInputStream.html
+http://developer.android.com/reference/java/io/BufferedOutputStream.html
+
+http://developer.android.com/reference/java/io/BufferedReader.html
+http://developer.android.com/reference/java/io/BufferedWriter.html
+
+http://developer.android.com/reference/java/io/ByteArrayInputStream.html
+http://developer.android.com/reference/java/io/ByteArrayOutputStream.html
+
+http://developer.android.com/reference/java/io/CharArrayReader.html
+http://developer.android.com/reference/java/io/CharArrayWriter.html
+
+http://developer.android.com/reference/java/io/DataInputStream.html
+http://developer.android.com/reference/java/io/DataOutputStream.html
+
+http://developer.android.com/reference/java/io/FilePermission.html
+http://developer.android.com/reference/java/io/FileReader.html
+
+http://developer.android.com/reference/java/io/FileWriter.html
+http://developer.android.com/reference/java/io/FilterInputStream.html
+
+http://developer.android.com/reference/java/io/FilterOutputStream.html
+http://developer.android.com/reference/java/io/FilterReader.html
+
+http://developer.android.com/reference/java/io/FilterWriter.html
+http://developer.android.com/reference/java/io/InputStreamReader.html
+
+http://developer.android.com/reference/java/io/LineNumberInputStream.html
+http://developer.android.com/reference/java/io/LineNumberReader.html
+
+http://developer.android.com/reference/java/io/ObjectInputStream.html
+http://developer.android.com/reference/java/io/ObjectInputStream.GetField.html
+
+http://developer.android.com/reference/java/io/ObjectOutputStream.html
+http://developer.android.com/reference/java/io/ObjectOutputStream.PutField.html
+
+http://developer.android.com/reference/java/io/ObjectStreamClass.html
+http://developer.android.com/reference/java/io/OutputStreamWriter.html
+
+http://developer.android.com/reference/java/io/PipedInputStream.html
+http://developer.android.com/reference/java/io/PipedOutputStream.html
+
+http://developer.android.com/reference/java/io/PipedReader.html
+http://developer.android.com/reference/java/io/PipedWriter.html
+
+http://developer.android.com/reference/java/io/PushbackInputStream.html
+http://developer.android.com/reference/java/io/PushbackReader.html
+
+http://developer.android.com/reference/java/io/RandomAccessFile.html
+http://developer.android.com/reference/java/io/Reader.html
+
+http://developer.android.com/reference/java/io/SequenceInputStream.html
+http://developer.android.com/reference/java/io/SerializablePermission.html
+
+http://developer.android.com/reference/java/io/StreamTokenizer.html
+http://developer.android.com/reference/java/io/StringBufferInputStream.html
+
+http://developer.android.com/reference/java/io/StringReader.html
+http://developer.android.com/reference/java/io/StringWriter.html
+
+http://developer.android.com/reference/java/io/Writer.html
+http://developer.android.com/reference/java/io/CharConversionException.html
+
+http://developer.android.com/reference/java/io/EOFException.html
+http://developer.android.com/reference/java/io/FileNotFoundException.html
+
+http://developer.android.com/reference/java/io/InterruptedIOException.html
+http://developer.android.com/reference/java/io/InvalidClassException.html
+
+http://developer.android.com/reference/java/io/InvalidObjectException.html
+http://developer.android.com/reference/java/io/NotActiveException.html
+
+http://developer.android.com/reference/java/io/NotSerializableException.html
+http://developer.android.com/reference/java/io/ObjectStreamException.html
+
+http://developer.android.com/reference/java/io/OptionalDataException.html
+http://developer.android.com/reference/java/io/StreamCorruptedException.html
+
+http://developer.android.com/reference/java/io/SyncFailedException.html
+http://developer.android.com/reference/java/io/UnsupportedEncodingException.html
+
+http://developer.android.com/reference/java/io/UTFDataFormatException.html
+http://developer.android.com/reference/java/io/WriteAbortedException.html
+
+http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
+http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
+
+http://developer.android.com/reference/java/security/Certificate.html
+http://developer.android.com/reference/java/security/DomainCombiner.html
+
+http://developer.android.com/reference/java/security/KeyStore.Entry.html
+http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
+
+http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
+http://developer.android.com/reference/java/security/Principal.html
+
+http://developer.android.com/reference/java/security/PrivateKey.html
+http://developer.android.com/reference/java/security/PrivilegedAction.html
+
+http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
+http://developer.android.com/reference/java/security/PublicKey.html
+
+http://developer.android.com/reference/java/security/AccessControlContext.html
+http://developer.android.com/reference/java/security/AccessController.html
+
+http://developer.android.com/reference/java/security/AlgorithmParameterGenerator.html
+http://developer.android.com/reference/java/security/AlgorithmParameterGeneratorSpi.html
+
+http://developer.android.com/reference/java/security/AlgorithmParametersSpi.html
+http://developer.android.com/reference/java/security/AllPermission.html
+
+http://developer.android.com/reference/java/security/CodeSource.html
+http://developer.android.com/reference/java/security/DigestInputStream.html
+
+http://developer.android.com/reference/java/security/DigestOutputStream.html
+http://developer.android.com/reference/java/security/GuardedObject.html
+
+http://developer.android.com/reference/java/security/Identity.html
+http://developer.android.com/reference/java/security/IdentityScope.html
+
+http://developer.android.com/reference/java/security/KeyFactory.html
+http://developer.android.com/reference/java/security/KeyFactorySpi.html
+
+http://developer.android.com/reference/java/security/KeyPair.html
+http://developer.android.com/reference/java/security/KeyPairGenerator.html
+
+http://developer.android.com/reference/java/security/KeyPairGeneratorSpi.html
+http://developer.android.com/reference/java/security/KeyRep.html
+
+http://developer.android.com/reference/java/security/KeyStore.html
+http://developer.android.com/reference/java/security/KeyStore.Builder.html
+
+http://developer.android.com/reference/java/security/KeyStore.CallbackHandlerProtection.html
+http://developer.android.com/reference/java/security/KeyStore.PasswordProtection.html
+
+http://developer.android.com/reference/java/security/KeyStore.PrivateKeyEntry.html
+http://developer.android.com/reference/java/security/KeyStore.SecretKeyEntry.html
+
+http://developer.android.com/reference/java/security/KeyStore.TrustedCertificateEntry.html
+http://developer.android.com/reference/java/security/KeyStoreSpi.html
+
+http://developer.android.com/reference/java/security/MessageDigest.html
+http://developer.android.com/reference/java/security/MessageDigestSpi.html
+
+http://developer.android.com/reference/java/security/Permissions.html
+http://developer.android.com/reference/java/security/Policy.html
+
+http://developer.android.com/reference/java/security/Provider.Service.html
+http://developer.android.com/reference/java/security/SecureRandomSpi.html
+
+http://developer.android.com/reference/java/security/Security.html
+http://developer.android.com/reference/java/security/SecurityPermission.html
+
+http://developer.android.com/reference/java/security/Signature.html
+http://developer.android.com/reference/java/security/SignatureSpi.html
+
+http://developer.android.com/reference/java/security/SignedObject.html
+http://developer.android.com/reference/java/security/Signer.html
+
+http://developer.android.com/reference/java/security/Timestamp.html
+http://developer.android.com/reference/java/security/UnresolvedPermission.html
+
+http://developer.android.com/reference/java/security/AccessControlException.html
+http://developer.android.com/reference/java/security/DigestException.html
+
+http://developer.android.com/reference/java/security/GeneralSecurityException.html
+http://developer.android.com/reference/java/security/InvalidAlgorithmParameterException.html
+
+http://developer.android.com/reference/java/security/InvalidParameterException.html
+http://developer.android.com/reference/java/security/KeyException.html
+
+http://developer.android.com/reference/java/security/KeyStoreException.html
+http://developer.android.com/reference/java/security/PrivilegedActionException.html
+
+http://developer.android.com/reference/java/security/ProviderException.html
+http://developer.android.com/reference/java/security/SignatureException.html
+
+http://developer.android.com/reference/java/security/UnrecoverableEntryException.html
+http://developer.android.com/reference/java/security/UnrecoverableKeyException.html
+
+http://developer.android.com/reference/java/nio/Buffer.html
+http://developer.android.com/reference/java/nio/ByteOrder.html
+
+http://developer.android.com/reference/java/nio/BufferOverflowException.html
+http://developer.android.com/reference/java/nio/BufferUnderflowException.html
+
+http://developer.android.com/reference/java/nio/InvalidMarkException.html
+http://developer.android.com/reference/java/nio/ReadOnlyBufferException.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
+http://developer.android.com/reference/org/apache/http/conn/package-descr.html
+
+http://developer.android.com/reference/java/security/cert/PolicyNode.html
+http://developer.android.com/reference/java/security/cert/X509Extension.html
+
+http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
+http://developer.android.com/reference/java/security/cert/CertificateFactory.html
+
+http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
+http://developer.android.com/reference/java/security/cert/CertPath.html
+
+http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
+
+http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
+http://developer.android.com/reference/java/security/cert/CertPathValidator.html
+
+http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
+http://developer.android.com/reference/java/security/cert/CertStore.html
+
+http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
+http://developer.android.com/reference/java/security/cert/CRL.html
+
+http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
+http://developer.android.com/reference/java/security/cert/TrustAnchor.html
+
+http://developer.android.com/reference/java/security/cert/X509Certificate.html
+http://developer.android.com/reference/java/security/cert/X509CRL.html
+
+http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
+http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
+
+http://developer.android.com/reference/java/security/cert/CertificateException.html
+http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
+
+http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
+
+http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
+
+http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
+http://developer.android.com/reference/java/security/cert/CertStoreException.html
+
+http://developer.android.com/reference/java/security/cert/CRLException.html
+http://developer.android.com/reference/com/google/android/maps/ItemizedOverlay.OnFocusChangeListener.html
+
+http://developer.android.com/reference/com/google/android/maps/Projection.html
+http://developer.android.com/reference/com/google/android/maps/GeoPoint.html
+
+http://developer.android.com/reference/com/google/android/maps/OverlayItem.html
+http://developer.android.com/reference/com/google/android/maps/MapView.LayoutParams.html
+
+http://developer.android.com/reference/com/google/android/maps/MyLocationOverlay.html
+http://developer.android.com/reference/com/google/android/maps/TrackballGestureDetector.html
+
+http://developer.android.com/reference/java/sql/Array.html
+http://developer.android.com/reference/java/sql/Blob.html
+
+http://developer.android.com/reference/java/sql/CallableStatement.html
+http://developer.android.com/reference/java/sql/Clob.html
+
+http://developer.android.com/reference/java/sql/Connection.html
+http://developer.android.com/reference/java/sql/DatabaseMetaData.html
+
+http://developer.android.com/reference/java/sql/Driver.html
+http://developer.android.com/reference/java/sql/ParameterMetaData.html
+
+http://developer.android.com/reference/java/sql/PreparedStatement.html
+http://developer.android.com/reference/java/sql/Ref.html
+
+http://developer.android.com/reference/java/sql/ResultSet.html
+http://developer.android.com/reference/java/sql/ResultSetMetaData.html
+
+http://developer.android.com/reference/java/sql/Savepoint.html
+http://developer.android.com/reference/java/sql/SQLData.html
+
+http://developer.android.com/reference/java/sql/SQLInput.html
+http://developer.android.com/reference/java/sql/SQLOutput.html
+
+http://developer.android.com/reference/java/sql/Statement.html
+http://developer.android.com/reference/java/sql/Struct.html
+
+http://developer.android.com/reference/java/sql/DriverManager.html
+http://developer.android.com/reference/java/sql/DriverPropertyInfo.html
+
+http://developer.android.com/reference/java/sql/SQLPermission.html
+http://developer.android.com/reference/java/sql/Types.html
+
+http://developer.android.com/reference/java/sql/BatchUpdateException.html
+http://developer.android.com/reference/java/sql/DataTruncation.html
+
+http://developer.android.com/reference/java/sql/SQLException.html
+http://developer.android.com/reference/java/sql/SQLWarning.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicTokenIterator.html
+http://developer.android.com/reference/java/security/package-descr.html
+
+http://developer.android.com/reference/java/security/spec/KeySpec.html
+http://developer.android.com/reference/android/text/GetChars.html
+
+http://developer.android.com/reference/android/text/Html.ImageGetter.html
+http://developer.android.com/reference/android/text/Html.TagHandler.html
+
+http://developer.android.com/reference/android/text/Spanned.html
+http://developer.android.com/reference/android/text/SpanWatcher.html
+
+http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
+http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
+
+http://developer.android.com/reference/android/text/AlteredCharSequence.html
+http://developer.android.com/reference/android/text/AndroidCharacter.html
+
+http://developer.android.com/reference/android/text/Annotation.html
+http://developer.android.com/reference/android/text/AutoText.html
+
+http://developer.android.com/reference/android/text/BoringLayout.html
+http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
+
+http://developer.android.com/reference/android/text/DynamicLayout.html
+http://developer.android.com/reference/android/text/Html.html
+
+http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
+http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
+
+http://developer.android.com/reference/android/text/Layout.Directions.html
+http://developer.android.com/reference/android/text/LoginFilter.html
+
+http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
+http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
+
+http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
+http://developer.android.com/reference/android/text/SpannableString.html
+
+http://developer.android.com/reference/android/text/SpannableStringBuilder.html
+http://developer.android.com/reference/android/text/SpannedString.html
+
+http://developer.android.com/reference/android/text/StaticLayout.html
+http://developer.android.com/reference/android/text/TextUtils.html
+
+http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
+http://developer.android.com/reference/javax/security/auth/Subject.html
+
+http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
+http://developer.android.com/reference/javax/security/auth/login/LoginException.html
+
+http://developer.android.com/reference/java/nio/package-descr.html
+
+http://developer.android.com/reference/java/util/zip/ZipFile.html
+http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
+
+http://developer.android.com/reference/javax/security/auth/Destroyable.html
+http://developer.android.com/reference/javax/security/auth/AuthPermission.html
+
+http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
+http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
+
+http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
+http://developer.android.com/reference/javax/security/auth/package-descr.html
+
+http://developer.android.com/guide/tutorials/views/hello-linearlayout.html
+http://developer.android.com/guide/tutorials/views/hello-tablelayout.html
+
+http://developer.android.com/guide/tutorials/views/hello-relativelayout.html
+http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
+
+http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
+http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
+
+http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
+http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
+
+http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
+
+http://developer.android.com/reference/android/content/AsyncQueryHandler.html
+http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
+
+http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
+http://developer.android.com/reference/android/content/ContentQueryMap.html
+
+http://developer.android.com/reference/android/content/ContentUris.html
+http://developer.android.com/reference/android/content/Intent.FilterComparison.html
+
+http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
+http://developer.android.com/reference/android/content/MutableContextWrapper.html
+
+http://developer.android.com/reference/android/content/UriMatcher.html
+http://developer.android.com/reference/android/content/ActivityNotFoundException.html
+
+http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
+
+http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
+http://developer.android.com/reference/android/test/mock/MockContext.html
+
+http://developer.android.com/reference/android/test/mock/MockApplication.html
+http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
+
+http://developer.android.com/reference/org/xml/sax/ContentHandler.html
+http://developer.android.com/reference/org/xml/sax/DocumentHandler.html
+
+http://developer.android.com/reference/org/xml/sax/DTDHandler.html
+http://developer.android.com/reference/org/xml/sax/EntityResolver.html
+
+http://developer.android.com/reference/org/xml/sax/ErrorHandler.html
+http://developer.android.com/reference/org/xml/sax/XMLFilter.html
+
+http://developer.android.com/reference/org/xml/sax/XMLReader.html
+http://developer.android.com/reference/org/xml/sax/HandlerBase.html
+
+http://developer.android.com/reference/org/xml/sax/InputSource.html
+http://developer.android.com/reference/org/xml/sax/SAXException.html
+
+http://developer.android.com/reference/org/xml/sax/SAXNotRecognizedException.html
+http://developer.android.com/reference/org/xml/sax/SAXNotSupportedException.html
+
+http://developer.android.com/reference/org/xml/sax/SAXParseException.html
+http://developer.android.com/reference/org/xml/sax/package-descr.html
+
+http://developer.android.com/reference/javax/sql/RowSet.html
+http://developer.android.com/reference/android/content/pm/IPackageInstallObserver.html
+
+http://developer.android.com/reference/android/content/pm/ApplicationInfo.DisplayNameComparator.html
+
+http://developer.android.com/reference/android/content/pm/ComponentInfo.html
+http://developer.android.com/reference/android/content/pm/IPackageInstallObserver.Stub.html
+
+http://developer.android.com/reference/android/content/pm/PackageItemInfo.DisplayNameComparator.html
+
+http://developer.android.com/reference/android/content/pm/ResolveInfo.DisplayNameComparator.html
+
+http://developer.android.com/guide/samples/NotePad/res/index.html
+http://developer.android.com/guide/samples/NotePad/src/index.html
+
+http://developer.android.com/guide/samples/NotePad/tests/index.html
+http://developer.android.com/guide/samples/NotePad/AndroidManifest.html
+
+http://developer.android.com/guide/samples/NotePad/sample_note.html
+http://developer.android.com/guide/samples/NotePad/sample_notepad.html
+
+http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
+
+http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
+http://developer.android.com/reference/javax/xml/XMLConstants.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
+http://developer.android.com/reference/java/nio/channels/ByteChannel.html
+
+http://developer.android.com/reference/java/nio/channels/GatheringByteChannel.html
+http://developer.android.com/reference/java/nio/channels/InterruptibleChannel.html
+
+http://developer.android.com/reference/java/nio/channels/ReadableByteChannel.html
+http://developer.android.com/reference/java/nio/channels/ScatteringByteChannel.html
+
+http://developer.android.com/reference/java/nio/channels/WritableByteChannel.html
+http://developer.android.com/reference/java/nio/channels/Channels.html
+
+http://developer.android.com/reference/java/nio/channels/FileChannel.html
+http://developer.android.com/reference/java/nio/channels/FileChannel.MapMode.html
+
+http://developer.android.com/reference/java/nio/channels/FileLock.html
+http://developer.android.com/reference/java/nio/channels/Pipe.html
+
+http://developer.android.com/reference/java/nio/channels/Pipe.SinkChannel.html
+http://developer.android.com/reference/java/nio/channels/Pipe.SourceChannel.html
+
+http://developer.android.com/reference/java/nio/channels/SelectableChannel.html
+http://developer.android.com/reference/java/nio/channels/SelectionKey.html
+
+http://developer.android.com/reference/java/nio/channels/Selector.html
+http://developer.android.com/reference/java/nio/channels/SocketChannel.html
+
+http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
+http://developer.android.com/reference/java/nio/channels/AsynchronousCloseException.html
+
+http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
+http://developer.android.com/reference/java/nio/channels/ClosedByInterruptException.html
+
+http://developer.android.com/reference/java/nio/channels/ClosedChannelException.html
+http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
+
+http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
+http://developer.android.com/reference/java/nio/channels/FileLockInterruptionException.html
+
+http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
+http://developer.android.com/reference/java/nio/channels/IllegalSelectorException.html
+
+http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
+http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
+
+http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
+http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
+
+http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
+http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
+
+http://developer.android.com/reference/java/nio/channels/UnresolvedAddressException.html
+http://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
+http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
+http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
+http://developer.android.com/reference/java/security/spec/ECField.html
+
+http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
+http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
+
+http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
+http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
+
+http://developer.android.com/reference/java/security/spec/ECFieldFp.html
+http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
+
+http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
+http://developer.android.com/reference/java/security/spec/ECPoint.html
+
+http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
+
+http://developer.android.com/reference/java/security/spec/EllipticCurve.html
+http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
+
+http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
+http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
+
+http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
+http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
+
+http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
+http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
+
+http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
+
+http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
+http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
+
+http://developer.android.com/reference/org/apache/http/auth/Credentials.html
+http://developer.android.com/reference/org/apache/http/auth/AUTH.html
+
+http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
+http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
+
+http://developer.android.com/reference/org/apache/http/auth/AuthState.html
+http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
+
+http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
+http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
+
+http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
+http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
+
+http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
+http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
+
+http://developer.android.com/reference/org/apache/http/auth/package-descr.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.AuthAlgorithm.html
+
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.GroupCipher.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.KeyMgmt.html
+
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.PairwiseCipher.html
+
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Status.html
+
+http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
+http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
+
+http://developer.android.com/reference/java/util/zip/ZipInputStream.html
+http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
+
+http://developer.android.com/reference/java/util/zip/Inflater.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/AbstractConnPool.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntry.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueWorker.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RouteSpecificPool.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThread.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.html
+
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/package-descr.html
+http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
+
+http://developer.android.com/reference/org/xmlpull/v1/sax2/Driver.html
+http://developer.android.com/guide/tutorials/views/hello-spinner.html
+
+http://developer.android.com/guide/tutorials/views/hello-listview.html
+http://developer.android.com/guide/tutorials/views/hello-gridview.html
+
+http://developer.android.com/reference/android/test/mock/MockPackageManager.html
+
+http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
+
+http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
+http://developer.android.com/reference/android/text/util/Rfc822Token.html
+
+http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
+http://developer.android.com/reference/java/util/regex/Pattern.html
+
+http://developer.android.com/reference/java/lang/reflect/ReflectPermission.html
+
+http://developer.android.com/reference/javax/security/auth/callback/Callback.html
+http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
+
+http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
+
+http://developer.android.com/reference/javax/security/cert/Certificate.html
+http://developer.android.com/reference/javax/security/cert/X509Certificate.html
+
+http://developer.android.com/reference/javax/security/cert/CertificateEncodingException.html
+http://developer.android.com/reference/javax/security/cert/CertificateException.html
+
+http://developer.android.com/reference/javax/security/cert/CertificateExpiredException.html
+http://developer.android.com/reference/javax/security/cert/CertificateNotYetValidException.html
+
+http://developer.android.com/reference/javax/security/cert/CertificateParsingException.html
+http://developer.android.com/reference/javax/security/cert/package-descr.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
+
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
+http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
+
+http://developer.android.com/reference/java/lang/annotation/Annotation.html
+http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
+
+http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
+
+http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
+http://developer.android.com/reference/java/lang/annotation/package-descr.html
+
+http://developer.android.com/reference/android/app/package-descr.html
+http://developer.android.com/reference/java/lang/reflect/Method.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicHttpEntityEnclosingRequest.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicHttpRequest.html
+http://developer.android.com/reference/org/apache/http/message/BasicHttpResponse.html
+
+http://developer.android.com/guide/samples/NotePad/src/com/index.html
+http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
+
+http://developer.android.com/reference/org/apache/http/io/package-descr.html
+http://developer.android.com/reference/android/location/LocationListener.html
+
+http://developer.android.com/reference/android/location/Geocoder.html
+http://developer.android.com/reference/android/location/LocationProvider.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieSpec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicCommentHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicDomainHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicExpiresHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicMaxAgeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicPathHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicSecureHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpec.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpecFactory.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpec.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpecFactory.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/CookieSpecBase.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/DateUtils.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDomainHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109DomainHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109Spec.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109SpecFactory.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109VersionHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965Spec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965SpecFactory.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.html
+
+http://developer.android.com/reference/org/apache/http/impl/cookie/DateParseException.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LabelView.java
+
+http://developer.android.com/reference/android/net/http/SslCertificate.html
+http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
+
+http://developer.android.com/reference/android/test/mock/MockContentResolver.html
+http://developer.android.com/reference/android/test/mock/MockDialogInterface.html
+
+http://developer.android.com/reference/android/test/mock/MockResources.html
+http://developer.android.com/reference/android/test/mock/package-descr.html
+
+http://developer.android.com/reference/junit/framework/Protectable.html
+http://developer.android.com/reference/junit/framework/TestFailure.html
+
+http://developer.android.com/reference/junit/framework/ComparisonFailure.html
+http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.FailedToCreateTests.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference.html
+
+http://developer.android.com/reference/java/util/concurrent/atomic/package-descr.html
+http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
+
+http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html
+
+http://developer.android.com/reference/org/apache/http/conn/ssl/AbstractVerifier.html
+http://developer.android.com/reference/java/lang/reflect/AccessibleObject.html
+
+http://developer.android.com/reference/java/util/zip/Adler32.html
+http://developer.android.com/reference/android/text/style/AlignmentSpan.Standard.html
+
+http://developer.android.com/reference/java/lang/reflect/Array.html
+http://developer.android.com/reference/android/media/AsyncPlayer.html
+
+http://developer.android.com/reference/org/apache/http/client/params/AuthPolicy.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderElementIterator.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueFormatter.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueParser.html
+http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
+
+http://developer.android.com/reference/org/apache/http/message/BasicLineFormatter.html
+http://developer.android.com/reference/org/apache/http/message/BasicLineParser.html
+
+http://developer.android.com/reference/android/text/style/BulletSpan.html
+http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
+
+http://developer.android.com/reference/java/util/zip/CRC32.html
+http://developer.android.com/reference/android/hardware/Camera.Parameters.html
+
+http://developer.android.com/reference/android/hardware/Camera.Size.html
+http://developer.android.com/reference/android/text/style/CharacterStyle.html
+
+http://developer.android.com/reference/java/nio/charset/spi/CharsetProvider.html
+http://developer.android.com/reference/org/apache/http/client/utils/CloneUtils.html
+
+http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParams.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRouteBean.html
+
+http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParams.html
+http://developer.android.com/reference/org/apache/http/client/params/CookiePolicy.html
+
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
+http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
+
+http://developer.android.com/reference/java/util/zip/Deflater.html
+http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
+
+http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
+http://developer.android.com/reference/org/apache/http/impl/entity/EntityDeserializer.html
+
+http://developer.android.com/reference/org/apache/http/impl/entity/EntitySerializer.html
+http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
+
+http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
+http://developer.android.com/reference/android/media/FaceDetector.html
+
+http://developer.android.com/reference/android/media/FaceDetector.Face.html
+http://developer.android.com/reference/android/opengl/GLDebugHelper.html
+
+http://developer.android.com/reference/android/opengl/GLU.html
+http://developer.android.com/reference/android/opengl/GLUtils.html
+
+http://developer.android.com/reference/org/apache/http/client/params/HttpClientParams.html
+http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
+http://developer.android.com/reference/android/text/style/IconMarginSpan.html
+
+http://developer.android.com/reference/org/apache/http/conn/util/InetAddressUtils.html
+http://developer.android.com/reference/org/json/JSONArray.html
+
+http://developer.android.com/reference/org/json/JSONObject.html
+http://developer.android.com/reference/org/json/JSONStringer.html
+
+http://developer.android.com/reference/org/json/JSONTokener.html
+http://developer.android.com/reference/org/apache/http/util/LangUtils.html
+
+http://developer.android.com/reference/org/apache/http/impl/entity/LaxContentLengthStrategy.html
+
+http://developer.android.com/reference/android/text/style/LeadingMarginSpan.Standard.html
+http://developer.android.com/reference/java/util/concurrent/locks/LockSupport.html
+
+http://developer.android.com/reference/java/util/regex/Matcher.html
+http://developer.android.com/reference/android/opengl/Matrix.html
+
+http://developer.android.com/reference/android/media/MediaRecorder.AudioEncoder.html
+http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html
+
+http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html
+http://developer.android.com/reference/android/media/MediaScannerConnection.html
+
+http://developer.android.com/reference/java/lang/reflect/Modifier.html
+http://developer.android.com/reference/org/apache/http/message/ParserCursor.html
+
+http://developer.android.com/reference/org/apache/http/conn/scheme/PlainSocketFactory.html
+http://developer.android.com/reference/android/text/style/QuoteSpan.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantLock.html
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html
+
+http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
+
+http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
+
+http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
+
+http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
+
+http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
+
+http://developer.android.com/reference/android/media/Ringtone.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
+
+http://developer.android.com/reference/org/apache/http/conn/scheme/Scheme.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/SchemeRegistry.html
+
+http://developer.android.com/reference/javax/net/ServerSocketFactory.html
+http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
+
+http://developer.android.com/reference/android/telephony/gsm/SmsMessage.html
+http://developer.android.com/reference/android/telephony/gsm/SmsMessage.SubmitPdu.html
+
+http://developer.android.com/reference/android/media/SoundPool.html
+http://developer.android.com/reference/org/apache/http/impl/entity/StrictContentLengthStrategy.html
+
+http://developer.android.com/reference/android/text/style/TabStopSpan.Standard.html
+http://developer.android.com/reference/android/test/suitebuilder/TestMethod.html
+
+http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.html
+http://developer.android.com/reference/android/media/ToneGenerator.html
+
+http://developer.android.com/reference/org/apache/http/client/utils/URIUtils.html
+http://developer.android.com/reference/org/apache/http/client/utils/URLEncodedUtils.html
+
+http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
+http://developer.android.com/reference/junit/runner/Version.html
+
+http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/Lock.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier.html
+
+http://developer.android.com/reference/java/util/concurrent/locks/ReadWriteLock.html
+http://developer.android.com/reference/android/text/style/AbsoluteSizeSpan.html
+
+http://developer.android.com/reference/org/apache/http/conn/ssl/AllowAllHostnameVerifier.html
+
+http://developer.android.com/reference/android/text/style/BackgroundColorSpan.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.html
+
+http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
+http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
+
+http://developer.android.com/reference/android/text/style/ClickableSpan.html
+http://developer.android.com/reference/org/apache/http/client/params/ClientParamBean.html
+
+http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionParamBean.html
+
+http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParamBean.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParamBean.html
+
+http://developer.android.com/reference/javax/sql/ConnectionEvent.html
+http://developer.android.com/reference/java/lang/reflect/Constructor.html
+
+http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecParamBean.html
+
+http://developer.android.com/reference/org/w3c/dom/DOMException.html
+http://developer.android.com/reference/java/util/zip/DataFormatException.html
+
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
+
+http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
+http://developer.android.com/reference/android/text/style/DynamicDrawableSpan.html
+
+http://developer.android.com/reference/java/lang/reflect/Field.html
+http://developer.android.com/reference/android/text/style/ForegroundColorSpan.html
+
+http://developer.android.com/reference/android/opengl/GLException.html
+http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
+
+http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
+http://developer.android.com/reference/java/lang/reflect/GenericSignatureFormatError.html
+
+http://developer.android.com/reference/android/text/style/ImageSpan.html
+http://developer.android.com/reference/java/lang/reflect/InvocationTargetException.html
+
+http://developer.android.com/reference/org/json/JSONException.html
+http://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException.html
+
+http://developer.android.com/reference/android/text/style/MaskFilterSpan.html
+http://developer.android.com/reference/android/text/style/MetricAffectingSpan.html
+
+http://developer.android.com/reference/android/text/style/RasterizerSpan.html
+http://developer.android.com/reference/android/text/style/RelativeSizeSpan.html
+
+http://developer.android.com/reference/android/text/style/ReplacementSpan.html
+http://developer.android.com/reference/javax/sql/RowSetEvent.html
+
+http://developer.android.com/reference/android/text/style/ScaleXSpan.html
+http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
+
+http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/StrictHostnameVerifier.html
+
+http://developer.android.com/reference/android/text/style/StrikethroughSpan.html
+http://developer.android.com/reference/android/text/style/StyleSpan.html
+
+http://developer.android.com/reference/android/text/style/SubscriptSpan.html
+http://developer.android.com/reference/android/text/style/SuperscriptSpan.html
+
+http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
+http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html
+
+http://developer.android.com/reference/android/text/style/TypefaceSpan.html
+http://developer.android.com/reference/java/lang/reflect/UndeclaredThrowableException.html
+
+http://developer.android.com/reference/android/text/style/UnderlineSpan.html
+http://developer.android.com/reference/java/util/zip/ZipException.html
+
+http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html
+
+http://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html
+
+http://developer.android.com/reference/android/media/MediaPlayer.OnPreparedListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnSeekCompleteListener.html
+
+http://developer.android.com/reference/android/media/MediaScannerConnection.MediaScannerConnectionClient.html
+
+http://developer.android.com/reference/java/util/zip/Checksum.html
+http://developer.android.com/guide/developing/tools/adt.html
+
+http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
+http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
+
+http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
+http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
+
+http://developer.android.com/reference/java/lang/package-descr.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
+
+http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
+
+http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver.html
+
+http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
+http://developer.android.com/reference/android/text/style/AlignmentSpan.html
+
+http://developer.android.com/reference/java/lang/reflect/AnnotatedElement.html
+http://developer.android.com/reference/org/w3c/dom/Attr.html
+
+http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
+http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
+
+http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
+http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
+
+http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
+http://developer.android.com/reference/org/w3c/dom/CDATASection.html
+
+http://developer.android.com/reference/org/w3c/dom/CharacterData.html
+http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
+
+http://developer.android.com/reference/org/w3c/dom/Comment.html
+http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
+
+http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
+http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
+
+http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecPNames.html
+http://developer.android.com/reference/javax/sql/DataSource.html
+
+http://developer.android.com/reference/java/lang/Deprecated.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
+
+http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
+
+http://developer.android.com/reference/org/w3c/dom/Document.html
+http://developer.android.com/reference/java/lang/annotation/Documented.html
+
+http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
+http://developer.android.com/reference/org/w3c/dom/DocumentType.html
+
+http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
+http://developer.android.com/reference/java/security/interfaces/DSAKey.html
+
+http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
+http://developer.android.com/reference/java/security/interfaces/DSAParams.html
+
+http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
+http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
+
+http://developer.android.com/reference/java/security/interfaces/ECKey.html
+http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
+
+http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
+http://developer.android.com/reference/org/w3c/dom/Element.html
+
+http://developer.android.com/reference/org/w3c/dom/Entity.html
+http://developer.android.com/reference/org/w3c/dom/EntityReference.html
+
+http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
+http://developer.android.com/reference/android/test/FlakyTest.html
+
+http://developer.android.com/reference/java/lang/reflect/GenericArrayType.html
+http://developer.android.com/reference/java/lang/reflect/GenericDeclaration.html
+
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
+
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
+
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
+
+http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
+
+http://developer.android.com/reference/java/lang/annotation/Inherited.html
+http://developer.android.com/reference/java/lang/reflect/InvocationHandler.html
+
+http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
+http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
+
+http://developer.android.com/reference/android/text/style/LineHeightSpan.html
+http://developer.android.com/reference/java/util/regex/MatchResult.html
+
+http://developer.android.com/reference/java/lang/reflect/Member.html
+http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
+
+http://developer.android.com/reference/org/w3c/dom/Node.html
+http://developer.android.com/reference/org/w3c/dom/NodeList.html
+
+http://developer.android.com/reference/org/w3c/dom/Notation.html
+http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
+
+http://developer.android.com/reference/java/lang/Override.html
+http://developer.android.com/reference/android/text/style/ParagraphStyle.html
+
+http://developer.android.com/reference/java/lang/reflect/ParameterizedType.html
+http://developer.android.com/reference/javax/sql/PooledConnection.html
+
+http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
+http://developer.android.com/reference/java/lang/reflect/Proxy.html
+
+http://developer.android.com/reference/java/lang/annotation/Retention.html
+http://developer.android.com/reference/javax/sql/RowSetInternal.html
+
+http://developer.android.com/reference/javax/sql/RowSetListener.html
+http://developer.android.com/reference/javax/sql/RowSetMetaData.html
+
+http://developer.android.com/reference/javax/sql/RowSetReader.html
+http://developer.android.com/reference/javax/sql/RowSetWriter.html
+
+http://developer.android.com/reference/java/security/interfaces/RSAKey.html
+http://developer.android.com/reference/java/security/interfaces/RSAMultiPrimePrivateCrtKey.html
+
+http://developer.android.com/reference/java/security/interfaces/RSAPrivateCrtKey.html
+http://developer.android.com/reference/java/security/interfaces/RSAPrivateKey.html
+
+http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
+http://developer.android.com/reference/android/hardware/SensorListener.html
+
+http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
+
+http://developer.android.com/reference/java/lang/SuppressWarnings.html
+http://developer.android.com/reference/android/text/style/TabStopSpan.html
+
+http://developer.android.com/reference/java/lang/annotation/Target.html
+http://developer.android.com/reference/dalvik/annotation/TestTarget.html
+
+http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
+http://developer.android.com/reference/org/w3c/dom/Text.html
+
+http://developer.android.com/reference/java/lang/reflect/Type.html
+http://developer.android.com/reference/java/lang/reflect/TypeVariable.html
+
+http://developer.android.com/reference/android/test/UiThreadTest.html
+http://developer.android.com/reference/android/text/style/UpdateLayout.html
+
+http://developer.android.com/reference/java/lang/reflect/WildcardType.html
+http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
+
+http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
+
+http://developer.android.com/reference/java/util/zip/package-descr.html
+http://developer.android.com/reference/javax/security/auth/login/package-descr.html
+
+http://developer.android.com/reference/android/text/style/package-descr.html
+
+http://developer.android.com/reference/java/nio/channels/package-descr.html
+http://developer.android.com/reference/android/opengl/package-descr.html
+
+http://developer.android.com/guide/tutorials/notepad/notepad-ex1.html
+
+http://developer.android.com/guide/tutorials/notepad/notepad-ex2.html
+http://developer.android.com/guide/tutorials/notepad/notepad-ex3.html
+
+http://developer.android.com/guide/tutorials/notepad/notepad-extra-credit.html
+http://developer.android.com/reference/java/util/package-descr.html
+
+http://developer.android.com/reference/org/apache/http/client/methods/package-descr.html
+http://developer.android.com/reference/android/os/package-descr.html
+
+http://developer.android.com/reference/org/apache/http/client/utils/package-descr.html
+
+http://developer.android.com/reference/org/apache/http/impl/package-descr.html
+
+http://developer.android.com/reference/java/io/package-descr.html
+http://developer.android.com/guide/samples/NotePad/src/com/example/index.html
+
+http://developer.android.com/reference/java/nio/charset/spi/package-descr.html
+
+http://developer.android.com/reference/org/apache/http/impl/entity/package-descr.html
+
+http://developer.android.com/guide/samples/LunarLander/res/index.html
+
+http://developer.android.com/guide/samples/LunarLander/src/index.html
+http://developer.android.com/guide/samples/LunarLander/tests/index.html
+
+http://developer.android.com/guide/samples/LunarLander/AndroidManifest.html
+http://developer.android.com/guide/samples/LunarLander/sample_lunarlander.html
+
+http://developer.android.com/reference/javax/crypto/interfaces/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/assets/index.html
+http://developer.android.com/guide/samples/ApiDemos/res/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/index.html
+http://developer.android.com/guide/samples/ApiDemos/tests/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/AndroidManifest.html
+http://developer.android.com/reference/android/widget/package-descr.html
+http://developer.android.com/reference/org/apache/http/conn/params/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/index.html
+http://developer.android.com/guide/samples/ApiDemos/tests/AndroidManifest.html
+
+http://developer.android.com/reference/android/test/suitebuilder/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/StyledText.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ResourcesSample.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.html
+
+http://developer.android.com/reference/android/view/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/HelloWorld.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PersistentState.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectEnter.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceController.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceBinding.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArgumentsController.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/OneShotAlarm.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RepeatingAlarm.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService_Service.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyWithText.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchInvoke.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchQueryResults.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchSuggestionSampleProvider.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AdvancedPreferences.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlertDialogSamples.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsSelectInstrumentation.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomDialogActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomTitle.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DialogActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ForwardTarget.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageView.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LaunchingPreferences.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MenuInflateFromXml.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferenceDependencies.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectMain.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SendResult.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/StatusBarNotifications.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentBlurActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomDialogActivity.java
+
+http://developer.android.com/reference/org/w3c/dom/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.java
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/index.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/index.html
+http://developer.android.com/guide/samples/ApiDemos/res/menu/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/raw/index.html
+http://developer.android.com/guide/samples/ApiDemos/res/values/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/xml/index.html
+http://developer.android.com/reference/java/sql/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RepeatingAlarm.java
+
+http://developer.android.com/guide/samples/LunarLander/res/drawable/index.html
+http://developer.android.com/guide/samples/LunarLander/res/drawable-land/index.html
+
+http://developer.android.com/guide/samples/LunarLander/res/drawable-port/index.html
+http://developer.android.com/guide/samples/LunarLander/res/layout/index.html
+
+http://developer.android.com/guide/samples/LunarLander/res/values/index.html
+http://developer.android.com/reference/android/util/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectMain.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchSuggestionSampleProvider.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LaunchingPreferences.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchInvoke.java
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/index.html
+
+http://developer.android.com/reference/android/content/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SurfaceViewOverlay.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TranslucentGLSurfaceViewActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html
+
+http://developer.android.com/guide/samples/NotePad/tests/src/index.html
+http://developer.android.com/guide/samples/NotePad/tests/AndroidManifest.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArgumentsController.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.java
+
+http://developer.android.com/reference/org/apache/http/client/params/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ForwardTarget.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlertDialogSamples.java
+
+http://developer.android.com/reference/java/security/spec/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchQueryResults.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.java
+
+http://developer.android.com/guide/samples/LunarLander/res/drawable-land/earthrise.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectEnter.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.java
+
+http://developer.android.com/reference/org/apache/http/conn/ssl/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.java
+
+http://developer.android.com/reference/org/apache/http/message/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.java
+
+http://developer.android.com/guide/samples/ApiDemos/assets/fonts/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentBlurActivity.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/LabelMaker.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixStack.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixTrackingGL.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/NumericSprite.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Projector.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextActivity.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextRenderer.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DialogActivity.java
+
+http://developer.android.com/reference/android/text/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ResourcesSample.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TranslucentGLSurfaceViewActivity.java
+
+http://developer.android.com/reference/org/apache/http/conn/routing/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PersistentState.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.java
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/index.html
+
+http://developer.android.com/reference/com/google/android/maps/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.java
+
+http://developer.android.com/guide/samples/NotePad/tests/src/com/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SurfaceViewOverlay.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomTitle.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AdvancedPreferences.java
+
+http://developer.android.com/
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.java
+
+http://developer.android.com/guide/samples/ApiDemos/res/xml/advanced_preferences.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/xml/default_values.html
+http://developer.android.com/guide/samples/ApiDemos/res/xml/preference_dependencies.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/xml/preferences.html
+http://developer.android.com/guide/samples/ApiDemos/res/xml/searchable.html
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePad.html
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotesList.html
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/TitleEditor.html
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/TitleEditor.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceBinding.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.java
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotesList.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/OneShotAlarm.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixTrackingGL.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.java
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/alarm_controller.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/alarm_service.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/alert_dialog.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/alert_dialog_text_entry.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/animation_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/animation_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/animations_main_screen.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_4.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_5.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_6.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_4.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_6.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_7.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/buttons_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/chronometer.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/contacts_filter.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/controls_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_dialog_activity.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_title.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_title_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/date_widgets_example_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/date_widgets_example_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/dialog_activity.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_3.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/forward_target.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/forwarding.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/gallery_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/gallery_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/google_login.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/grid_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/grid_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/hello_world.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/image_button_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/image_switcher_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/image_view_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_info.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_panel.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_view.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/launcher_shortcuts.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_3.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_4.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_5.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_6.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_7.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_10.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_3.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_4.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_5.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_6.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_7.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_8.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_9.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/link.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/list_12.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/list_13.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/list_7.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/list_8.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/list_item_checkbox.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/list_item_icon_text.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/list_position.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/local_sample.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/local_service_binding.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/local_service_controller.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/log_text_box_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/mapview.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/marquee.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/mediaplayer_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/mediaplayer_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/morse_code.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/notify_with_text.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/notifying_controller.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/preference_widget_mypreference.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_3.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_4.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/radio_group_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/ratingbar_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/read_asset.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/receive_result.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_enter.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_getter.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_main.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/relative_layout_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/relative_layout_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/remote_service_binding.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/remote_service_controller.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/resources.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/save_restore_state.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/scroll_view_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/scroll_view_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar3.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/search_invoke.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/search_query_results.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/seekbar_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/select_dialog.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/send_result.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/service_start_arguments_controller.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/shape_drawable_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/spinner_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/status_bar_balloon.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/status_bar_notifications.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/styled_text.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/surface_view_overlay.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_10.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_11.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_12.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_4.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_5.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_6.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_7.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_8.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_9.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/tabs1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/text_switcher_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/translucent_background.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/videoview.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/layout/visibility_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/layout/webview_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/NumericSprite.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentActivity.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.java
+
+http://developer.android.com/guide/samples/ApiDemos/res/menu/category_order.html
+http://developer.android.com/guide/samples/ApiDemos/res/menu/checkable.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/menu/disabled.html
+http://developer.android.com/guide/samples/ApiDemos/res/menu/groups.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/menu/order.html
+http://developer.android.com/guide/samples/ApiDemos/res/menu/shortcuts.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/menu/submenu.html
+http://developer.android.com/guide/samples/ApiDemos/res/menu/title_icon.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/menu/title_only.html
+http://developer.android.com/guide/samples/ApiDemos/res/menu/visible.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.java
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/alert_dialog_icon.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/animated_gif.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/app_sample_code.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/arrow_down_float.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/arrow_up_float.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/balloons.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/beach.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/black_box.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/black_opaque_box.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/box.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/button.9.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/circular_progress.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/filled_box.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/frog.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_background_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_4.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_5.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_6.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_7.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_8.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/ic_popup_reminder.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/icon48x48_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/icon48x48_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/line.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo2.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo4.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo5.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo6.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/picture_frame.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/progress_circular_background.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/progress_particle.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/robot.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_0.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_4.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_5.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_6.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_7.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_0.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_1.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_2.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_3.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_4.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_5.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_6.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_7.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_state2.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_vertical_thumb.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_vertical_track.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_1.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_2.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_3.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_4.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_5.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/star_big_on.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_happy.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_neutral.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_sad.html
+http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_sample.html
+
+http://developer.android.com/guide/samples/LunarLander/res/layout/lunar_layout.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.java
+
+http://developer.android.com/reference/android/hardware/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.java
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePadProvider.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceController.java
+
+http://developer.android.com/reference/junit/runner/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.java
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePad.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Projector.java
+
+http://developer.android.com/guide/samples/LunarLander/tests/src/index.html
+http://developer.android.com/guide/samples/LunarLander/tests/AndroidManifest.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.java
+
+http://developer.android.com/guide/samples/LunarLander/res/drawable/app_lunar_lander.html
+http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_crashed.html
+
+http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_firing.html
+http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_plain.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/StyledText.java
+
+http://developer.android.com/reference/org/apache/http/package-descr.html
+http://developer.android.com/reference/javax/net/ssl/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.java
+
+http://developer.android.com/guide/samples/LunarLander/res/values/strings.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/cycle_7.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/fade.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/hyperspace_in.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/hyperspace_out.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_row_left_slide.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_row_right_slide.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_table.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_bottom_to_top_slide.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_grid_fade.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_grid_inverse_fade.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_random_fade.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_wave_scale.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/push_left_in.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/push_left_out.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/push_up_in.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/push_up_out.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/shake.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_left.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_right.html
+http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_top_to_bottom.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/anim/wave_scale.html
+
+http://developer.android.com/guide/tutorials/views/hello-datepicker.html
+
+http://developer.android.com/guide/tutorials/views/hello-timepicker.html
+http://developer.android.com/guide/tutorials/views/hello-autocomplete.html
+
+http://developer.android.com/guide/tutorials/views/hello-gallery.html
+http://developer.android.com/guide/tutorials/views/hello-tabwidget.html
+
+http://developer.android.com/guide/tutorials/views/hello-mapview.html
+http://developer.android.com/guide/tutorials/views/hello-webview.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextActivity.java
+
+http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NoteEditor.java
+
+http://developer.android.com/reference/java/util/concurrent/locks/package-descr.html
+http://developer.android.com/guide/samples/NotePad/tests/src/com/example/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout5.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout6.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout7.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout8.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout9.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout5.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout6.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout7.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout8.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout9.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline6.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline7.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RadioGroup1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Visibility1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List5.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List6.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List7.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List8.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/CustomView1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageButton1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Spinner1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageView1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionFocus.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionScroll.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionView.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation5.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation6.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation7.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout10.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List10.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List11.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List12.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List13.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List14.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List9.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewCompassDemo.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewDemo.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/SeekBar1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs2.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs3.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/WebView1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/LabelMaker.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/CustomView1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation7.java
+
+http://developer.android.com/reference/android/text/method/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyWithText.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionScroll.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RadioGroup1.java
+
+http://developer.android.com/reference/org/apache/http/entity/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleActivity.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/WebView1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List14.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout9.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline7.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout6.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/HelloWorld.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.java
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout7.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixStack.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout5.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService_Service.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List6.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.java
+
+http://developer.android.com/reference/org/apache/http/protocol/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.java
+
+http://developer.android.com/guide/samples/LunarLander/src/com/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline4.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferenceDependencies.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceView.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.java
+
+http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/index.html
+http://developer.android.com/reference/javax/security/auth/callback/package-descr.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List5.java
+
+http://developer.android.com/reference/javax/sql/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List9.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List8.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Link.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox1.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Marquee.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List7.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout10.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline6.java
+
+http://developer.android.com/reference/android/location/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.java
+
+http://developer.android.com/reference/java/util/regex/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Cube.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLColor.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLFace.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLShape.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLVertex.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLWorld.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Kube.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/KubeRenderer.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Layer.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/M4.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar4.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List12.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation4.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLWorld.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.java
+
+http://developer.android.com/reference/org/apache/http/cookie/params/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout4.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/StatusBarNotifications.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.java
+
+http://developer.android.com/reference/java/security/cert/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List13.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/KubeRenderer.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SendResult.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout9.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsSelectInstrumentation.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageButton1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout8.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Kube.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls1.java
+
+http://developer.android.com/reference/org/apache/http/util/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Layer.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List10.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List4.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar1.java
+
+http://developer.android.com/reference/java/security/interfaces/package-descr.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation5.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout5.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageView.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLColor.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Visibility1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List3.java
+
+http://developer.android.com/guide/samples/LunarLander/res/drawable-port/earthrise.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout7.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Spinner1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLVertex.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout6.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionFocus.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout4.java
+
+http://developer.android.com/guide/samples/LunarLander/src/com/example/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/M4.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionView.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MenuInflateFromXml.java
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete3.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Cube.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout8.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List2.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Marquee.java
+
+http://developer.android.com/guide/samples/ApiDemos/res/values/arrays.html
+http://developer.android.com/guide/samples/ApiDemos/res/values/attrs.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/values/colors.html
+http://developer.android.com/guide/samples/ApiDemos/res/values/ids.html
+
+http://developer.android.com/guide/samples/ApiDemos/res/values/strings.html
+http://developer.android.com/guide/samples/ApiDemos/res/values/styles.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLShape.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation6.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewCompassDemo.java
+
+http://developer.android.com/guide/samples/LunarLander/tests/src/com/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List11.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageView1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLFace.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar3.java
+
+http://developer.android.com/guide/samples/LunarLander/src/com/example/android/index.html
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout1.java
+
+http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/index.html
+
+http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/NotePadTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/SeekBar1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List1.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextRenderer.java
+
+http://developer.android.com/guide/samples/NotePad/res/drawable/index.html
+http://developer.android.com/guide/samples/NotePad/res/layout/index.html
+
+http://developer.android.com/guide/samples/NotePad/res/values/index.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.java
+
+http://developer.android.com/guide/samples/NotePad/res/drawable/app_notes.html
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/AllTests.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosApplicationTests.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewDemo.java
+
+http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/NotePadTest.java
+
+http://developer.android.com/guide/samples/NotePad/res/values/strings.html
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete2.java
+
+http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/index.html
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2ActivityTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2AndroidTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosTest.java
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosApplicationTests.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/index.html
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/AllTests.java
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/MorseCodeConverterTest.html
+
+http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/ForwardingTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/LocalServiceTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2AndroidTest.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Link.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemos.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemosApplication.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/ForwardingTest.java
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2ActivityTest.java
+
+http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/MorseCodeConverterTest.java
+
+http://developer.android.com/guide/samples/NotePad/res/layout/note_editor.html
+http://developer.android.com/guide/samples/NotePad/res/layout/noteslist_item.html
+
+http://developer.android.com/guide/samples/NotePad/res/layout/title_editor.html
+http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/index.html
+
+http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/LocalServiceTest.java
+
+http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.html
+
+http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarView.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCode.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCodeConverter.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemosApplication.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Transition3d.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemos.java
+
+http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/LunarLanderTest.html
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCode.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCodeConverter.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.java
+
+http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
+
+http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/Sensors.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.java
+
+http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/LunarLanderTest.java
+
+http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Transition3d.java
\ No newline at end of file
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index cf72f38..42e28e8 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -739,6 +739,8 @@
             if (r != null) {
                ((BitmapDrawable) drawable).setDensityScale(r.getDisplayMetrics());
             }
+        } else if (name.equals("nine-patch")) {
+            drawable = new NinePatchDrawable();
         } else {
             throw new XmlPullParserException(parser.getPositionDescription() +
                     ": invalid drawable tag " + name);
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index 3ded37b..dace96c 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -17,6 +17,15 @@
 package android.graphics.drawable;
 
 import android.graphics.*;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * 
@@ -32,6 +41,9 @@
     private Paint mPaint;
     private boolean mMutated;
 
+    NinePatchDrawable() {
+    }
+
     public NinePatchDrawable(Bitmap bitmap, byte[] chunk, Rect padding, String srcName) {
         this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding));
     }
@@ -40,6 +52,13 @@
         this(new NinePatchState(patch, null));
     }
 
+    private void setNinePatchState(NinePatchState state) {
+        mNinePatchState = state;
+        mNinePatch = state.mNinePatch;
+        mPadding = state.mPadding;
+        if (state.mDither) setDither(state.mDither);
+    }
+
     // overrides
 
     @Override
@@ -73,6 +92,55 @@
         getPaint().setDither(dither);
     }
 
+    @Override
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+            throws XmlPullParserException, IOException {
+        super.inflate(r, parser, attrs);
+
+        TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.NinePatchDrawable);
+
+        final int id = a.getResourceId(com.android.internal.R.styleable.NinePatchDrawable_src, 0);
+        if (id == 0) {
+            throw new XmlPullParserException(parser.getPositionDescription() +
+                    ": <nine-patch> requires a valid src attribute");
+        }
+
+        final boolean dither = a.getBoolean(
+                com.android.internal.R.styleable.NinePatchDrawable_dither, false);
+        final BitmapFactory.Options options = new BitmapFactory.Options();
+        if (dither) {
+            options.inDither = false;
+        }
+
+        final Rect padding = new Rect();        
+        Bitmap bitmap = null;
+
+        try {
+            final TypedValue value = new TypedValue();
+            final InputStream is = r.openRawResource(id, value);
+
+            bitmap = BitmapFactory.decodeStream(r, value, is, padding, options);
+
+            is.close();
+        } catch (IOException e) {
+            // Ignore
+        }
+
+        if (bitmap == null) {
+            throw new XmlPullParserException(parser.getPositionDescription() +
+                    ": <nine-patch> requires a valid src attribute");
+        } else if (bitmap.getNinePatchChunk() == null) {
+            throw new XmlPullParserException(parser.getPositionDescription() +
+                    ": <nine-patch> requires a valid 9-patch source image");
+        }
+
+        setNinePatchState(new NinePatchState(
+                new NinePatch(bitmap, bitmap.getNinePatchChunk(), "XML 9-patch"), padding, dither));
+
+        a.recycle();
+    }
+
+
     public Paint getPaint() {
         if (mPaint == null) {
             mPaint = new Paint();
@@ -141,17 +209,24 @@
     final static class NinePatchState extends ConstantState {
         final NinePatch mNinePatch;
         final Rect mPadding;
+        final boolean mDither;
         int mChangingConfigurations;
 
         NinePatchState(NinePatch ninePatch, Rect padding) {
+            this(ninePatch, padding, false);
+        }
+
+        NinePatchState(NinePatch ninePatch, Rect rect, boolean dither) {
             mNinePatch = ninePatch;
-            mPadding = padding;
+            mPadding = rect;
+            mDither = dither;
         }
 
         NinePatchState(NinePatchState state) {
             mNinePatch = new NinePatch(state.mNinePatch);
             mPadding = new Rect(state.mPadding);
             mChangingConfigurations = state.mChangingConfigurations;
+            mDither = state.mDither;
         }
 
         @Override
@@ -166,9 +241,7 @@
     }
 
     private NinePatchDrawable(NinePatchState state) {
-        mNinePatchState = state;
-        mNinePatch = state.mNinePatch;
-        mPadding = state.mPadding;
+        setNinePatchState(state);
     }
 }
 
diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java
index 475825c..d22a4ba 100644
--- a/graphics/java/android/graphics/drawable/StateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/StateListDrawable.java
@@ -203,7 +203,20 @@
     public Drawable getStateDrawable(int index) {
         return mStateListState.getChildren()[index];
     }
-
+    
+    /**
+     * Gets the index of the drawable with the provided state set.
+     * 
+     * @param stateSet the state set to look up
+     * @return the index of the provided state set, or -1 if not found
+     * @hide pending API council
+     * @see #getStateDrawable(int)
+     * @see #getStateSet(int)
+     */
+    public int getStateDrawableIndex(int[] stateSet) {
+        return mStateListState.indexOfStateSet(stateSet);
+    }
+    
     @Override
     public Drawable mutate() {
         if (!mMutated && super.mutate() == this) {
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index dd585c9..ff64855 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -125,7 +125,8 @@
      * channelCount:       Number of PCM channels (e.g 2 for stereo).
      * frameCount:         Total size of track PCM buffer in frames. This defines the
      *                     latency of the track.
-     * flags:              Reserved for future use.
+     * flags:              A bitmask of acoustic values from enum record_flags.  It enables
+     *                     AGC, NS, and IIR.
      * cbf:                Callback function. If not null, this function is called periodically
      *                     to provide new PCM data.
      * notificationFrames: The callback function is called each time notificationFrames PCM
@@ -133,6 +134,12 @@
      * user                Context for use by the callback receiver.
      */
 
+     enum record_flags {
+         RECORD_AGC_ENABLE = AudioSystem::AGC_ENABLE,
+         RECORD_NS_ENABLE  = AudioSystem::NS_ENABLE,
+         RECORD_IIR_ENABLE = AudioSystem::TX_IIR_ENABLE
+     };
+
                         AudioRecord(int streamType,
                                     uint32_t sampleRate = 0,
                                     int format          = 0,
diff --git a/include/media/IMediaRecorder.h b/include/media/IMediaRecorder.h
index 0dff84e..eace996 100644
--- a/include/media/IMediaRecorder.h
+++ b/include/media/IMediaRecorder.h
@@ -24,6 +24,7 @@
 
 class ISurface;
 class ICamera;
+class IMediaPlayerClient;
 
 class IMediaRecorder: public IInterface
 {
@@ -41,6 +42,7 @@
     virtual	status_t		setOutputFile(int fd, int64_t offset, int64_t length) = 0;
     virtual	status_t		setVideoSize(int width, int height) = 0;
     virtual	status_t		setVideoFrameRate(int frames_per_second) = 0;
+    virtual     status_t                setListener(const sp<IMediaPlayerClient>& listener) = 0;
     virtual	status_t		prepare() = 0;
     virtual	status_t		getMaxAmplitude(int* max) = 0;
     virtual	status_t		start() = 0;
diff --git a/include/media/PVMediaRecorder.h b/include/media/PVMediaRecorder.h
index f795d04..3315c59 100644
--- a/include/media/PVMediaRecorder.h
+++ b/include/media/PVMediaRecorder.h
@@ -19,6 +19,7 @@
 #define ANDROID_PVMEDIARECORDER_H
 
 #include <media/mediarecorder.h>
+#include <media/IMediaPlayerClient.h>
 
 namespace android {
 
@@ -44,6 +45,7 @@
     status_t setPreviewSurface(const sp<ISurface>& surface);
     status_t setOutputFile(const char *path);
     status_t setOutputFile(int fd, int64_t offset, int64_t length);
+    status_t setListener(const sp<IMediaPlayerClient>& listener);
     status_t prepare();
     status_t start();
     status_t stop();
diff --git a/include/media/mediarecorder.h b/include/media/mediarecorder.h
index 436e8f1..8991f08 100644
--- a/include/media/mediarecorder.h
+++ b/include/media/mediarecorder.h
@@ -19,6 +19,7 @@
 #define ANDROID_MEDIARECORDER_H
 
 #include <utils.h>
+#include <media/IMediaPlayerClient.h>
 
 namespace android {
 
@@ -87,7 +88,24 @@
     MEDIA_RECORDER_RECORDING             = 1 << 4,
 };
 
-class MediaRecorder
+// The "msg" code passed to the listener in notify.
+enum {
+    MEDIA_RECORDER_EVENT_ERROR                    = 1
+};
+
+enum {
+    MEDIA_RECORDER_ERROR_UNKNOWN                  = 1
+};
+
+// ----------------------------------------------------------------------------
+// ref-counted object for callbacks
+class MediaRecorderListener: virtual public RefBase
+{
+public:
+    virtual void notify(int msg, int ext1, int ext2) = 0;
+};
+
+class MediaRecorder : public BnMediaPlayerClient
 {
 public:
     MediaRecorder();
@@ -105,6 +123,7 @@
     status_t    setOutputFile(int fd, int64_t offset, int64_t length);
     status_t    setVideoSize(int width, int height);
     status_t    setVideoFrameRate(int frames_per_second);
+    status_t    setListener(const sp<MediaRecorderListener>& listener);
     status_t    prepare();
     status_t    getMaxAmplitude(int* max);
     status_t    start();
@@ -113,18 +132,22 @@
     status_t    init();
     status_t    close();
     status_t    release();
+    void        notify(int msg, int ext1, int ext2);
 
 private:
     void                    doCleanUp();
     status_t                doReset();
 
-    sp<IMediaRecorder>      mMediaRecorder;
-    media_recorder_states   mCurrentState;
-    bool                    mIsAudioSourceSet;
-    bool                    mIsVideoSourceSet;
-    bool                    mIsAudioEncoderSet;
-    bool                    mIsVideoEncoderSet;
-    bool                    mIsOutputFileSet;
+    sp<IMediaRecorder>          mMediaRecorder;
+    sp<MediaRecorderListener>   mListener;
+    media_recorder_states       mCurrentState;
+    bool                        mIsAudioSourceSet;
+    bool                        mIsVideoSourceSet;
+    bool                        mIsAudioEncoderSet;
+    bool                        mIsVideoEncoderSet;
+    bool                        mIsOutputFileSet;
+    Mutex                       mLock;
+    Mutex                       mNotifyLock;
 };
 
 };  // namespace android
diff --git a/include/ui/CameraHardwareInterface.h b/include/ui/CameraHardwareInterface.h
index b068c52..73036f0 100644
--- a/include/ui/CameraHardwareInterface.h
+++ b/include/ui/CameraHardwareInterface.h
@@ -87,6 +87,9 @@
     /** Return the IMemoryHeap for the preview image heap */
     virtual sp<IMemoryHeap>         getPreviewHeap() const = 0;
 
+    /** Return the IMemoryHeap for the raw image heap */
+    virtual sp<IMemoryHeap>         getRawHeap() const = 0;
+
     /**
      * Start preview mode. When a preview image is available
      * preview_callback is called with the user parameter. The
diff --git a/include/utils/ResourceTypes.h b/include/utils/ResourceTypes.h
index d83a33c..7d3fcf2 100644
--- a/include/utils/ResourceTypes.h
+++ b/include/utils/ResourceTypes.h
@@ -1101,16 +1101,22 @@
         return false;
     }
     
-    // Return true if 'this' can be considered a match for the parameters in
+    // Return true if 'this' can be considered a match for the parameters in 
     // 'settings'.
+    // Note this is asymetric.  A default piece of data will match every request
+    // but a request for the default should not match odd specifics
+    // (ie, request with no mcc should not match a particular mcc's data)
+    // settings is the requested settings
     inline bool match(const ResTable_config& settings) const {
         if (imsi != 0) {
-            if (settings.mcc != 0 && mcc != 0
-                && mcc != settings.mcc) {
+            if ((settings.mcc != 0 && mcc != 0
+                 && mcc != settings.mcc) || 
+                (settings.mcc == 0 && mcc != 0)) {
                 return false;
             }
-            if (settings.mnc != 0 && mnc != 0
-                && mnc != settings.mnc) {
+            if ((settings.mnc != 0 && mnc != 0
+                 && mnc != settings.mnc) ||
+                (settings.mnc == 0 && mnc != 0)) {
                 return false;
             }
         }
diff --git a/libs/audioflinger/A2dpAudioInterface.cpp b/libs/audioflinger/A2dpAudioInterface.cpp
index d1b7af3..eb00f8c 100644
--- a/libs/audioflinger/A2dpAudioInterface.cpp
+++ b/libs/audioflinger/A2dpAudioInterface.cpp
@@ -131,8 +131,7 @@
 // ----------------------------------------------------------------------------
 
 A2dpAudioInterface::A2dpAudioStreamOut::A2dpAudioStreamOut() :
-    mFd(-1), mStandby(true), mStartCount(0), mRetryCount(0), mData(NULL),
-    mInitialized(false)
+    mFd(-1), mStandby(true), mStartCount(0), mRetryCount(0), mData(NULL)
 {
     // use any address by default
     strncpy(mA2dpAddress, "00:00:00:00:00:00", sizeof(mA2dpAddress));
@@ -167,13 +166,14 @@
     status_t status = NO_INIT;
     size_t remaining = bytes;
 
-    if (!mInitialized) {
-        status = a2dp_init(mA2dpAddress, 44100, 2, &mData);
+    if (!mData) {
+        status = a2dp_init(44100, 2, &mData);
         if (status < 0) {
             LOGE("a2dp_init failed err: %d\n", status);
+            mData = NULL;
             goto Error;
         }
-        mInitialized = true;
+        a2dp_set_sink(mData, mA2dpAddress);
     }
     
     while (remaining > 0) {
@@ -191,7 +191,6 @@
     return bytes;
 
 Error:
-    close();
     // Simulate audio output timing in case of error
     usleep(bytes * 1000000 / frameSize() / sampleRate());
 
@@ -218,7 +217,8 @@
 
     if (strcmp(address, mA2dpAddress)) {
         strcpy(mA2dpAddress, address);
-        close();
+        if (mData)
+            a2dp_set_sink(mData, mA2dpAddress);
     }
     
     return NO_ERROR;
@@ -229,7 +229,6 @@
     if (mData) {
         a2dp_cleanup(mData);
         mData = NULL;
-        mInitialized = false;
     }
     return NO_ERROR;
 }
diff --git a/libs/audioflinger/A2dpAudioInterface.h b/libs/audioflinger/A2dpAudioInterface.h
index 5bef5da..a56e8a0 100644
--- a/libs/audioflinger/A2dpAudioInterface.h
+++ b/libs/audioflinger/A2dpAudioInterface.h
@@ -96,7 +96,6 @@
                 int         mRetryCount;
                 char        mA2dpAddress[20];
                 void*       mData;
-                bool        mInitialized;
     };
 
     Mutex                   mLock;
diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index 557d93b..92c40e9 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
@@ -171,13 +171,6 @@
      } else {
         LOGE("Couldn't even initialize the stubbed audio hardware!");
     }
-
-    char value[PROPERTY_VALUE_MAX];
-    property_get("ro.audio.silent", value, "0");
-    if (atoi(value)) {
-        LOGD("Silence is golden");
-        setMasterMute(true);
-    }
 }
 
 AudioFlinger::~AudioFlinger()
@@ -995,6 +988,16 @@
                 IPCThreadState::self()->flushCommands();
                 mWaitWorkCV.wait(mLock);
                 LOGV("Audio hardware exiting standby, output %d\n", mOutputType);
+                
+                if (mMasterMute == false) {
+                    char value[PROPERTY_VALUE_MAX];
+                    property_get("ro.audio.silent", value, "0");
+                    if (atoi(value)) {
+                        LOGD("Silence is golden");
+                        setMasterMute(true);
+                    }                    
+                }
+                
                 standbyTime = systemTime() + kStandbyTimeInNsecs;
                 continue;
             }
diff --git a/libs/audioflinger/AudioFlinger.h b/libs/audioflinger/AudioFlinger.h
index dfbb1e9..77f064b 100644
--- a/libs/audioflinger/AudioFlinger.h
+++ b/libs/audioflinger/AudioFlinger.h
@@ -223,10 +223,7 @@
             enum track_flags {
                 STEPSERVER_FAILED = 0x01, //  StepServer could not acquire cblk->lock mutex
                 SYSTEM_FLAGS_MASK = 0x0000ffffUL,
-
-                AUDIO_IN_AGC_ENABLE = AudioSystem::AGC_ENABLE << 16,
-                AUDIO_IN_NS_ENABLE  = AudioSystem::NS_ENABLE << 16,
-                AUDIO_IN_IIR_ENABLE = AudioSystem::TX_IIR_ENABLE << 16
+                // The upper 16 bits are used for track-specific flags.
             };
 
                                 TrackBase(const sp<MixerThread>& mixerThread,
diff --git a/libs/audioflinger/AudioHardwareGeneric.h b/libs/audioflinger/AudioHardwareGeneric.h
index 1d58389..c949aa1 100644
--- a/libs/audioflinger/AudioHardwareGeneric.h
+++ b/libs/audioflinger/AudioHardwareGeneric.h
@@ -47,7 +47,7 @@
     virtual size_t      bufferSize() const { return 4096; }
     virtual int         channelCount() const { return 2; }
     virtual int         format() const { return AudioSystem::PCM_16_BIT; }
-    virtual uint32_t    latency() const { return 0; }
+    virtual uint32_t    latency() const { return 20; }
     virtual status_t    setVolume(float volume) { return INVALID_OPERATION; }
     virtual ssize_t     write(const void* buffer, size_t bytes);
     virtual status_t    standby();
diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp
index 6c60b85..b3cbda1 100644
--- a/libs/ui/Camera.cpp
+++ b/libs/ui/Camera.cpp
@@ -110,6 +110,8 @@
     if (c->mCamera != 0) {
         c->mCamera->asBinder()->linkToDeath(c);
         c->mStatus = NO_ERROR;
+    } else {
+        c.clear();
     }
     return c;
 }
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp
index 74271ba..5f407a9 100644
--- a/libs/utils/Threads.cpp
+++ b/libs/utils/Threads.cpp
@@ -896,6 +896,7 @@
 {
     mLock.lock();
     if (mNumReaders == 0) {
+        mLock.unlock();
         LOG(LOG_WARN, "thread",
             "WARNING: unlockForRead requested, but not locked\n");
         return;
@@ -961,6 +962,7 @@
 {
     mLock.lock();
     if (mNumWriters == 0) {
+        mLock.unlock();
         LOG(LOG_WARN, "thread",
             "WARNING: unlockForWrite requested, but not locked\n");
         return;
@@ -972,7 +974,7 @@
     //printf(" wrlk held %.3f msec\n",
     //    (double) mDebugTimer.durationUsecs() / 1000.0);
 #endif
-    // mWriteWaiter.signal();       // should other writers get first dibs?
+    mWriteWaiter.signal();         // should other writers get first dibs?
     //printf("+++ signaling readers (if any)\n");
     mReadWaiter.broadcast();        // wake all readers (if any)
     mLock.unlock();
diff --git a/location/java/com/android/internal/location/CellState.java b/location/java/com/android/internal/location/CellState.java
index 8f6ca1f..eb6535e 100644
--- a/location/java/com/android/internal/location/CellState.java
+++ b/location/java/com/android/internal/location/CellState.java
@@ -168,15 +168,8 @@
         }
     }
 
-    public void updateRadioType(TelephonyManager telephonyManager) {
-        // Get radio type
-        int radioType = telephonyManager.getNetworkType();
-        if (radioType == TelephonyManager.NETWORK_TYPE_GPRS ||
-            radioType == TelephonyManager.NETWORK_TYPE_EDGE) {
-            mRadioType = RADIO_TYPE_GPRS;
-        } else if (radioType == TelephonyManager.NETWORK_TYPE_UMTS) {
-            mRadioType = RADIO_TYPE_WCDMA;
-        }
+    public void updateRadioType(int radioType) {
+        mRadioType = radioType;
 
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.d(TAG, "updateRadioType(): " + mLac +"," + mCid + "," + mMnc +"," + mMcc + "," +
diff --git a/location/java/com/android/internal/location/INetworkLocationManager.java b/location/java/com/android/internal/location/INetworkLocationManager.java
index 6b632fd..d85ff0a 100644
--- a/location/java/com/android/internal/location/INetworkLocationManager.java
+++ b/location/java/com/android/internal/location/INetworkLocationManager.java
@@ -28,7 +28,7 @@
 
     /* callback to allow installation to occur in Location Manager's thread */
     public interface InstallCallback {
-        void installNetworkLocationProvider(Context context, INetworkLocationManager manager);
+        void installNetworkLocationProvider(INetworkLocationManager manager);
     }
     
     void setInstallCallback(InstallCallback callback);
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index fd990fe..0ef7760 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -532,12 +532,19 @@
      * @param audioData the array to which the recorded audio data is written.
      * @param offsetInBytes index in audioData from which the data is written.
      * @param sizeInBytes the number of requested bytes.
-     * @return the number of bytes that were read or -1 if the object wasn't properly
-     *    initialized. The number of bytes will not exceed sizeInBytes.
+     * @return the number of bytes that were read or or {@link #ERROR_INVALID_OPERATION}
+     *    if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
+     *    the parameters don't resolve to valid data and indexes.
+     *    The number of bytes will not exceed sizeInBytes.
      */    
     public int read(byte[] audioData, int offsetInBytes, int sizeInBytes) {
         if (mState != STATE_INITIALIZED) {
-            return -1;
+            return ERROR_INVALID_OPERATION;
+        }
+        
+        if ( (audioData == null) || (offsetInBytes < 0 ) || (sizeInBytes < 0) 
+                || (offsetInBytes + sizeInBytes > audioData.length)) {
+            return ERROR_BAD_VALUE;
         }
 
         return native_read_in_byte_array(audioData, offsetInBytes, sizeInBytes);
@@ -549,12 +556,19 @@
      * @param audioData the array to which the recorded audio data is written.
      * @param offsetInShorts index in audioData from which the data is written.
      * @param sizeInShorts the number of requested shorts.
-     * @return the number of shorts that were read. or -1 if the object wasn't properly
-     *    initialized. The number of shorts will not exceed sizeInShorts
+     * @return the number of bytes that were read or or {@link #ERROR_INVALID_OPERATION}
+     *    if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
+     *    the parameters don't resolve to valid data and indexes.
+     *    The number of shorts will not exceed sizeInShorts.
      */    
     public int read(short[] audioData, int offsetInShorts, int sizeInShorts) {
         if (mState != STATE_INITIALIZED) {
-            return -1;
+            return ERROR_INVALID_OPERATION;
+        }
+        
+        if ( (audioData == null) || (offsetInShorts < 0 ) || (sizeInShorts < 0) 
+                || (offsetInShorts + sizeInShorts > audioData.length)) {
+            return ERROR_BAD_VALUE;
         }
 
         return native_read_in_short_array(audioData, offsetInShorts, sizeInShorts);
@@ -566,12 +580,18 @@
      * is not a direct buffer, this method will always return 0.
      * @param audioBuffer the direct buffer to which the recorded audio data is written.
      * @param sizeInBytes the number of requested bytes.
-     * @return the number of bytes that were read or -1 if the object wasn't properly
-     *    initialized. The number of bytes will not exceed sizeInBytes.
+     * @return the number of bytes that were read or or {@link #ERROR_INVALID_OPERATION}
+     *    if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
+     *    the parameters don't resolve to valid data and indexes.
+     *    The number of bytes will not exceed sizeInBytes.
      */    
     public int read(ByteBuffer audioBuffer, int sizeInBytes) {
         if (mState != STATE_INITIALIZED) {
-            return -1;
+            return ERROR_INVALID_OPERATION;
+        }
+        
+        if ( (audioBuffer == null) || (sizeInBytes < 0) ) {
+            return ERROR_BAD_VALUE;
         }
 
         return native_read_in_direct_buffer(audioBuffer, sizeInBytes);
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index e32835c..997cd44 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -436,6 +436,15 @@
     public int getSampleRate() {
         return mSampleRate;
     }
+    
+    /**
+     * @hide
+     * Returns the current playback rate in Hz. Note that this rate may differ from one set using
+     * {@link #setPlaybackRate(int)} as the value effectively set is implementation-dependent.
+     */
+    public int getPlaybackRate() {
+        return native_get_playback_rate();
+    }
 
     /**
      * Returns the configured audio data format. See {@link AudioFormat#ENCODING_PCM_16BIT}
@@ -523,8 +532,8 @@
     /**
      *  Returns the hardware output sample rate
      */
-    static public int getNativeOutputSampleRate() {
-        return native_get_output_sample_rate();
+    static public int getNativeOutputSampleRate(int streamType) {
+        return native_get_output_sample_rate(streamType);
     }
     
     /**
@@ -650,16 +659,19 @@
      * content. Setting it to half the sample rate of the content will cause the playback to
      * last twice as long, but will also result result in a negative pitch shift.
      * The current implementation supports a maximum sample rate of twice the hardware output
-     * sample rate (see {@link #getNativeOutputSampleRate()}). Use {@link #getSampleRate()} to
+     * sample rate (see {@link #getNativeOutputSampleRate(int)}). Use {@link #getSampleRate()} to
      * check the rate actually used in hardware after potential clamping.
      * @param sampleRateInHz
-     * @return error code or success, see {@link #SUCCESS},
+     * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
      *    {@link #ERROR_INVALID_OPERATION}
      */
     public int setPlaybackRate(int sampleRateInHz) {
         if (mState != STATE_INITIALIZED) {
             return ERROR_INVALID_OPERATION;
         }
+        if (sampleRateInHz <= 0) {
+            return ERROR_BAD_VALUE;
+        }
         native_set_playback_rate(sampleRateInHz);
         return SUCCESS;
     }
@@ -699,7 +711,7 @@
      */
     public int setPlaybackHeadPosition(int positionInFrames) {
         synchronized(mPlayStateLock) {
-            if(mPlayState == PLAYSTATE_STOPPED) {
+            if ((mPlayState == PLAYSTATE_STOPPED) || (mPlayState == PLAYSTATE_PAUSED)) {
                 return native_set_position(positionInFrames);
             } else {
                 return ERROR_INVALID_OPERATION;
@@ -717,6 +729,9 @@
      *    {@link #ERROR_INVALID_OPERATION}
      */
     public int setLoopPoints(int startInFrames, int endInFrames, int loopCount) {
+        if (mDataLoadMode == MODE_STREAM) {
+            return ERROR_INVALID_OPERATION;
+        }
         return native_set_loop(startInFrames, endInFrames, loopCount);
     }
 
@@ -806,8 +821,9 @@
      * @param audioData the array that holds the data to play.
      * @param offsetInBytes the offset in audioData where the data to play starts.
      * @param sizeInBytes the number of bytes to read in audioData after the offset.
-     * @return the number of bytes that were written or -1 if the object wasn't properly
-     *    initialized.
+     * @return the number of bytes that were written or {@link #ERROR_INVALID_OPERATION}
+     *    if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
+     *    the parameters don't resolve to valid data and indexes.
      */
 
     public int write(byte[] audioData,int offsetInBytes, int sizeInBytes) {
@@ -816,11 +832,14 @@
                 && (sizeInBytes > 0)) {
             mState = STATE_INITIALIZED;
         }
-        //TODO check if future writes should be forbidden for static tracks
-        //     or: how to update data for static tracks?
 
         if (mState != STATE_INITIALIZED) {
-            return -1;
+            return ERROR_INVALID_OPERATION;
+        }
+
+        if ( (audioData == null) || (offsetInBytes < 0 ) || (sizeInBytes < 0) 
+                || (offsetInBytes + sizeInBytes > audioData.length)) {
+            return ERROR_BAD_VALUE;
         }
 
         return native_write_byte(audioData, offsetInBytes, sizeInBytes, mAudioFormat);
@@ -832,8 +851,9 @@
      * @param audioData the array that holds the data to play.
      * @param offsetInShorts the offset in audioData where the data to play starts.
      * @param sizeInShorts the number of bytes to read in audioData after the offset.
-     * @return the number of shorts that were written or -1 if the object wasn't properly
-     *    initialized.
+     * @return the number of shorts that were written or {@link #ERROR_INVALID_OPERATION}
+      *    if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
+      *    the parameters don't resolve to valid data and indexes.
      */
 
     public int write(short[] audioData, int offsetInShorts, int sizeInShorts) {
@@ -842,11 +862,14 @@
                 && (sizeInShorts > 0)) {
             mState = STATE_INITIALIZED;
         }
-        //TODO check if future writes should be forbidden for static tracks
-        //     or: how to update data for static tracks?
-
+        
         if (mState != STATE_INITIALIZED) {
-            return -1;
+            return ERROR_INVALID_OPERATION;
+        }
+
+        if ( (audioData == null) || (offsetInShorts < 0 ) || (sizeInShorts < 0) 
+                || (offsetInShorts + sizeInShorts > audioData.length)) {
+            return ERROR_BAD_VALUE;
         }
 
         return native_write_short(audioData, offsetInShorts, sizeInShorts, mAudioFormat);
@@ -1007,7 +1030,7 @@
 
     private native final int native_set_loop(int start, int end, int loopCount);
 
-    static private native final int native_get_output_sample_rate();
+    static private native final int native_get_output_sample_rate(int streamType);
     static private native final int native_get_min_buff_size(
             int sampleRateInHz, int channelConfig, int audioFormat);
 
diff --git a/media/java/android/media/JetPlayer.java b/media/java/android/media/JetPlayer.java
index bfa2f80..9de0eec 100644
--- a/media/java/android/media/JetPlayer.java
+++ b/media/java/android/media/JetPlayer.java
@@ -25,6 +25,7 @@
 import android.os.Looper;
 import android.os.Handler;
 import android.os.Message;
+import android.util.AndroidRuntimeException;
 import android.util.Log;
 
 /**
@@ -163,8 +164,12 @@
     
     
     public boolean loadJetFile(AssetFileDescriptor afd) {
+        long len = afd.getLength();
+        if (len < 0) {
+            throw new AndroidRuntimeException("no length for fd");
+        }
         return native_loadJetFromFileD(
-                afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
+                afd.getFileDescriptor(), afd.getStartOffset(), len);
     }
     
     
@@ -251,7 +256,9 @@
                             mJet,
                             (short)((msg.arg1 & JET_EVENT_SEG_MASK)   >> JET_EVENT_SEG_SHIFT),
                             (byte) ((msg.arg1 & JET_EVENT_TRACK_MASK) >> JET_EVENT_TRACK_SHIFT),
-                            (byte) ((msg.arg1 & JET_EVENT_CHAN_MASK)  >> JET_EVENT_CHAN_SHIFT),
+                            // JETCreator channel numbers start at 1, but the index starts at 0
+                            // in the .jet files
+                            (byte)(((msg.arg1 & JET_EVENT_CHAN_MASK)  >> JET_EVENT_CHAN_SHIFT) + 1),
                             (byte) ((msg.arg1 & JET_EVENT_CTRL_MASK)  >> JET_EVENT_CTRL_SHIFT),
                             (byte)  (msg.arg1 & JET_EVENT_VAL_MASK) );
                     }
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index c1a0c21..3a49a5f 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -18,6 +18,7 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.AssetFileDescriptor;
 import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.ParcelFileDescriptor;
@@ -137,11 +138,11 @@
             return;
         }
 
-        ParcelFileDescriptor fd = null;
+        AssetFileDescriptor fd = null;
         try {
             ContentResolver resolver = context.getContentResolver();
             try {
-                fd = resolver.openFileDescriptor(uri, "r");
+                fd = resolver.openAssetFileDescriptor(uri, "r");
             } catch(FileNotFoundException e) {
                 throw new IllegalArgumentException();
             }
@@ -152,7 +153,14 @@
             if (!descriptor.valid()) {
                 throw new IllegalArgumentException();
             }
-            setDataSource(descriptor);
+            // Note: using getDeclaredLength so that our behavior is the same
+            // as previous versions when the content provider is returning
+            // a full file.
+            if (fd.getDeclaredLength() < 0) {
+                setDataSource(descriptor);
+            } else {
+                setDataSource(descriptor, fd.getStartOffset(), fd.getDeclaredLength());
+            }
             return;
         } catch (SecurityException ex) {
         } finally {
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 601557d..fe1de8e 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -584,14 +584,21 @@
             return;
         }
 
-        ParcelFileDescriptor fd = null;
+        AssetFileDescriptor fd = null;
         try {
             ContentResolver resolver = context.getContentResolver();
-            fd = resolver.openFileDescriptor(uri, "r");
+            fd = resolver.openAssetFileDescriptor(uri, "r");
             if (fd == null) {
                 return;
             }
-            setDataSource(fd.getFileDescriptor());
+            // Note: using getDeclaredLength so that our behavior is the same
+            // as previous versions when the content provider is returning
+            // a full file.
+            if (fd.getDeclaredLength() < 0) {
+                setDataSource(fd.getFileDescriptor());
+            } else {
+                setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getDeclaredLength());
+            }
             return;
         } catch (SecurityException ex) {
         } catch (IOException ex) {
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 3609826..4906cbb 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -16,23 +16,27 @@
 
 package android.media;
 
-import android.view.Surface;
 import android.hardware.Camera;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.util.Log;
+import android.view.Surface;
 import java.io.IOException;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileDescriptor;
-import android.util.Log;
+import java.lang.ref.WeakReference;
 
 /**
  * Used to record audio and video. The recording control is based on a
- * simple state machine (see below). 
- * 
+ * simple state machine (see below).
+ *
  * <p><img src="{@docRoot}images/mediarecorder_state_diagram.gif" border="0" />
  * </p>
- * 
+ *
  * <p>A common case of using MediaRecorder to record audio works as follows:
- * 
+ *
  * <pre>MediaRecorder recorder = new MediaRecorder();
  * recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  * recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
@@ -45,39 +49,54 @@
  * recorder.reset();   // You can reuse the object by going back to setAudioSource() step
  * recorder.release(); // Now the object cannot be reused
  * </pre>
- * 
+ *
  * <p>See the <a href="{@docRoot}guide/topics/media/index.html">Audio and Video</a>
  * documentation for additional help with using MediaRecorder.
  */
 public class MediaRecorder
-{    
+{
     static {
         System.loadLibrary("media_jni");
     }
     private final static String TAG = "MediaRecorder";
-    
+
     // The two fields below are accessed by native methods
     @SuppressWarnings("unused")
     private int mNativeContext;
-    
+
     @SuppressWarnings("unused")
     private Surface mSurface;
 
     private String mPath;
     private FileDescriptor mFd;
+    private EventHandler mEventHandler;
+    private OnErrorListener mOnErrorListener;
 
     /**
      * Default constructor.
      */
     public MediaRecorder() {
-        native_setup();
+
+        Looper looper;
+        if ((looper = Looper.myLooper()) != null) {
+            mEventHandler = new EventHandler(this, looper);
+        } else if ((looper = Looper.getMainLooper()) != null) {
+            mEventHandler = new EventHandler(this, looper);
+        } else {
+            mEventHandler = null;
+        }
+
+        /* Native setup requires a weak reference to our object.
+         * It's easier to create it here than in C++.
+         */
+        native_setup(new WeakReference<MediaRecorder>(this));
     }
-  
+
     /**
      * Sets a Camera to use for recording. Use this function to switch
      * quickly between preview and capture mode without a teardown of
      * the camera object. Must call before prepare().
-     * 
+     *
      * @param c the Camera to use for recording
      */
     public native void setCamera(Camera c);
@@ -86,15 +105,15 @@
      * Sets a Surface to show a preview of recorded media (video). Calls this
      * before prepare() to make sure that the desirable preview display is
      * set.
-     * 
+     *
      * @param sv the Surface to use for the preview
      */
     public void setPreviewDisplay(Surface sv) {
         mSurface = sv;
     }
-    
+
     /**
-     * Defines the audio source. These constants are used with 
+     * Defines the audio source. These constants are used with
      * {@link MediaRecorder#setAudioSource(int)}.
      */
     public final class AudioSource {
@@ -108,7 +127,7 @@
     }
 
     /**
-     * Defines the video source. These constants are used with 
+     * Defines the video source. These constants are used with
      * {@link MediaRecorder#setVideoSource(int)}.
      */
     public final class VideoSource {
@@ -122,7 +141,7 @@
     }
 
     /**
-     * Defines the output format. These constants are used with 
+     * Defines the output format. These constants are used with
      * {@link MediaRecorder#setOutputFormat(int)}.
      */
     public final class OutputFormat {
@@ -140,7 +159,7 @@
     };
 
     /**
-     * Defines the audio encoding. These constants are used with 
+     * Defines the audio encoding. These constants are used with
      * {@link MediaRecorder#setAudioEncoder(int)}.
      */
     public final class AudioEncoder {
@@ -155,7 +174,7 @@
     }
 
     /**
-     * Defines the video encoding. These constants are used with 
+     * Defines the video encoding. These constants are used with
      * {@link MediaRecorder#setVideoEncoder(int)}.
      */
     public final class VideoEncoder {
@@ -172,50 +191,50 @@
     /**
      * Sets the audio source to be used for recording. If this method is not
      * called, the output file will not contain an audio track. The source needs
-     * to be specified before setting recording-parameters or encoders. Call 
+     * to be specified before setting recording-parameters or encoders. Call
      * this only before setOutputFormat().
-     * 
+     *
      * @param audio_source the audio source to use
      * @throws IllegalStateException if it is called after setOutputFormat()
      * @see android.media.MediaRecorder.AudioSource
-     */ 
+     */
     public native void setAudioSource(int audio_source)
             throws IllegalStateException;
 
     /**
      * Sets the video source to be used for recording. If this method is not
      * called, the output file will not contain an video track. The source needs
-     * to be specified before setting recording-parameters or encoders. Call 
+     * to be specified before setting recording-parameters or encoders. Call
      * this only before setOutputFormat().
-     * 
+     *
      * @param video_source the video source to use
      * @throws IllegalStateException if it is called after setOutputFormat()
      * @see android.media.MediaRecorder.VideoSource
-     */ 
+     */
     public native void setVideoSource(int video_source)
             throws IllegalStateException;
 
     /**
      * Sets the format of the output file produced during recording. Call this
      * after setAudioSource()/setVideoSource() but before prepare().
-     * 
-     * @param output_format the output format to use. The output format 
+     *
+     * @param output_format the output format to use. The output format
      * needs to be specified before setting recording-parameters or encoders.
      * @throws IllegalStateException if it is called after prepare() or before
      * setAudioSource()/setVideoSource().
      * @see android.media.MediaRecorder.OutputFormat
-     */ 
+     */
     public native void setOutputFormat(int output_format)
             throws IllegalStateException;
-    
+
     /**
      * Sets the width and height of the video to be captured.  Must be called
      * after setVideoSource(). Call this after setOutFormat() but before
      * prepare().
-     * 
+     *
      * @param width the width of the video to be captured
      * @param height the height of the video to be captured
-     * @throws IllegalStateException if it is called after 
+     * @throws IllegalStateException if it is called after
      * prepare() or before setOutputFormat()
      */
     public native void setVideoSize(int width, int height)
@@ -227,7 +246,7 @@
      * prepare().
      *
      * @param rate the number of frames per second of video to capture
-     * @throws IllegalStateException if it is called after 
+     * @throws IllegalStateException if it is called after
      * prepare() or before setOutputFormat().
      *
      * NOTE: On some devices that have auto-frame rate, this sets the
@@ -240,12 +259,12 @@
      * Sets the audio encoder to be used for recording. If this method is not
      * called, the output file will not contain an audio track. Call this after
      * setOutputFormat() but before prepare().
-     * 
+     *
      * @param audio_encoder the audio encoder to use.
      * @throws IllegalStateException if it is called before
      * setOutputFormat() or after prepare().
      * @see android.media.MediaRecorder.AudioEncoder
-     */ 
+     */
     public native void setAudioEncoder(int audio_encoder)
             throws IllegalStateException;
 
@@ -253,43 +272,43 @@
      * Sets the video encoder to be used for recording. If this method is not
      * called, the output file will not contain an video track. Call this after
      * setOutputFormat() and before prepare().
-     * 
+     *
      * @param video_encoder the video encoder to use.
      * @throws IllegalStateException if it is called before
      * setOutputFormat() or after prepare()
      * @see android.media.MediaRecorder.VideoEncoder
-     */ 
+     */
     public native void setVideoEncoder(int video_encoder)
             throws IllegalStateException;
 
     /**
      * Pass in the file descriptor of the file to be written. Call this after
      * setOutputFormat() but before prepare().
-     * 
+     *
      * @param fd an open file descriptor to be written into.
      * @throws IllegalStateException if it is called before
      * setOutputFormat() or after prepare()
-     */ 
+     */
     public void setOutputFile(FileDescriptor fd) throws IllegalStateException
     {
         mPath = null;
         mFd = fd;
     }
-  
+
     /**
      * Sets the path of the output file to be produced. Call this after
      * setOutputFormat() but before prepare().
-     * 
+     *
      * @param path The pathname to use.
      * @throws IllegalStateException if it is called before
      * setOutputFormat() or after prepare()
-     */ 
+     */
     public void setOutputFile(String path) throws IllegalStateException
     {
         mFd = null;
         mPath = path;
     }
-  
+
     // native implementation
     private native void _setOutputFile(FileDescriptor fd, long offset, long length)
         throws IllegalStateException, IOException;
@@ -299,7 +318,7 @@
      * Prepares the recorder to begin capturing and encoding data. This method
      * must be called after setting up the desired audio and video sources,
      * encoders, file format, etc., but before start().
-     * 
+     *
      * @throws IllegalStateException if it is called after
      * start() or before setOutputFormat().
      * @throws IOException if prepare fails otherwise.
@@ -307,8 +326,12 @@
     public void prepare() throws IllegalStateException, IOException
     {
         if (mPath != null) {
-            FileOutputStream f = new FileOutputStream(mPath);
-            _setOutputFile(f.getFD(), 0, 0);
+            FileOutputStream fos = new FileOutputStream(mPath);
+            try {
+                _setOutputFile(fos.getFD(), 0, 0);
+            } finally {
+                fos.close();
+            }
         } else if (mFd != null) {
             _setOutputFile(mFd, 0, 0);
         } else {
@@ -318,9 +341,9 @@
     }
 
     /**
-     * Begins capturing and encoding data to the file specified with 
+     * Begins capturing and encoding data to the file specified with
      * setOutputFile(). Call this after prepare().
-     * 
+     *
      * @throws IllegalStateException if it is called before
      * prepare().
      */
@@ -329,7 +352,7 @@
     /**
      * Stops recording. Call this after start(). Once recording is stopped,
      * you will have to configure it again as if it has just been constructed.
-     * 
+     *
      * @throws IllegalStateException if it is called before start()
      */
     public native void stop() throws IllegalStateException;
@@ -339,19 +362,118 @@
      * this method, you will have to configure it again as if it had just been
      * constructed.
      */
-    public native void reset();
-    
+    public void reset() {
+        native_reset();
+
+        // make sure none of the listeners get called anymore
+        mEventHandler.removeCallbacksAndMessages(null);
+    }
+
+    private native void native_reset();
+
     /**
-     * Returns the maximum absolute amplitude that was sampled since the last 
+     * Returns the maximum absolute amplitude that was sampled since the last
      * call to this method. Call this only after the setAudioSource().
-     * 
-     * @return the maximum absolute amplitude measured since the last call, or 
+     *
+     * @return the maximum absolute amplitude measured since the last call, or
      * 0 when called for the first time
      * @throws IllegalStateException if it is called before
      * the audio source has been set.
      */
     public native int getMaxAmplitude() throws IllegalStateException;
-     
+
+    /* Do not change this value without updating its counterpart
+     * in include/media/mediarecorder.h!
+     */
+    /** Unspecified media recorder error.
+     * @see android.media.MediaRecorder.OnErrorListener
+     */
+    public static final int MEDIA_RECORDER_ERROR_UNKNOWN = 1;
+
+    /**
+     * Interface definition for a callback to be invoked when an error
+     * occurs while recording.
+     */
+    public interface OnErrorListener
+    {
+        /**
+         * Called when an error occurs while recording.
+         * 
+         * @param mr the MediaRecorder that encountered the error
+         * @param what    the type of error that has occurred:
+         * <ul>
+         * <li>{@link #MEDIA_RECORDER_ERROR_UNKNOWN}
+         * </ul>
+         * @param extra   an extra code, specific to the error type
+         */
+        void onError(MediaRecorder mr, int what, int extra);
+    }
+
+    /**
+     * Register a callback to be invoked when an error occurs while
+     * recording.
+     *
+     * @param l the callback that will be run
+     */
+    public void setOnErrorListener(OnErrorListener l)
+    {
+        mOnErrorListener = l;
+    }
+
+    private class EventHandler extends Handler
+    {
+        private MediaRecorder mMediaRecorder;
+
+        public EventHandler(MediaRecorder mr, Looper looper) {
+            super(looper);
+            mMediaRecorder = mr;
+        }
+
+        /* Do not change this value without updating its counterpart
+         * in include/media/mediarecorder.h!
+         */
+        private static final int MEDIA_RECORDER_EVENT_ERROR = 1;
+
+        @Override
+        public void handleMessage(Message msg) {
+            if (mMediaRecorder.mNativeContext == 0) {
+                Log.w(TAG, "mediarecorder went away with unhandled events");
+                return;
+            }
+            switch(msg.what) {
+            case MEDIA_RECORDER_EVENT_ERROR:
+                if (mOnErrorListener != null)
+                    mOnErrorListener.onError(mMediaRecorder, msg.arg1, msg.arg2);
+
+                return;
+
+            default:
+                Log.e(TAG, "Unknown message type " + msg.what);
+                return;
+            }
+        }
+    }
+
+    /**
+     * Called from native code when an interesting event happens.  This method
+     * just uses the EventHandler system to post the event back to the main app thread.
+     * We use a weak reference to the original MediaRecorder object so that the native
+     * code is safe from the object disappearing from underneath it.  (This is
+     * the cookie passed to native_setup().)
+     */
+    private static void postEventFromNative(Object mediarecorder_ref,
+                                            int what, int arg1, int arg2, Object obj)
+    {
+        MediaRecorder mr = (MediaRecorder)((WeakReference)mediarecorder_ref).get();
+        if (mr == null) {
+            return;
+        }
+
+        if (mr.mEventHandler != null) {
+            Message m = mr.mEventHandler.obtainMessage(what, arg1, arg2, obj);
+            mr.mEventHandler.sendMessage(m);
+        }
+    }
 
     /**
      * Releases resources associated with this MediaRecorder object.
@@ -360,10 +482,10 @@
      */
     public native void release();
 
-    private native final void native_setup() throws IllegalStateException;
-    
+    private native final void native_setup(Object mediarecorder_this) throws IllegalStateException;
+
     private native final void native_finalize();
-    
+
     @Override
     protected void finalize() { native_finalize(); }
 }
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index cfcb5eb..e80d8aa 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -164,9 +164,16 @@
         } else if (mFileDescriptor != null) {
             mAudio.setDataSource(mFileDescriptor);
         } else if (mAssetFileDescriptor != null) {
-            mAudio.setDataSource(mAssetFileDescriptor.getFileDescriptor(),
-                    mAssetFileDescriptor.getStartOffset(),
-                    mAssetFileDescriptor.getLength());
+            // Note: using getDeclaredLength so that our behavior is the same
+            // as previous versions when the content provider is returning
+            // a full file.
+            if (mAssetFileDescriptor.getDeclaredLength() < 0) {
+                mAudio.setDataSource(mAssetFileDescriptor.getFileDescriptor());
+            } else {
+                mAudio.setDataSource(mAssetFileDescriptor.getFileDescriptor(),
+                        mAssetFileDescriptor.getStartOffset(),
+                        mAssetFileDescriptor.getDeclaredLength());
+            }
         } else {
             throw new IOException("No data source set.");
         }
diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java
index 427f173..000430f 100644
--- a/media/java/android/media/SoundPool.java
+++ b/media/java/android/media/SoundPool.java
@@ -16,6 +16,7 @@
 
 package android.media;
 
+import android.util.AndroidRuntimeException;
 import android.util.Log;
 import java.io.File;
 import java.io.FileDescriptor;
@@ -79,7 +80,11 @@
 
     public int load(AssetFileDescriptor afd, int priority) {
         if (afd != null) {
-            return _load(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength(), priority);
+            long len = afd.getLength();
+            if (len < 0) {
+                throw new AndroidRuntimeException("no length for fd");
+            }
+            return _load(afd.getFileDescriptor(), afd.getStartOffset(), len, priority);
         } else {
             return 0;
         }
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 095749b..44f875c 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -41,16 +41,68 @@
 // ----------------------------------------------------------------------------
 
 // helper function to extract a native Camera object from a Camera Java object
-extern sp<Camera> get_native_camera(JNIEnv *env, jobject thiz);
+extern sp<Camera> get_native_camera(JNIEnv *env, jobject thiz, struct camera_context_t** context);
 
 struct fields_t {
     jfieldID    context;
     jfieldID    surface;
     /* actually in android.view.Surface XXX */
     jfieldID    surface_native;
+
+    jmethodID   post_event;
 };
 static fields_t fields;
 
+static Mutex sLock;
+
+// ----------------------------------------------------------------------------
+// ref-counted object for callbacks
+class JNIMediaRecorderListener: public MediaRecorderListener
+{
+public:
+    JNIMediaRecorderListener(JNIEnv* env, jobject thiz, jobject weak_thiz);
+    ~JNIMediaRecorderListener();
+    void notify(int msg, int ext1, int ext2);
+private:
+    JNIMediaRecorderListener();
+    jclass      mClass;     // Reference to MediaRecorder class
+    jobject     mObject;    // Weak ref to MediaRecorder Java object to call on
+};
+
+JNIMediaRecorderListener::JNIMediaRecorderListener(JNIEnv* env, jobject thiz, jobject weak_thiz)
+{
+
+    // Hold onto the MediaRecorder class for use in calling the static method
+    // that posts events to the application thread.
+    jclass clazz = env->GetObjectClass(thiz);
+    if (clazz == NULL) {
+        LOGE("Can't find android/media/MediaRecorder");
+        jniThrowException(env, "java/lang/Exception", NULL);
+        return;
+    }
+    mClass = (jclass)env->NewGlobalRef(clazz);
+
+    // We use a weak reference so the MediaRecorder object can be garbage collected.
+    // The reference is only used as a proxy for callbacks.
+    mObject  = env->NewGlobalRef(weak_thiz);
+}
+
+JNIMediaRecorderListener::~JNIMediaRecorderListener()
+{
+    // remove global references
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    env->DeleteGlobalRef(mObject);
+    env->DeleteGlobalRef(mClass);
+}
+
+void JNIMediaRecorderListener::notify(int msg, int ext1, int ext2)
+{
+    LOGV("JNIMediaRecorderListener::notify");
+
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, 0);
+}
+
 // ----------------------------------------------------------------------------
 
 static sp<Surface> get_surface(JNIEnv* env, jobject clazz)
@@ -74,10 +126,32 @@
     return false;
 }
 
+static sp<MediaRecorder> getMediaRecorder(JNIEnv* env, jobject thiz)
+{
+    Mutex::Autolock l(sLock);
+    MediaRecorder* const p = (MediaRecorder*)env->GetIntField(thiz, fields.context);
+    return sp<MediaRecorder>(p);
+}
+
+static sp<MediaRecorder> setMediaRecorder(JNIEnv* env, jobject thiz, const sp<MediaRecorder>& recorder)
+{
+    Mutex::Autolock l(sLock);
+    sp<MediaRecorder> old = (MediaRecorder*)env->GetIntField(thiz, fields.context);
+    if (recorder.get()) {
+        recorder->incStrong(thiz);
+    }
+    if (old != 0) {
+        old->decStrong(thiz);
+    }
+    env->SetIntField(thiz, fields.context, (int)recorder.get());
+    return old;
+}
+
+
 static void android_media_MediaRecorder_setCamera(JNIEnv* env, jobject thiz, jobject camera)
 {
-    sp<Camera> c = get_native_camera(env, camera);
-    MediaRecorder *mr = (MediaRecorder*)env->GetIntField(thiz, fields.context);
+    sp<Camera> c = get_native_camera(env, camera, NULL);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->setCamera(c->remote()),
             "java/lang/RuntimeException", "setCamera failed.");
 }
@@ -90,7 +164,7 @@
         jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid video source");
         return;
     }
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->setVideoSource(vs), "java/lang/RuntimeException", "setVideoSource failed.");
 }
 
@@ -102,7 +176,7 @@
         jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid audio source");
         return;
     }
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->setAudioSource(as), "java/lang/RuntimeException", "setAudioSource failed.");
 }
 
@@ -114,7 +188,7 @@
         jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid output format");
         return;
     }
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->setOutputFormat(of), "java/lang/RuntimeException", "setOutputFormat failed.");
 }
 
@@ -126,7 +200,7 @@
         jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid video encoder");
         return;
     }
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->setVideoEncoder(ve), "java/lang/RuntimeException", "setVideoEncoder failed.");
 }
 
@@ -138,7 +212,7 @@
         jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid audio encoder");
         return;
     }
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->setAudioEncoder(ae), "java/lang/RuntimeException", "setAudioEncoder failed.");
 }
 
@@ -151,7 +225,7 @@
         return;
     }
     int fd = getParcelFileDescriptorFD(env, fileDescriptor);
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     status_t opStatus = mr->setOutputFile(fd, offset, length);
     process_media_recorder_call(env, opStatus, "java/io/IOException", "setOutputFile failed.");
 }
@@ -160,7 +234,7 @@
 android_media_MediaRecorder_setVideoSize(JNIEnv *env, jobject thiz, jint width, jint height)
 {
     LOGV("setVideoSize(%d, %d)", width, height);
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
 
     if (width <= 0 || height <= 0) {
         jniThrowException(env, "java/lang/IllegalArgumentException", "invalid video size");
@@ -177,7 +251,7 @@
         jniThrowException(env, "java/lang/IllegalArgumentException", "invalid frame rate");
         return;
     }
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->setVideoFrameRate(rate), "java/lang/RuntimeException", "setVideoFrameRate failed.");
 }
 
@@ -185,7 +259,7 @@
 android_media_MediaRecorder_prepare(JNIEnv *env, jobject thiz)
 {
     LOGV("prepare");
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
 
     jobject surface = env->GetObjectField(thiz, fields.surface);
     if (surface != NULL) {
@@ -202,7 +276,7 @@
 android_media_MediaRecorder_native_getMaxAmplitude(JNIEnv *env, jobject thiz)
 {
     LOGV("getMaxAmplitude");
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     int result = 0;
     process_media_recorder_call(env, mr->getMaxAmplitude(&result), "java/lang/RuntimeException", "getMaxAmplitude failed.");
     return result;
@@ -212,7 +286,7 @@
 android_media_MediaRecorder_start(JNIEnv *env, jobject thiz)
 {
     LOGV("start");
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->start(), "java/lang/RuntimeException", "start failed.");
 }
 
@@ -220,46 +294,54 @@
 android_media_MediaRecorder_stop(JNIEnv *env, jobject thiz)
 {
     LOGV("stop");
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
     process_media_recorder_call(env, mr->stop(), "java/lang/RuntimeException", "stop failed.");
 }
 
 static void
-android_media_MediaRecorder_reset(JNIEnv *env, jobject thiz)
+android_media_MediaRecorder_native_reset(JNIEnv *env, jobject thiz)
 {
-    LOGV("reset");
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
-    process_media_recorder_call(env, mr->reset(), "java/lang/RuntimeException", "reset failed.");
+    LOGV("native_reset");
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+    process_media_recorder_call(env, mr->reset(), "java/lang/RuntimeException", "native_reset failed.");
 }
 
 static void
 android_media_MediaRecorder_release(JNIEnv *env, jobject thiz)
 {
     LOGV("release");
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
-    env->SetIntField(thiz, fields.context, 0);
-    delete mr;
+    sp<MediaRecorder> mr = setMediaRecorder(env, thiz, 0);
+    if (mr != NULL) {
+        mr->setListener(NULL);
+    }
 }
 
 static void
-android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz)
+android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
 {
     LOGV("setup");
-    MediaRecorder *mr = new MediaRecorder();
-    if (mr->initCheck() == NO_ERROR) {
-        env->SetIntField(thiz, fields.context, (int)mr);
-    } else {
-        delete mr;
-        jniThrowException(env, "java/lang/IOException", "Unable to initialize camera");
+    sp<MediaRecorder> mr = new MediaRecorder();
+    if (mr == NULL) {
+        jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
+        return;
     }
+    if (mr->initCheck() != NO_ERROR) {
+        jniThrowException(env, "java/lang/IOException", "Unable to initialize camera");
+        return;
+    }
+
+    // create new listener and give it to MediaRecorder
+    sp<JNIMediaRecorderListener> listener = new JNIMediaRecorderListener(env, thiz, weak_this);
+    mr->setListener(listener);
+
+    setMediaRecorder(env, thiz, mr);
 }
 
 static void
 android_media_MediaRecorder_native_finalize(JNIEnv *env, jobject thiz)
 {
     LOGV("finalize");
-    MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
-    delete mr;
+    android_media_MediaRecorder_release(env, thiz);
 }
 
 // ----------------------------------------------------------------------------
@@ -278,9 +360,9 @@
     {"getMaxAmplitude",      "()I",                             (void *)android_media_MediaRecorder_native_getMaxAmplitude},
     {"start",                "()V",                             (void *)android_media_MediaRecorder_start},
     {"stop",                 "()V",                             (void *)android_media_MediaRecorder_stop},
-    {"reset",                "()V",                             (void *)android_media_MediaRecorder_reset},
+    {"native_reset",                "()V",                             (void *)android_media_MediaRecorder_native_reset},
     {"release",              "()V",                             (void *)android_media_MediaRecorder_release},
-    {"native_setup",         "()V",                             (void *)android_media_MediaRecorder_native_setup},
+    {"native_setup",         "(Ljava/lang/Object;)V",           (void *)android_media_MediaRecorder_native_setup},
     {"native_finalize",      "()V",                             (void *)android_media_MediaRecorder_native_finalize},
 };
 
@@ -320,6 +402,13 @@
         return -1;
     }
 
+    fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative",
+                                               "(Ljava/lang/Object;IIILjava/lang/Object;)V");
+    if (fields.post_event == NULL) {
+        LOGE("Can't find MediaRecorder.postEventFromNative");
+        return -1;
+    }
+
     return AndroidRuntime::registerNativeMethods(env,
                 "android/media/MediaRecorder", gMethods, NELEM(gMethods));
 }
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index e833c85..7594ff0 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -128,8 +128,23 @@
         return BAD_VALUE;
     }
 
-    // TODO: Get input frame count from hardware.
-    int minFrameCount = 1024*2;
+    // validate framecount
+    size_t inputBuffSizeInBytes = -1;
+    if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &inputBuffSizeInBytes)
+            != NO_ERROR) {
+        LOGE("AudioSystem could not query the input buffer size.");
+        return NO_INIT;    
+    }
+    if (inputBuffSizeInBytes == 0) {
+        LOGE("Recording parameters are not supported: sampleRate %d, channelCount %d, format %d",
+            sampleRate, channelCount, format);
+        return BAD_VALUE;
+    }
+    int frameSizeInBytes = channelCount * (format == AudioSystem::PCM_16_BIT ? 2 : 1);
+
+    // We use 2* size of input buffer for ping pong use of record buffer.
+    int minFrameCount = 2 * inputBuffSizeInBytes / frameSizeInBytes;
+    LOGV("AudioRecord::set() minFrameCount = %d", minFrameCount);
 
     if (frameCount == 0) {
         frameCount = minFrameCount;
@@ -144,7 +159,11 @@
     // open record channel
     status_t status;
     sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), streamType,
-            sampleRate, format, channelCount, frameCount, flags, &status);
+                                                       sampleRate, format,
+                                                       channelCount,
+                                                       frameCount,
+                                                       ((uint16_t)flags) << 16, 
+                                                       &status);
     if (record == 0) {
         LOGE("AudioFlinger could not create record track, status: %d", status);
         return status;
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index f8520a7..2274521 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -168,6 +168,8 @@
 
     // Ensure that buffer depth covers at least audio hardware latency
     uint32_t minBufCount = afLatency / ((1000 * afFrameCount)/afSampleRate);
+    if (minBufCount < 2) minBufCount = 2;
+
     // When playing from shared buffer, playback will start even if last audioflinger
     // block is partly filled.
     if (sharedBuffer != 0 && minBufCount > 1) {
@@ -437,8 +439,8 @@
         return;
     }
     // Resampler implementation limits input sampling rate to 2 x output sampling rate.
+    if (rate <= 0) rate = 1;
     if (rate > afSamplingRate*2) rate = afSamplingRate*2;
-
     if (rate > MAX_SAMPLE_RATE) rate = MAX_SAMPLE_RATE;
 
     mCblk->sampleRate = rate;
@@ -466,10 +468,15 @@
 
     if (loopStart >= loopEnd ||
         loopEnd - loopStart > mFrameCount) {
-        LOGW("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, mFrameCount, cblk->user);
+        LOGE("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, mFrameCount, cblk->user);
         return BAD_VALUE;
     }
-    // TODO handle shared buffer here: limit loop end to framecount
+
+    if ((mSharedBuffer != 0) && (loopEnd   > mFrameCount)) {
+        LOGE("setLoop invalid value: loop markers beyond data: loopStart %d, loopEnd %d, framecount %d",
+            loopStart, loopEnd, mFrameCount);
+        return BAD_VALUE;
+    }   
 
     cblk->loopStart = loopStart;
     cblk->loopEnd = loopEnd;
diff --git a/media/libmedia/IMediaRecorder.cpp b/media/libmedia/IMediaRecorder.cpp
index 507d03e..f187bf5 100644
--- a/media/libmedia/IMediaRecorder.cpp
+++ b/media/libmedia/IMediaRecorder.cpp
@@ -21,6 +21,7 @@
 #include <utils/Parcel.h>
 #include <ui/ISurface.h>
 #include <ui/ICamera.h>
+#include <media/IMediaPlayerClient.h>
 #include <media/IMediaRecorder.h>
 
 namespace android {
@@ -44,7 +45,8 @@
     SET_VIDEO_SIZE,
     SET_VIDEO_FRAMERATE,
     SET_PREVIEW_SURFACE,
-    SET_CAMERA
+    SET_CAMERA,
+    SET_LISTENER
 };
 
 class BpMediaRecorder: public BpInterface<IMediaRecorder>
@@ -176,6 +178,16 @@
         return reply.readInt32();
     }
 
+    status_t setListener(const sp<IMediaPlayerClient>& listener)
+    {
+        LOGV("setListener(%p)", listener.get());
+        Parcel data, reply;
+        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
+        data.writeStrongBinder(listener->asBinder());
+        remote()->transact(SET_LISTENER, data, &reply);
+        return reply.readInt32();
+    }
+
     status_t prepare()
     {
         LOGV("prepare");
@@ -373,6 +385,14 @@
             reply->writeInt32(setVideoFrameRate(frames_per_second));
             return NO_ERROR;
         } break;
+        case SET_LISTENER: {
+            LOGV("SET_LISTENER");
+            CHECK_INTERFACE(IMediaRecorder, data, reply);
+            sp<IMediaPlayerClient> listener =
+                interface_cast<IMediaPlayerClient>(data.readStrongBinder());
+            reply->writeInt32(setListener(listener));
+            return NO_ERROR;
+        } break;
         case SET_PREVIEW_SURFACE: {
             LOGV("SET_PREVIEW_SURFACE");
             CHECK_INTERFACE(IMediaRecorder, data, reply);
diff --git a/media/libmedia/mediarecorder.cpp b/media/libmedia/mediarecorder.cpp
index 4ab26ac..98aac39 100644
--- a/media/libmedia/mediarecorder.cpp
+++ b/media/libmedia/mediarecorder.cpp
@@ -58,6 +58,10 @@
         LOGE("setPreviewSurface called in an invalid state(%d)", mCurrentState);
         return INVALID_OPERATION;
     }
+    if (!mIsVideoSourceSet) {
+        LOGE("try to set preview surface without setting the video source first");
+        return INVALID_OPERATION;
+    }
 
     status_t ret = mMediaRecorder->setPreviewSurface(surface->getISurface());
     if (OK != ret) {
@@ -86,6 +90,14 @@
         mCurrentState = MEDIA_RECORDER_ERROR;
         return UNKNOWN_ERROR;
     }
+
+    ret = mMediaRecorder->setListener(this);
+    if (OK != ret) {
+        LOGV("setListener failed: %d", ret);
+        mCurrentState = MEDIA_RECORDER_ERROR;
+        return UNKNOWN_ERROR;
+    }
+
     mCurrentState = MEDIA_RECORDER_INITIALIZED;
     return ret;
 }
@@ -167,6 +179,10 @@
         LOGE("setOutputFormat called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
+    if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_RAW_AMR) {
+        LOGE("output format (%d) is meant for audio recording only and incompatible with video recording", of);
+        return INVALID_OPERATION;
+    }
 
     status_t ret = mMediaRecorder->setOutputFormat(of);
     if (OK != ret) {
@@ -185,6 +201,10 @@
         LOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
+    if (!mIsVideoSourceSet) {
+        LOGE("try to set the video encoder without setting the video source first");
+        return INVALID_OPERATION;
+    }
     if (mIsVideoEncoderSet) {
         LOGE("video encoder has already been set");
         return INVALID_OPERATION;
@@ -211,6 +231,10 @@
         LOGE("media recorder is not initialized yet");
         return INVALID_OPERATION;
     }
+    if (!mIsAudioSourceSet) {
+        LOGE("try to set the audio encoder without setting the audio source first");
+        return INVALID_OPERATION;
+    }
     if (mIsAudioEncoderSet) {
         LOGE("audio encoder has already been set");
         return INVALID_OPERATION;
@@ -293,6 +317,10 @@
         LOGE("setVideoSize called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
+    if (!mIsVideoSourceSet) {
+        LOGE("try to set video size without setting video source first");
+        return INVALID_OPERATION;
+    }
 
     status_t ret = mMediaRecorder->setVideoSize(width, height);
     if (OK != ret) {
@@ -314,6 +342,10 @@
         LOGE("setVideoFrameRate called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
+    if (!mIsVideoSourceSet) {
+        LOGE("try to set video frame rate without setting video source first");
+        return INVALID_OPERATION; 
+    }
 
     status_t ret = mMediaRecorder->setVideoFrameRate(frames_per_second);
     if (OK != ret) {
@@ -335,6 +367,23 @@
         LOGE("prepare called in an invalid state: %d", mCurrentState);
         return INVALID_OPERATION;
     }
+    if (mIsAudioSourceSet != mIsAudioEncoderSet) {
+        if (mIsAudioSourceSet) {
+            LOGE("audio source is set, but audio encoder is not set");
+        } else {  // must not happen, since setAudioEncoder checks this already
+            LOGE("audio encoder is set, but audio source is not set");
+        }
+        return INVALID_OPERATION;
+    }
+
+    if (mIsVideoSourceSet != mIsVideoEncoderSet) {
+        if (mIsVideoSourceSet) {
+            LOGE("video source is set, but video encoder is not set");
+        } else {  // must not happen, since setVideoEncoder checks this already
+            LOGE("video encoder is set, but video source is not set");
+        }
+        return INVALID_OPERATION;
+    }
 
     status_t ret = mMediaRecorder->prepare();
     if (OK != ret) {
@@ -538,5 +587,31 @@
     }
 }
 
+status_t MediaRecorder::setListener(const sp<MediaRecorderListener>& listener)
+{
+    LOGV("setListener");
+    Mutex::Autolock _l(mLock);
+    mListener = listener;
+
+    return NO_ERROR;
+}
+
+void MediaRecorder::notify(int msg, int ext1, int ext2)
+{
+    LOGV("message received msg=%d, ext1=%d, ext2=%d", msg, ext1, ext2);
+
+    sp<MediaRecorderListener> listener;
+    mLock.lock();
+    listener = mListener;
+    mLock.unlock();
+
+    if (listener != NULL) {
+        Mutex::Autolock _l(mNotifyLock);
+        LOGV("callback application");
+        listener->notify(msg, ext1, ext2);
+        LOGV("back from callback");
+    }
+}
+
 }; // namespace android
 
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 97e3536..40705c6 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -218,6 +218,104 @@
 #endif
 }
 
+#if defined(__arm__)
+extern "C" void get_malloc_leak_info(uint8_t** info, size_t* overallSize,
+        size_t* infoSize, size_t* totalMemory, size_t* backtraceSize);
+extern "C" void free_malloc_leak_info(uint8_t* info);
+
+void memStatus(int fd, const Vector<String16>& args)
+{
+    const size_t SIZE = 256;
+    char buffer[SIZE];
+    String8 result;
+
+    typedef struct {
+        size_t size;
+        size_t dups;
+        intptr_t * backtrace;
+    } AllocEntry;
+
+    uint8_t *info = NULL;
+    size_t overallSize = 0;
+    size_t infoSize = 0;
+    size_t totalMemory = 0;
+    size_t backtraceSize = 0;
+
+    get_malloc_leak_info(&info, &overallSize, &infoSize, &totalMemory, &backtraceSize);
+    if (info) {
+        uint8_t *ptr = info;
+        size_t count = overallSize / infoSize;
+
+        snprintf(buffer, SIZE, " Allocation count %i\n", count);
+        result.append(buffer);
+
+        AllocEntry * entries = new AllocEntry[count];
+
+        for (size_t i = 0; i < count; i++) {
+            // Each entry should be size_t, size_t, intptr_t[backtraceSize]
+            AllocEntry *e = &entries[i];
+
+            e->size = *reinterpret_cast<size_t *>(ptr);
+            ptr += sizeof(size_t);
+
+            e->dups = *reinterpret_cast<size_t *>(ptr);
+            ptr += sizeof(size_t);
+
+            e->backtrace = reinterpret_cast<intptr_t *>(ptr);
+            ptr += sizeof(intptr_t) * backtraceSize;
+        }
+
+        // Now we need to sort the entries.  They come sorted by size but
+        // not by stack trace which causes problems using diff.
+        bool moved;
+        do {
+            moved = false;
+            for (size_t i = 0; i < (count - 1); i++) {
+                AllocEntry *e1 = &entries[i];
+                AllocEntry *e2 = &entries[i+1];
+
+                bool swap = e1->size < e2->size;
+                if (e1->size == e2->size) {
+                    for(size_t j = 0; j < backtraceSize; j++) {
+                        if (e1->backtrace[j] == e2->backtrace[j]) {
+                            continue;
+                        }
+                        swap = e1->backtrace[j] < e2->backtrace[j];
+                        break;
+                    }
+                }
+                if (swap) {
+                    AllocEntry t = entries[i];
+                    entries[i] = entries[i+1];
+                    entries[i+1] = t;
+                    moved = true;
+                }
+            }
+        } while (moved);
+
+        for (size_t i = 0; i < count; i++) {
+            AllocEntry *e = &entries[i];
+
+            snprintf(buffer, SIZE, "size %8i, dup %4i", e->size, e->dups);
+            result.append(buffer);
+            for (size_t ct = 0; (ct < backtraceSize) && e->backtrace[ct]; ct++) {
+                if (ct) {
+                    result.append(", ");
+                }
+                snprintf(buffer, SIZE, "0x%08x", e->backtrace[ct]);
+                result.append(buffer);
+            }
+            result.append("\n");
+        }
+
+        delete[] entries;
+        free_malloc_leak_info(info);
+    }
+
+    write(fd, result.string(), result.size());
+}
+#endif
+
 status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
 {
     const size_t SIZE = 256;
@@ -300,6 +398,18 @@
             result.append(buffer);
             result.append("\n");
         }
+
+#if defined(__arm__)
+        bool dumpMem = false;
+        for (size_t i = 0; i < args.size(); i++) {
+            if (args[i] == String16("-m")) {
+                dumpMem = true;
+            }
+        }
+        if (dumpMem) {
+            memStatus(fd, args);
+        }
+#endif
     }
     write(fd, result.string(), result.size());
     return NO_ERROR;
diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp
index e8ba17f..4b45acb 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.cpp
+++ b/media/libmediaplayerservice/MediaRecorderClient.cpp
@@ -258,5 +258,16 @@
     release();
 }
 
+status_t MediaRecorderClient::setListener(const sp<IMediaPlayerClient>& listener)
+{
+    LOGV("setListener");
+    Mutex::Autolock lock(mLock);
+    if (mRecorder == NULL) {
+        LOGE("recorder is not initialized");
+        return NO_INIT;
+    }
+    return mRecorder->setListener(listener);
+}
+
 }; // namespace android
 
diff --git a/media/libmediaplayerservice/MediaRecorderClient.h b/media/libmediaplayerservice/MediaRecorderClient.h
index 2b80c10..93fd802 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.h
+++ b/media/libmediaplayerservice/MediaRecorderClient.h
@@ -39,6 +39,7 @@
     virtual     status_t        setOutputFile(int fd, int64_t offset, int64_t length);
     virtual     status_t        setVideoSize(int width, int height);
     virtual     status_t        setVideoFrameRate(int frames_per_second);
+    virtual     status_t        setListener(const sp<IMediaPlayerClient>& listener);
     virtual     status_t        prepare();
     virtual     status_t        getMaxAmplitude(int* max);
     virtual     status_t        start();
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
index 453a165..73688cc 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
@@ -47,9 +47,9 @@
         suite.addTestSuite(MediaPlayerApiTest.class);
         suite.addTestSuite(SimTonesTest.class);
         suite.addTestSuite(MediaMetadataTest.class);
-        // suite.addTestSuite(CameraTest.class);
+        suite.addTestSuite(CameraTest.class);
         suite.addTestSuite(MediaRecorderTest.class);
-        suite.addTestSuite(MediaAudioTrackTest.class);
+        //suite.addTestSuite(MediaAudioTrackTest.class);
         return suite;
     }
 
@@ -59,3 +59,4 @@
     }
 }
 
+
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
index 5981a13..59803f7d 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
@@ -136,11 +136,13 @@
     //Implement the RawPictureCallback
     private final class RawPictureCallback implements PictureCallback { 
         public void onPictureTaken(byte [] rawData, Camera camera) {
-           if (rawData != null) {
-               rawPictureCallbackResult = true;
-           } else {
-               rawPictureCallbackResult = false;
-           }
+           // no support for raw data - success if we get the callback
+           rawPictureCallbackResult = true;
+           //if (rawData != null) {
+           //    rawPictureCallbackResult = true;
+           //} else {
+           //    rawPictureCallbackResult = false;
+           //}
             Log.v(TAG, "RawPictureCallback callback");
         }
     };
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
index b6a0848..24edb65 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
@@ -34,7 +34,7 @@
  
  */  
 public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {    
-    private String TAG = "MediaAudioTrack";
+    private String TAG = "MediaAudioTrackTest";
    
     public MediaAudioTrackTest() {
         super("com.android.mediaframeworktest", MediaFrameworkTest.class);
@@ -50,6 +50,18 @@
         super.tearDown();              
     }
     
+    private static void assumeTrue(String message, boolean cond) {
+        assertTrue("(assume)"+message, cond);
+    }
+    
+    private void log(String testName, String message) {
+        Log.v(TAG, "["+testName+"] "+message);
+    }
+    
+    private void loge(String testName, String message) {
+        Log.e(TAG, "["+testName+"] "+message);
+    }
+    
     //-----------------------------------------------------------------
     // private class to hold test reslts
     public class TestResults {
@@ -62,7 +74,8 @@
     // generic test methods
     public TestResults constructorTestMultiSampleRate(
                         // parameters tested by this method
-                        int _inTest_streamType, int _inTest_mode, int _inTest_config,
+                        int _inTest_streamType, int _inTest_mode, 
+                        int _inTest_config, int _inTest_format,
                         // parameter-dependent expected results
                         int _expected_stateForMode) {
         
@@ -70,7 +83,7 @@
         String failedRates = "Failure for rate(s): ";
         boolean localRes, finalRes = true;
         
-        for(int i = 0 ; i < testSampleRates.length ; i++) {
+        for (int i = 0 ; i < testSampleRates.length ; i++) {
             //Log.v("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] testing "+ testSampleRates[i]);
             AudioTrack track = null;
             try {
@@ -78,15 +91,16 @@
                         _inTest_streamType, 
                         testSampleRates[i], 
                         _inTest_config, 
-                        AudioFormat.ENCODING_PCM_16BIT,
+                        _inTest_format,
                         AudioTrack.getMinBufferSize(testSampleRates[i], 
-                                _inTest_config, AudioFormat.ENCODING_PCM_16BIT),//testSampleRates[i]*4 
+                                _inTest_config, _inTest_format), 
                         _inTest_mode);
             } catch(IllegalArgumentException iae) {
                 Log.e("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] exception at SR "
                         + testSampleRates[i]+": \n" + iae);
+                localRes = false;
             }
-            if(track != null) {
+            if (track != null) {
                 localRes = (track.getState() == _expected_stateForMode);
                 track.release();
             }
@@ -98,11 +112,11 @@
                 //log the error for the test runner
                 failedRates += Integer.toString(testSampleRates[i]) + "Hz ";
                 //log the error for logcat
-                Log.e("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] failed to construct "
+                log("constructorTestMultiSampleRate", "failed to construct "
                         +"AudioTrack(streamType="+_inTest_streamType 
                         +", sampleRateInHz=" + testSampleRates[i]
                         +", channelConfig=" + _inTest_config
-                        +", audioFormat=AudioFormat.ENCODING_PCM_16BIT"  
+                        +", audioFormat=" + _inTest_format  
                         +", bufferSizeInBytes=" + AudioTrack.getMinBufferSize(testSampleRates[i], 
                                 _inTest_config, AudioFormat.ENCODING_PCM_16BIT)
                         +", mode="+ _inTest_mode );
@@ -118,16 +132,16 @@
     //----------------------------------
     
     //-----------------------------------------------------------------
-    //      AudioTrack constructor and AudioTrack.getMinBufferSize(...)
+    //      AudioTrack constructor and AudioTrack.getMinBufferSize(...) for 16bit PCM
     //----------------------------------
        
     //Test case 1: constructor for streaming AudioTrack, mono, 16bit at misc valid sample rates
-    @MediumTest
+    @LargeTest
     public void testConstructorMono16MusicStream() throws Exception {
         
         TestResults res = constructorTestMultiSampleRate(
                 AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, 
-                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
+                    AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
                 AudioTrack.STATE_INITIALIZED);
 
         assertTrue("testConstructorMono16MusicStream: " + res.mResultLog, res.mResult);
@@ -135,12 +149,12 @@
     
     
     //Test case 2: constructor for streaming AudioTrack, stereo, 16bit at misc valid sample rates
-    @MediumTest
+    @LargeTest
     public void testConstructorStereo16MusicStream() throws Exception {
         
         TestResults res = constructorTestMultiSampleRate(
                 AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, 
-                    AudioFormat.CHANNEL_CONFIGURATION_STEREO,
+                    AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT,
                 AudioTrack.STATE_INITIALIZED);
 
         assertTrue("testConstructorStereo16MusicStream: " + res.mResultLog, res.mResult);
@@ -148,12 +162,12 @@
     
     
     //Test case 3: constructor for static AudioTrack, mono, 16bit at misc valid sample rates
-    @MediumTest
+    @LargeTest
     public void testConstructorMono16MusicStatic() throws Exception {
         
         TestResults res = constructorTestMultiSampleRate(
                 AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, 
-                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
+                    AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
                 AudioTrack.STATE_NO_STATIC_DATA);
 
         assertTrue("testConstructorMono16MusicStatic: " + res.mResultLog, res.mResult);
@@ -161,16 +175,723 @@
     
     
     //Test case 4: constructor for static AudioTrack, stereo, 16bit at misc valid sample rates
-    @MediumTest
+    @LargeTest
     public void testConstructorStereo16MusicStatic() throws Exception {
         
         TestResults res = constructorTestMultiSampleRate(
                 AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, 
-                    AudioFormat.CHANNEL_CONFIGURATION_STEREO,
+                    AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT,
                 AudioTrack.STATE_NO_STATIC_DATA);
 
         assertTrue("testConstructorStereo16MusicStatic: " + res.mResultLog, res.mResult);
     }
+    
+    
+    //-----------------------------------------------------------------
+    //      AudioTrack constructor and AudioTrack.getMinBufferSize(...) for 8bit PCM
+    //----------------------------------
+       
+    //Test case 1: constructor for streaming AudioTrack, mono, 8bit at misc valid sample rates
+    @LargeTest
+    public void testConstructorMono8MusicStream() throws Exception {
+        
+        TestResults res = constructorTestMultiSampleRate(
+                AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, 
+                    AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,
+                AudioTrack.STATE_INITIALIZED);
 
+        assertTrue("testConstructorMono8MusicStream: " + res.mResultLog, res.mResult);
+    }
+    
+    //Test case 2: constructor for streaming AudioTrack, stereo, 8bit at misc valid sample rates
+    @LargeTest
+    public void testConstructorStereo8MusicStream() throws Exception {
+        
+        TestResults res = constructorTestMultiSampleRate(
+                AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, 
+                    AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_8BIT,
+                AudioTrack.STATE_INITIALIZED);
+
+        assertTrue("testConstructorStereo8MusicStream: " + res.mResultLog, res.mResult);
+    }
+    
+    //Test case 3: constructor for static AudioTrack, mono, 8bit at misc valid sample rates
+    @LargeTest
+    public void testConstructorMono8MusicStatic() throws Exception {
+        
+        TestResults res = constructorTestMultiSampleRate(
+                AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, 
+                    AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,
+                AudioTrack.STATE_NO_STATIC_DATA);
+
+        assertTrue("testConstructorMono8MusicStatic: " + res.mResultLog, res.mResult);
+    }
+    
+    //Test case 4: constructor for static AudioTrack, stereo, 8bit at misc valid sample rates
+    @LargeTest
+    public void testConstructorStereo8MusicStatic() throws Exception {
+        
+        TestResults res = constructorTestMultiSampleRate(
+                AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, 
+                    AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_8BIT,
+                AudioTrack.STATE_NO_STATIC_DATA);
+
+        assertTrue("testConstructorStereo8MusicStatic: " + res.mResultLog, res.mResult);
+    }
+    
+    
+    //-----------------------------------------------------------------
+    //      AudioTrack constructor for all stream types
+    //----------------------------------
+        
+    //Test case 1: constructor for all stream types
+    @LargeTest
+    public void testConstructorStreamType() throws Exception {
+        // constants for test
+        final int TYPE_TEST_SR = 22050;
+        final int TYPE_TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TYPE_TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TYPE_TEST_MODE = AudioTrack.MODE_STREAM;
+        final int[] STREAM_TYPES = { AudioManager.STREAM_ALARM, AudioManager.STREAM_BLUETOOTH_SCO, 
+                AudioManager.STREAM_MUSIC, AudioManager.STREAM_NOTIFICATION,
+                AudioManager.STREAM_RING, AudioManager.STREAM_SYSTEM, 
+                AudioManager.STREAM_VOICE_CALL };
+        final String[] STREAM_NAMES = { "STREAM_ALARM", "STREAM_BLUETOOTH_SCO", "STREAM_MUSIC",
+                "STREAM_NOTIFICATION", "STREAM_RING", "STREAM_SYSTEM", "STREAM_VOICE_CALL" };
+        
+        boolean localTestRes = true;
+        AudioTrack track = null;
+        // test: loop constructor on all stream types
+        for (int i = 0 ; i < STREAM_TYPES.length ; i++)
+        {
+            try {
+            //-------- initialization --------------
+                track = new AudioTrack(STREAM_TYPES[i], 
+                        TYPE_TEST_SR, TYPE_TEST_CONF, TYPE_TEST_FORMAT,
+                        AudioTrack.getMinBufferSize(TYPE_TEST_SR, TYPE_TEST_CONF, TYPE_TEST_FORMAT), 
+                        TYPE_TEST_MODE);
+            } catch (IllegalArgumentException iae) {
+                loge("testConstructorStreamType", "exception for stream type "
+                        + STREAM_NAMES[i] + ": "+ iae);
+                localTestRes = false;
+            }
+            //--------  test   --------------
+            if (track != null) {
+                if (track.getState() != AudioTrack.STATE_INITIALIZED) {
+                    localTestRes = false;
+                    Log.e("MediaAudioTrackTest", 
+                            "[ testConstructorStreamType ] failed for stream type "+STREAM_NAMES[i]);
+                }
+            //--------  tear down  --------------
+                track.release();
+            }
+            else {
+                localTestRes = false;
+            }
+        }
+
+        assertTrue("testConstructorStreamType", localTestRes);
+    }
+    
+    
+    //-----------------------------------------------------------------
+    //      Playback head position
+    //----------------------------------
+  
+    //Test case 1: getPlaybackHeadPosition() at 0 after initialization
+    @LargeTest
+    public void testPlaybackHeadPositionAfterInit() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testPlaybackHeadPositionAfterInit";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT), TEST_MODE);
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertTrue(TEST_NAME, track.getPlaybackHeadPosition() == 0);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 2: getPlaybackHeadPosition() increases after play()
+    @LargeTest
+    public void testPlaybackHeadPositionIncrease() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testPlaybackHeadPositionIncrease";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        Thread.sleep(100);
+        log(TEST_NAME, "position ="+ track.getPlaybackHeadPosition());
+        assertTrue(TEST_NAME, track.getPlaybackHeadPosition() > 0);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 3: getPlaybackHeadPosition() is 0 after flush();
+    @LargeTest
+    public void testPlaybackHeadPositionAfterFlush() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testPlaybackHeadPositionAfterFlush";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        Thread.sleep(100);
+        track.stop();
+        track.flush();
+        log(TEST_NAME, "position ="+ track.getPlaybackHeadPosition());
+        assertTrue(TEST_NAME, track.getPlaybackHeadPosition() == 0);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 3: getPlaybackHeadPosition() is 0 after stop();
+    @LargeTest
+    public void testPlaybackHeadPositionAfterStop() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testPlaybackHeadPositionAfterStop";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        Thread.sleep(100);
+        track.stop();
+        Thread.sleep(100); // TODO: what is a sensible value?
+        int pos = track.getPlaybackHeadPosition();
+        log(TEST_NAME, "position ="+ pos);
+        assertTrue(TEST_NAME, pos == 0);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 4: getPlaybackHeadPosition() is > 0 after play(); pause();
+    @LargeTest
+    public void testPlaybackHeadPositionAfterPause() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testPlaybackHeadPositionAfterPause";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        Thread.sleep(100);
+        track.pause();
+        int pos = track.getPlaybackHeadPosition();
+        log(TEST_NAME, "position ="+ pos);
+        assertTrue(TEST_NAME, pos > 0);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    
+    //-----------------------------------------------------------------
+    //      Playback properties
+    //----------------------------------
+    
+    //Test case 1: setStereoVolume() with max volume returns SUCCESS
+    @LargeTest
+    public void testSetStereoVolumeMax() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetStereoVolumeMax";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        float maxVol = AudioTrack.getMaxVolume();
+        assertTrue(TEST_NAME, track.setStereoVolume(maxVol, maxVol) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 2: setStereoVolume() with min volume returns SUCCESS
+    @LargeTest
+    public void testSetStereoVolumeMin() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetStereoVolumeMin";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        float minVol = AudioTrack.getMinVolume();
+        assertTrue(TEST_NAME, track.setStereoVolume(minVol, minVol) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 3: setStereoVolume() with mid volume returns SUCCESS
+    @LargeTest
+    public void testSetStereoVolumeMid() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetStereoVolumeMid";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        float midVol = (AudioTrack.getMaxVolume() - AudioTrack.getMinVolume()) / 2;
+        assertTrue(TEST_NAME, track.setStereoVolume(midVol, midVol) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 4: setPlaybackRate() with half the content rate returns SUCCESS
+    @LargeTest
+    public void testSetPlaybackRate() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackRate";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.play();
+        assertTrue(TEST_NAME, track.setPlaybackRate((int)(TEST_SR/2)) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 5: setPlaybackRate(0) returns bad value error
+    @LargeTest
+    public void testSetPlaybackRateZero() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackRateZero";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertTrue(TEST_NAME, track.setPlaybackRate(0) == AudioTrack.ERROR_BAD_VALUE);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 6: setPlaybackRate() accepts values twice the output sample rate
+    @LargeTest
+    public void testSetPlaybackRateTwiceOutputSR() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackRateTwiceOutputSR";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        int outputSR = AudioTrack.getNativeOutputSampleRate(TEST_STREAM_TYPE);
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.play();
+        assertTrue(TEST_NAME, track.setPlaybackRate(2*outputSR) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+/*    
+    //Test case 7: setPlaybackRate() clips values over twice the output sample rate
+    @LargeTest
+    public void testSetPlaybackRateClip() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackRateClip";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize/2];
+        int outputSR = AudioTrack.getNativeOutputSampleRate(TEST_STREAM_TYPE);
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.play();
+        track.setPlaybackRate(3*outputSR);
+        assertTrue(TEST_NAME, track.getSampleRate() == 2*outputSR);
+        //-------- tear down      --------------
+        track.release();
+    }
+*/    
+    //Test case 8: setPlaybackRate() invalid operation if track not initialized
+    @LargeTest
+    public void testSetPlaybackRateUninit() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackRateUninit";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA);
+        assertTrue(TEST_NAME, track.setPlaybackRate(TEST_SR/2) == AudioTrack.ERROR_INVALID_OPERATION);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //-----------------------------------------------------------------
+    //      Playback progress
+    //----------------------------------
+    
+    //Test case 1: setPlaybackHeadPosition() on playing track
+    @LargeTest
+    public void testSetPlaybackHeadPositionPlaying() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackHeadPositionPlaying";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                2*minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        assertTrue(TEST_NAME,
+                track.setPlaybackHeadPosition(10) == AudioTrack.ERROR_INVALID_OPERATION);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 2: setPlaybackHeadPosition() on stopped track
+    @LargeTest
+    public void testSetPlaybackHeadPositionStopped() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackHeadPositionStopped";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                2*minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        track.stop();
+        assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_STOPPED);
+        assertTrue(TEST_NAME, track.setPlaybackHeadPosition(10) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 3: setPlaybackHeadPosition() on paused track
+    @LargeTest
+    public void testSetPlaybackHeadPositionPaused() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackHeadPositionPaused";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                2*minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        track.pause();
+        assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_PAUSED);
+        assertTrue(TEST_NAME, track.setPlaybackHeadPosition(10) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 4: setPlaybackHeadPosition() beyond what has been written
+    @LargeTest
+    public void testSetPlaybackHeadPositionTooFar() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetPlaybackHeadPositionTooFar";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                2*minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        // make up a frame index that's beyond what has been written: go from buffer size to frame
+        //   count (given the audio track properties), and add 77.
+        int frameIndexTooFar = (2*minBuffSize/2) + 77;
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        track.write(data, 0, data.length);
+        track.write(data, 0, data.length);
+        track.play();
+        track.stop();
+        assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_STOPPED);
+        assertTrue(TEST_NAME, track.setPlaybackHeadPosition(frameIndexTooFar) == AudioTrack.ERROR_BAD_VALUE);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    
+    //Test case 5: setLoopPoints() fails for MODE_STREAM
+    @LargeTest
+    public void testSetLoopPointsStream() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetLoopPointsStream";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                2*minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertTrue(TEST_NAME, track.setLoopPoints(2, 50, 2) == AudioTrack.ERROR_INVALID_OPERATION);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 6: setLoopPoints() fails start > end
+    @LargeTest
+    public void testSetLoopPointsStartAfterEnd() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetLoopPointsStartAfterEnd";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertTrue(TEST_NAME, track.setLoopPoints(50, 0, 2) == AudioTrack.ERROR_BAD_VALUE);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 6: setLoopPoints() success
+    @LargeTest
+    public void testSetLoopPointsSuccess() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetLoopPointsSuccess";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        //--------    test        --------------
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertTrue(TEST_NAME, track.setLoopPoints(0, 50, 2) == AudioTrack.SUCCESS);
+        //-------- tear down      --------------
+        track.release();
+    }
+    
+    //Test case 7: setLoopPoints() fails with loop length bigger than content
+    @LargeTest
+    public void testSetLoopPointsLoopTooLong() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetLoopPointsLoopTooLong";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        int dataSizeInFrames = minBuffSize/2;
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA);
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertTrue(TEST_NAME, 
+                track.setLoopPoints(10, dataSizeInFrames+20, 2) == AudioTrack.ERROR_BAD_VALUE);
+        //-------- tear down      --------------
+        track.release();
+    }
+/*    
+    //Test case 7: setLoopPoints() fails with start beyond what can be written for the track
+    @LargeTest
+    public void testSetLoopPointsStartTooFar() throws Exception {
+        // constants for test
+        final String TEST_NAME = "testSetLoopPointsStartTooFar";
+        final int TEST_SR = 22050;
+        final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
+        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
+        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
+        
+        //-------- initialization --------------
+        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
+        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
+                minBuffSize, TEST_MODE);
+        byte data[] = new byte[minBuffSize];
+        int dataSizeInFrames = minBuffSize/2;//16bit data
+        //--------    test        --------------
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA);
+        track.write(data, 0, data.length);
+        assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertTrue(TEST_NAME, 
+                track.setLoopPoints(dataSizeInFrames+20, dataSizeInFrames+50, 2) 
+                    == AudioTrack.ERROR_BAD_VALUE);
+        //-------- tear down      --------------
+        track.release();
+    }
+*/    
+    
 }
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
index b606f25..2f0173d 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
@@ -1,17 +1,17 @@
 /*
  * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
  */
 
 package com.android.mediaframeworktest.performance;
@@ -19,141 +19,358 @@
 import com.android.mediaframeworktest.MediaFrameworkTest;
 import com.android.mediaframeworktest.MediaNames;
 
-import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
 import android.media.MediaPlayer;
+import android.media.MediaRecorder;
 import android.os.SystemClock;
 import android.test.ActivityInstrumentationTestCase;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.test.suitebuilder.annotation.Suppress;
 import android.util.Log;
+import android.view.SurfaceHolder;
 
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.BufferedWriter;
+
 import android.media.MediaMetadataRetriever;
 
 /**
- * Junit / Instrumentation test case for the media player api
- 
- */  
-public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<MediaFrameworkTest> {    
-  
-   
-   private boolean mIsPlaying = true;
-   private String TAG = "MediaPlayerApiTest";
-   Context mContext;
-   private SQLiteDatabase mDB;
-   
-   
-   public MediaPlayerPerformance() {
-     super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-   }
+ * Junit / Instrumentation - performance measurement for media player and 
+ * recorder
+ */
+public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
+
+    private String TAG = "MediaFrameworkPerformance";
+
+    private SQLiteDatabase mDB;
+    private SurfaceHolder mSurfaceHolder = null;
+    private static final int NUM_STRESS_LOOP = 10;
+    private static final int NUM_PLAYBACk_IN_EACH_LOOP = 20;
+    private static final long MEDIA_STRESS_WAIT_TIME = 5000; //5 seconds
+    private static final String H263_VIDEO_PLAYBACK_MEMOUT =
+        "/sdcard/h263VideoPlaybackMemOut.txt";
+    private static final String H264_VIDEO_PLAYBACK_MEMOUT =
+        "/sdcard/h264VideoPlaybackMemOut.txt";
+    private static final String WMV_VIDEO_PLAYBACK_MEMOUT =
+        "/sdcard/WmvVideoPlaybackMemOut.txt";
+    private static final String H263_VIDEO_ONLY_RECORD_MEMOUT =
+        "/sdcard/recordH263VideoOnlyMemOut.txt";
+    private static final String MP4_VIDEO_ONLY_RECORD_MEMOUT =
+        "/sdcard/recordMPEG4VideoOnlyMemOut.txt";
+    private static final String H263_VIDEO_AUDIO_RECORD_MEMOUT =
+        "/sdcard/recordVideoH263AudioMemOut.txt";
+    private static final String AUDIO_ONLY_RECORD_MEMOUT =
+        "/sdcard/recordAudioOnlyMemOut.txt";
+
+
+    public MediaPlayerPerformance() {
+        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
+    }
 
     protected void setUp() throws Exception {
-      
-      super.setUp();
+        super.setUp();
     }
-       
-    public void createDB(){
-      mDB = SQLiteDatabase.openOrCreateDatabase("/sdcard/perf.db",null);
-      mDB.execSQL("CREATE TABLE perfdata (_id INTEGER PRIMARY KEY,"
-          + "file TEXT," + "setdatatime LONG," +"preparetime LONG," +"playtime LONG" + ");");
+
+    public void createDB() {
+        mDB = SQLiteDatabase.openOrCreateDatabase("/sdcard/perf.db", null);
+        mDB.execSQL("CREATE TABLE perfdata (_id INTEGER PRIMARY KEY," + 
+                "file TEXT," + "setdatatime LONG," + "preparetime LONG," +
+                "playtime LONG" + ");");
     }
-    
-    public void audioPlaybackStartupTime(String[] testFile){
-      long t1 = 0;
-      long t2 = 0;
-      long t3 = 0;
-      long t4 =0;
-      
-      long setDataSourceDuration = 0;
-      long prepareDuration = 0;
-      long startDuration=0;
-      
-      long totalSetDataTime=0;
-      long totalPrepareTime=0;
-      long totalStartDuration=0;
-      
-      int numberOfFiles = testFile.length;
-      Log.v(TAG, "File lenght " + numberOfFiles);
-      for (int k=0; k<numberOfFiles; k++){
-        MediaPlayer mp = new MediaPlayer();
-        try{
-          t1 = SystemClock.uptimeMillis();
-          FileInputStream  fis = new FileInputStream(testFile[k]);
-          FileDescriptor fd = fis.getFD();
-          mp.setDataSource(fd);
-          fis.close();
-          t2 = SystemClock.uptimeMillis();
-          mp.prepare();
-          t3 = SystemClock.uptimeMillis();
-          mp.start();
-          t4 = SystemClock.uptimeMillis();
-          Thread.sleep(10000);
-          mp.pause();
-        }catch (Exception e){}
-        setDataSourceDuration = t2 -t1;
-        prepareDuration = t3 - t2;
-        startDuration = t4 - t3;
-        totalSetDataTime = totalSetDataTime + setDataSourceDuration;
-        totalPrepareTime = totalPrepareTime + prepareDuration;
-        totalStartDuration = totalStartDuration + startDuration;
-        mDB.execSQL("INSERT INTO perfdata (file, setdatatime, preparetime, playtime) VALUES (" + '"' + testFile[k] + '"' +','
-          +setDataSourceDuration+ ',' + prepareDuration + ',' + startDuration +");");
-        Log.v(TAG,"File name " + testFile[k]);
-        mp.stop();
-        mp.release();   
-      }
-      Log.v (TAG, "setDataSource average " + totalSetDataTime/numberOfFiles);
-      Log.v (TAG, "prepare average " + totalPrepareTime/numberOfFiles);
-      Log.v (TAG, "start average " + totalStartDuration/numberOfFiles);
-      
+
+    public void audioPlaybackStartupTime(String[] testFile) {
+        long t1 = 0;
+        long t2 = 0;
+        long t3 = 0;
+        long t4 = 0;
+        long setDataSourceDuration = 0;
+        long prepareDuration = 0;
+        long startDuration = 0;
+        long totalSetDataTime = 0;
+        long totalPrepareTime = 0;
+        long totalStartDuration = 0;
+
+        int numberOfFiles = testFile.length;
+        Log.v(TAG, "File length " + numberOfFiles);
+        for (int k = 0; k < numberOfFiles; k++) {
+            MediaPlayer mp = new MediaPlayer();
+            try {
+                t1 = SystemClock.uptimeMillis();
+                FileInputStream fis = new FileInputStream(testFile[k]);
+                FileDescriptor fd = fis.getFD();
+                mp.setDataSource(fd);
+                fis.close();
+                t2 = SystemClock.uptimeMillis();
+                mp.prepare();
+                t3 = SystemClock.uptimeMillis();
+                mp.start();
+                t4 = SystemClock.uptimeMillis();
+            } catch (Exception e) {
+                Log.v(TAG, e.toString());
+            }
+            setDataSourceDuration = t2 - t1;
+            prepareDuration = t3 - t2;
+            startDuration = t4 - t3;
+            totalSetDataTime = totalSetDataTime + setDataSourceDuration;
+            totalPrepareTime = totalPrepareTime + prepareDuration;
+            totalStartDuration = totalStartDuration + startDuration;
+            mDB.execSQL("INSERT INTO perfdata (file, setdatatime, preparetime," +
+                    " playtime) VALUES (" + '"' + testFile[k] + '"' + ',' +
+                    setDataSourceDuration + ',' + prepareDuration +
+            		',' + startDuration + ");");
+            Log.v(TAG, "File name " + testFile[k]);
+            mp.stop();
+            mp.release();
+        }
+        Log.v(TAG, "setDataSource average " + totalSetDataTime / numberOfFiles);
+        Log.v(TAG, "prepare average " + totalPrepareTime / numberOfFiles);
+        Log.v(TAG, "start average " + totalStartDuration / numberOfFiles);
+
     }
-    
-    //Test cases for GetCurrentPosition
-    @LargeTest
+
+    @Suppress
     public void testStartUpTime() throws Exception {
-      createDB();
-      audioPlaybackStartupTime(MediaNames.MP3FILES);    
-      audioPlaybackStartupTime(MediaNames.AACFILES);   
-      
+        createDB();
+        audioPlaybackStartupTime(MediaNames.MP3FILES);
+        audioPlaybackStartupTime(MediaNames.AACFILES);
+
     }
-   
-    public void wmametadatautility(String[] testFile){
-      long t1 = 0;
-      long t2 = 0;
-      long sum = 0;
-      long duration = 0;
-      MediaMetadataRetriever retriever = new MediaMetadataRetriever();
-      String value;
-      for(int i = 0, n = testFile.length; i < n; ++i) {
-          try {
-              t1 = SystemClock.uptimeMillis();
-              retriever.setDataSource(testFile[i]);
-              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
-              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
-              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
-              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
-              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
-              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
-              value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
-              t2 = SystemClock.uptimeMillis();
-              duration = t2 - t1;
-              Log.v(TAG, "Time taken = " + duration);
-              sum=sum+duration;           
-          }
-          catch (Exception e){Log.v(TAG, e.getMessage());}
-          
-      }      
-      Log.v(TAG, "Average duration = " + sum/testFile.length); 
+
+    public void wmametadatautility(String[] testFile) {
+        long t1 = 0;
+        long t2 = 0;
+        long sum = 0;
+        long duration = 0;
+        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+        String value;
+        for (int i = 0, n = testFile.length; i < n; ++i) {
+            try {
+                t1 = SystemClock.uptimeMillis();
+                retriever.setDataSource(testFile[i]);
+                value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
+                value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
+                value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
+                value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
+                value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
+                value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
+                value =
+                    retriever
+                    .extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
+                t2 = SystemClock.uptimeMillis();
+                duration = t2 - t1;
+                Log.v(TAG, "Time taken = " + duration);
+                sum = sum + duration;
+            } catch (Exception e) {
+                Log.v(TAG, e.getMessage());
+            }
+
+        }
+        Log.v(TAG, "Average duration = " + sum / testFile.length);
     }
-    
+
+
+    // Note: This test is to assume the mediaserver's pid is 34
+    public void mediaStressPlayback(String testFilePath) {
+        for (int i = 0; i < NUM_PLAYBACk_IN_EACH_LOOP; i++) {
+            MediaPlayer mp = new MediaPlayer();
+            try {
+                mp.setDataSource(testFilePath);
+                mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
+                mp.prepare();
+                mp.start();
+                Thread.sleep(MEDIA_STRESS_WAIT_TIME);
+                mp.release();
+            } catch (Exception e) {
+                mp.release();
+                Log.v(TAG, e.toString());
+            }
+        }
+    }
+
+    // Note: This test is to assume the mediaserver's pid is 34
+    private void stressVideoRecord(int frameRate, int width, int height, int videoFormat,
+            int outFormat, String outFile, boolean videoOnly) {
+        // Video recording
+        for (int i = 0; i < NUM_PLAYBACk_IN_EACH_LOOP; i++) {
+            MediaRecorder mRecorder = new MediaRecorder();
+            try {
+                if (!videoOnly) {
+                    Log.v(TAG, "setAudioSource");
+                    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+                }
+                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
+                mRecorder.setOutputFormat(outFormat);
+                Log.v(TAG, "output format " + outFormat);
+                mRecorder.setOutputFile(outFile);
+                mRecorder.setVideoFrameRate(frameRate);
+                mRecorder.setVideoSize(width, height);
+                Log.v(TAG, "setEncoder");
+                mRecorder.setVideoEncoder(videoFormat);
+                if (!videoOnly) {
+                    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
+                }
+                mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
+                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
+                mRecorder.prepare();
+                mRecorder.start();
+                Thread.sleep(MEDIA_STRESS_WAIT_TIME);
+                mRecorder.stop();
+                mRecorder.release();
+            } catch (Exception e) {
+                Log.v("record video failed ", e.toString());
+                mRecorder.release();
+            }
+        }
+    }
+
+    public void stressAudioRecord(String filePath) {
+        // This test is only for the short media file
+        for (int i = 0; i < NUM_PLAYBACk_IN_EACH_LOOP; i++) {
+            MediaRecorder mRecorder = new MediaRecorder();
+            try {
+                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
+                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
+                mRecorder.setOutputFile(filePath);
+                mRecorder.prepare();
+                mRecorder.start();
+                Thread.sleep(MEDIA_STRESS_WAIT_TIME);
+                mRecorder.stop();
+                mRecorder.release();
+            } catch (Exception e) {
+                Log.v(TAG, e.toString());
+                mRecorder.release();
+            }
+        }
+    }
+
+    //Write the ps output to the file
+    public void getMemoryWriteToLog(Writer output) {
+        String cm = "ps mediaserver";
+        String memoryUsage = null;
+        int ch;
+        try {
+            Process p = Runtime.getRuntime().exec(cm);
+            InputStream in = p.getInputStream();
+            StringBuffer sb = new StringBuffer(512);
+            while ((ch = in.read()) != -1) {
+                sb.append((char) ch);
+            }
+            memoryUsage = sb.toString();
+        } catch (IOException e) {
+            Log.v(TAG, e.toString());
+        }
+
+        String[] poList = memoryUsage.split("\r|\n|\r\n");
+        String memusage = poList[1].concat("\n");
+        Log.v(TAG, memusage);
+        try {
+            //Write to file output
+            output.write(memusage);
+        } catch (Exception e) {
+            e.toString();
+        }
+    }
+
+
     @Suppress
     public void testWmaParseTime() throws Exception {
-     // createDB();
-      wmametadatautility(MediaNames.WMASUPPORTED);
+        // createDB();
+        wmametadatautility(MediaNames.WMASUPPORTED);
     }
-   
-    
-}
 
+
+    // Test case 1: Capture the memory usage after every 20 h263 playback
+    @LargeTest
+    public void testH263VideoPlaybackMemoryUsage() throws Exception {
+        File h263MemoryOut = new File(H263_VIDEO_PLAYBACK_MEMOUT);
+        Writer output = new BufferedWriter(new FileWriter(h263MemoryOut));
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            mediaStressPlayback(MediaNames.VIDEO_HIGHRES_H263);
+            getMemoryWriteToLog(output);
+        }
+        output.close();
+    }
+
+    // Test case 2: Capture the memory usage after every 20 h264 playback
+    @LargeTest
+    public void testH264VideoPlaybackMemoryUsage() throws Exception {
+        File h264MemoryOut = new File(H264_VIDEO_PLAYBACK_MEMOUT);
+        Writer output = new BufferedWriter(new FileWriter(h264MemoryOut));
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            mediaStressPlayback(MediaNames.VIDEO_H264_AMR);
+            getMemoryWriteToLog(output);
+        }
+        output.close();
+    }
+
+    // Test case 3: Capture the memory usage after each 20 WMV playback
+    @LargeTest
+    public void testWMVVideoPlaybackMemoryUsage() throws Exception {
+        File wmvMemoryOut = new File(WMV_VIDEO_PLAYBACK_MEMOUT);
+        Writer output = new BufferedWriter(new FileWriter(wmvMemoryOut));
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            mediaStressPlayback(MediaNames.VIDEO_WMV);
+            getMemoryWriteToLog(output);
+        }
+        output.close();
+    }
+
+    // Test case 4: Capture the memory usage after every 20 video only recorded
+    @LargeTest
+    public void testH263RecordVideoOnlyMemoryUsage() throws Exception {
+        File videoH263RecordOnlyMemoryOut = new File(H263_VIDEO_ONLY_RECORD_MEMOUT);
+        Writer output = new BufferedWriter(new FileWriter(videoH263RecordOnlyMemoryOut));
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
+                    MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
+            getMemoryWriteToLog(output);
+        }
+        output.close();
+    }
+
+    // Test case 5: Capture the memory usage after every 20 video only recorded
+    @LargeTest
+    public void testMpeg4RecordVideoOnlyMemoryUsage() throws Exception {
+        File videoMp4RecordOnlyMemoryOut = new File(MP4_VIDEO_ONLY_RECORD_MEMOUT);
+        Writer output = new BufferedWriter(new FileWriter(videoMp4RecordOnlyMemoryOut));
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
+                    MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
+            getMemoryWriteToLog(output);
+        }
+        output.close();
+    }
+
+    // Test case 6: Capture the memory usage after every 20 video and audio recorded
+    @LargeTest
+    public void testRecordVidedAudioMemoryUsage() throws Exception {
+        File videoRecordAudioMemoryOut = new File(H263_VIDEO_AUDIO_RECORD_MEMOUT);
+        Writer output = new BufferedWriter(new FileWriter(videoRecordAudioMemoryOut));
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
+                    MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false);
+            getMemoryWriteToLog(output);
+        }
+        output.close();
+    }
+
+    // Test case 7: Capture the memory usage after every 20 audio only recorded
+    @LargeTest
+    public void testRecordAudioOnlyMemoryUsage() throws Exception {
+        File audioOnlyMemoryOut = new File(AUDIO_ONLY_RECORD_MEMOUT);
+        Writer output = new BufferedWriter(new FileWriter(audioOnlyMemoryOut));
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            stressAudioRecord(MediaNames.RECORDER_OUTPUT);
+            getMemoryWriteToLog(output);
+        }
+        output.close();
+    }
+}
diff --git a/opengl/java/android/opengl/Matrix.java b/opengl/java/android/opengl/Matrix.java
index 38be6be..13ba36e 100644
--- a/opengl/java/android/opengl/Matrix.java
+++ b/opengl/java/android/opengl/Matrix.java
@@ -19,7 +19,7 @@
 /**
  * Matrix math utilities. These methods operate on OpenGL ES format
  * matrices and vectors stored in float arrays.
- * 
+ *
  * Matrices are 4 x 4 column-vector matrices stored in column-major
  * order:
  * <pre>
@@ -28,7 +28,7 @@
  *  m[offset +  2] m[offset +  6] m[offset + 10] m[offset + 14]
  *  m[offset +  3] m[offset +  7] m[offset + 11] m[offset + 15]
  * </pre>
- * 
+ *
  * Vectors are 4 row x 1 column column-vectors stored in order:
  * <pre>
  * v[offset + 0]
@@ -45,11 +45,11 @@
      * matrix multiplication works, the result matrix will have the same
      * effect as first multiplying by the rhs matrix, then multiplying by
      * the lhs matrix. This is the opposite of what you might expect.
-     * 
+     *
      * The same float array may be passed for result, lhs, and/or rhs. However,
      * the result element values are undefined if the result elements overlap
      * either the lhs or rhs elements.
-     * 
+     *
      * @param result The float array that holds the result.
      * @param resultOffset The offset into the result array where the result is
      *        stored.
@@ -57,7 +57,7 @@
      * @param lhsOffset The offset into the lhs array where the lhs is stored
      * @param rhs The float array that holds the right-hand-side matrix.
      * @param rhsOffset The offset into the rhs array where the rhs is stored.
-     * 
+     *
      * @throws IllegalArgumentException if result, lhs, or rhs are null, or if
      * resultOffset + 16 > result.length or lhsOffset + 16 > lhs.length or
      * rhsOffset + 16 > rhs.length.
@@ -68,11 +68,11 @@
     /**
      * Multiply a 4 element vector by a 4x4 matrix and store the result in a 4
      * element column vector. In matrix notation: result = lhs x rhs
-     * 
+     *
      * The same float array may be passed for resultVec, lhsMat, and/or rhsVec.
      * However, the resultVec element values are undefined if the resultVec
      * elements overlap either the lhsMat or rhsVec elements.
-     * 
+     *
      * @param resultVec The float array that holds the result vector.
      * @param resultVecOffset The offset into the result array where the result
      *        vector is stored.
@@ -90,10 +90,10 @@
     public static native void multiplyMV(float[] resultVec,
             int resultVecOffset, float[] lhsMat, int lhsMatOffset,
             float[] rhsVec, int rhsVecOffset);
-    
+
     /**
      * Transposes a 4 x 4 matrix.
-     * 
+     *
      * @param mTrans the array that holds the output inverted matrix
      * @param mTransOffset an offset into mInv where the inverted matrix is
      *        stored.
@@ -113,7 +113,7 @@
 
     /**
      * Inverts a 4 x 4 matrix.
-     * 
+     *
      * @param mInv the array that holds the output inverted matrix
      * @param mInvOffset an offset into mInv where the inverted matrix is
      *        stored.
@@ -220,7 +220,7 @@
 
     /**
      * Computes an orthographic projection matrix.
-     * 
+     *
      * @param m returns the result
      * @param mOffset
      * @param left
@@ -269,8 +269,8 @@
         m[mOffset + 9] = 0.0f;
         m[mOffset + 11] = 0.0f;
     }
-    
-    
+
+
     /**
      * Define a projection matrix in terms of six clip planes
      * @param m the float array that holds the perspective matrix
@@ -283,7 +283,7 @@
      * @param near
      * @param far
      */
-    
+
     public static void frustumM(float[] m, int offset,
             float left, float right, float bottom, float top,
             float near, float far) {
@@ -331,7 +331,7 @@
 
     /**
      * Computes the length of a vector
-     * 
+     *
      * @param x x coordinate of a vector
      * @param y y coordinate of a vector
      * @param z z coordinate of a vector
@@ -340,7 +340,7 @@
     public static float length(float x, float y, float z) {
         return (float) Math.sqrt(x * x + y * y + z * z);
     }
- 
+
     /**
      * Sets matrix m to the identity matrix.
      * @param sm returns the result
@@ -356,7 +356,7 @@
     }
 
     /**
-     * Scales matrix  m by sx, sy, and sz, putting the result in sm
+     * Scales matrix  m by x, y, and z, putting the result in sm
      * @param sm returns the result
      * @param smOffset index into sm where the result matrix starts
      * @param m source matrix
@@ -395,9 +395,9 @@
             m[ 8 + mi] *= z;
         }
     }
-    
+
     /**
-     * Translates matrix m by sx, sy, and sz, putting the result in tm
+     * Translates matrix m by x, y, and z, putting the result in tm
      * @param tm returns the result
      * @param tmOffset index into sm where the result matrix starts
      * @param m source matrix
@@ -409,6 +409,9 @@
     public static void translateM(float[] tm, int tmOffset,
             float[] m, int mOffset,
             float x, float y, float z) {
+        for (int i=0 ; i<12 ; i++) {
+            tm[tmOffset + i] = m[mOffset + i];
+        }
         for (int i=0 ; i<4 ; i++) {
             int tmi = tmOffset + i;
             int mi = mOffset + i;
@@ -416,9 +419,9 @@
                 m[12 + mi];
         }
     }
- 
+
     /**
-     * Translates matrix m by sx, sy, and sz in place.
+     * Translates matrix m by x, y, and z in place.
      * @param m matrix
      * @param mOffset index into m where the matrix starts
      * @param x translation factor x
@@ -433,7 +436,7 @@
             m[12 + mi] += m[mi] * x + m[4 + mi] * y + m[8 + mi] * z;
         }
     }
-    
+
     /**
      * Rotates matrix m by angle a (in degrees) around the axis (x, y, z)
      * @param rm returns the result
@@ -452,7 +455,7 @@
         setRotateM(r, 0, a, x, y, z);
         multiplyMM(rm, rmOffset, m, mOffset, r, 0);
     }
-    
+
     /**
      * Rotates matrix m in place by angle a (in degrees)
      * around the axis (x, y, z)
@@ -470,7 +473,7 @@
         multiplyMM(temp, 16, m, mOffset, temp, 0);
         System.arraycopy(temp, 16, m, mOffset, 16);
     }
-    
+
     /**
      * Rotates matrix m by angle a (in degrees) around the axis (x, y, z)
      * @param rm returns the result
@@ -524,7 +527,7 @@
             float zx = z * x;
             float xs = x * s;
             float ys = y * s;
-            float zs = z * s;       
+            float zs = z * s;
             rm[rmOffset +  0] = x*x*nc +  c;
             rm[rmOffset +  4] =  xy*nc - zs;
             rm[rmOffset +  8] =  zx*nc + ys;
@@ -536,7 +539,7 @@
             rm[rmOffset + 10] = z*z*nc +  c;
         }
     }
-    
+
     /**
      * Converts Euler angles to a rotation matrix
      * @param rm returns the result
@@ -558,7 +561,7 @@
         float sz = (float) Math.sin(z);
         float cxsy = cx * sy;
         float sxsy = sx * sy;
-        
+
         rm[rmOffset + 0]  =   cy * cz;
         rm[rmOffset + 1]  =  -cy * sz;
         rm[rmOffset + 2]  =   sy;
diff --git a/opengl/java/android/opengl/Visibility.java b/opengl/java/android/opengl/Visibility.java
index b802160..40e446f 100644
--- a/opengl/java/android/opengl/Visibility.java
+++ b/opengl/java/android/opengl/Visibility.java
@@ -17,7 +17,6 @@
 package android.opengl;
 
 /**
- * {@hide}
  * A collection of utility methods for computing the visibility of triangle
  * meshes.
  *
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp
index 1446fb2..5b90bf0 100644
--- a/opengl/libagl/egl.cpp
+++ b/opengl/libagl/egl.cpp
@@ -463,6 +463,8 @@
 
 // ----------------------------------------------------------------------------
 
+#define VERSION_MAJOR 1
+#define VERSION_MINOR 2
 static char const * const gVendorString     = "Google Inc.";
 static char const * const gVersionString    = "1.2 Android Driver";
 static char const * const gClientApiString  = "OpenGL ES";
@@ -1002,8 +1004,8 @@
     }
 
     if (res == EGL_TRUE) {
-        if (major != NULL) *major = 1;
-        if (minor != NULL) *minor = 2;
+        if (major != NULL) *major = VERSION_MAJOR;
+        if (minor != NULL) *minor = VERSION_MINOR;
     }
     return res;
 }
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp
index e35773e..687c8bc 100644
--- a/opengl/libs/EGL/egl.cpp
+++ b/opengl/libs/EGL/egl.cpp
@@ -50,8 +50,8 @@
 namespace android {
 // ----------------------------------------------------------------------------
 
-#define VERSION_MINOR 1
-#define VERSION_MAJOR 4
+#define VERSION_MAJOR 1
+#define VERSION_MINOR 4
 static char const * const gVendorString     = "Android";
 static char const * const gVersionString    = "1.31 Android META-EGL";
 static char const * const gClientApiString  = "OpenGL ES";
@@ -648,8 +648,8 @@
     }
 
     if (res == EGL_TRUE) {
-        if (major != NULL) *major = 1;
-        if (minor != NULL) *minor = 2;
+        if (major != NULL) *major = VERSION_MAJOR;
+        if (minor != NULL) *minor = VERSION_MINOR;
         return EGL_TRUE;
     }
     return setError(EGL_NOT_INITIALIZED, EGL_FALSE);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 90acd41..f8b5700 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -27,7 +27,6 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteStatement;
-import android.location.LocationManager;
 import android.media.AudioManager;
 import android.media.AudioService;
 import android.net.ConnectivityManager;
@@ -64,7 +63,7 @@
 
     private static final String TAG = "SettingsProvider";
     private static final String DATABASE_NAME = "settings.db";
-    private static final int DATABASE_VERSION = 32;
+    private static final int DATABASE_VERSION = 33;
     
     private Context mContext;
 
@@ -354,6 +353,24 @@
             upgradeVersion = 32;
         }
 
+        if (upgradeVersion == 32) {
+            // The Wi-Fi watchdog SSID list is now seeded with the value of
+            // the property ro.com.android.wifi-watchlist
+            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
+            if (!TextUtils.isEmpty(wifiWatchList)) {
+                db.beginTransaction();
+                try {
+                    db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
+                            Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
+                            wifiWatchList + "');");
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                }
+            }
+            upgradeVersion = 33;
+        }
+
         if (upgradeVersion != currentVersion) {
             Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
                     + ", must wipe the settings provider");
@@ -619,11 +636,20 @@
                 R.bool.def_wifi_on);
         loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
                 R.bool.def_networks_available_notification_on);
-        
+
+        String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
+        if (!TextUtils.isEmpty(wifiWatchList)) {
+            loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
+        }
+
         // Don't do this.  The SystemServer will initialize ADB_ENABLED from a
         // persistent system property instead.
         //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
         
+        // Allow mock locations default, based on build
+        loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION, 
+                "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
+        
         stmt.close();
     }
 
diff --git a/packages/SubscribedFeedsProvider/AndroidManifest.xml b/packages/SubscribedFeedsProvider/AndroidManifest.xml
index 94c4be5..6ecda48 100644
--- a/packages/SubscribedFeedsProvider/AndroidManifest.xml
+++ b/packages/SubscribedFeedsProvider/AndroidManifest.xml
@@ -6,7 +6,7 @@
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" />
     <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" />
-        
+
     <application android:process="system"
                  android:allowClearUserData="false"
                  android:icon="@drawable/app_icon"
@@ -17,7 +17,7 @@
                 android:multiprocess="false"
                 android:readPermission="android.permission.SUBSCRIBED_FEEDS_READ"
                 android:writePermission="android.permission.SUBSCRIBED_FEEDS_WRITE" />
-        <receiver android:name="SubscribedFeedsService">
+        <receiver android:name="SubscribedFeedsBroadcastReceiver">
             <intent-filter>
                 <action android:name="android.intent.action.GTALK_DATA_MESSAGE_RECEIVED" />
                 <category android:name="GSYNC_TICKLE"/>
@@ -29,5 +29,6 @@
                 <action android:name="com.android.subscribedfeeds.action.REFRESH" />
             </intent-filter>
         </receiver>
+        <service android:name="SubscribedFeedsIntentService"/>
     </application>
 </manifest>
diff --git a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java
new file mode 100644
index 0000000..3513215
--- /dev/null
+++ b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java
@@ -0,0 +1,41 @@
+/*
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+package com.android.providers.subscribedfeeds;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+/**
+ * Handles the XMPP_CONNECTED_ACTION intent by updating all the
+ * subscribed feeds with the new jabber id and initiating a sync
+ * for all subscriptions.
+ *
+ * Handles the TICKLE_ACTION intent by finding the matching
+ * subscribed feed and intiating a sync for it.
+ */
+public class SubscribedFeedsBroadcastReceiver extends BroadcastReceiver {
+
+    private static final String TAG = "Sync";
+
+    public void onReceive(Context context, Intent intent) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received intent " + intent);
+            intent.setClass(context, SubscribedFeedsIntentService.class);
+        context.startService(intent);
+    }
+}
diff --git a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsService.java b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
similarity index 77%
rename from packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsService.java
rename to packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
index 8d6e2723..df599c7 100644
--- a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsService.java
+++ b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
@@ -1,62 +1,35 @@
-/*
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
 package com.android.providers.subscribedfeeds;
 
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
+import android.content.Intent;
+import android.content.Context;
 import android.content.ContentResolver;
 import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
 import android.content.SharedPreferences;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteFullException;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.SubscribedFeeds;
-import android.provider.Sync;
-import android.provider.SyncConstValue;
-import android.text.TextUtils;
+import android.util.Log;
 import android.util.Config;
 import android.util.EventLog;
-import android.util.Log;
+import android.app.IntentService;
+import android.provider.Sync;
+import android.provider.SubscribedFeeds;
+import android.provider.SyncConstValue;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteFullException;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.os.Bundle;
+import android.os.Debug;
+import android.text.TextUtils;
+import android.net.Uri;
 
 import java.util.ArrayList;
 import java.util.Calendar;
 
 /**
- * Handles the XMPP_CONNECTED_ACTION intent by updating all the
- * subscribed feeds with the new jabber id and initiating a sync
- * for all subscriptions.
- *
- * Handles the TICKLE_ACTION intent by finding the matching
- * subscribed feed and intiating a sync for it.
+ * A service to handle various intents asynchronously.
  */
-public class SubscribedFeedsService extends BroadcastReceiver {
-
+public class SubscribedFeedsIntentService extends IntentService {
     private static final String TAG = "Sync";
 
-    private static final String SUBSCRIBED_FEEDS_REFRESH_ACTION =
-            "com.android.subscribedfeeds.action.REFRESH";
-
-    private static final Intent sSubscribedFeedsRefreshIntent =
-            new Intent(SUBSCRIBED_FEEDS_REFRESH_ACTION);
-
     private static final String[] sAccountProjection =
             new String[] {SubscribedFeeds.Accounts._SYNC_ACCOUNT};
 
@@ -67,11 +40,20 @@
 
     private static final String sSubscribedFeedsPrefs = "subscribedFeeds";
 
-    static final int LOG_TICKLE = 2742;
+    private static final String GTALK_DATA_MESSAGE_RECEIVED =
+            "android.intent.action.GTALK_DATA_MESSAGE_RECEIVED";
 
-    public void onReceive(Context context, Intent intent) {
-        if ("android.intent.action.GTALK_DATA_MESSAGE_RECEIVED".equals(
-                intent.getAction())) {
+    private static final String SUBSCRIBED_FEEDS_REFRESH_ACTION =
+            "com.android.subscribedfeeds.action.REFRESH";
+
+    private static final int LOG_TICKLE = 2742;
+
+    public SubscribedFeedsIntentService() {
+        super("SubscribedFeedsIntentService");
+    }
+
+    protected void onHandleIntent(Intent intent) {
+        if (GTALK_DATA_MESSAGE_RECEIVED.equals(intent.getAction())) {
             boolean fromTrustedServer = intent.getBooleanExtra("from_trusted_server", false);
             if (fromTrustedServer) {
                 String account = intent.getStringExtra("account");
@@ -89,7 +71,7 @@
                             + account + " - " + token);
                 }
 
-                handleTickle(context, account, token);
+                handleTickle(this, account, token);
             } else {
                 if (Log.isLoggable(TAG, Log.VERBOSE)) {
                     Log.v(TAG, "Ignoring tickle -- not from trusted server.");
@@ -102,25 +84,23 @@
                 Log.d(TAG, "Received boot completed action");
             }
             // load the time from the shared preferences and schedule an alarm
-            long refreshTime = context.getSharedPreferences(
+            long refreshTime = getSharedPreferences(
                     sSubscribedFeedsPrefs,
                     Context.MODE_WORLD_READABLE).getLong(sRefreshTime, 0);
-            scheduleRefresh(context, refreshTime);
-        } else if (sSubscribedFeedsRefreshIntent.getAction().equals(
-                intent.getAction())) {
+            scheduleRefresh(this, refreshTime);
+        } else if (SUBSCRIBED_FEEDS_REFRESH_ACTION.equals(intent.getAction())) {
             if (Config.LOGD) {
                 Log.d(TAG, "Received sSubscribedFeedsRefreshIntent");
             }
-            handleRefreshAlarm(context);
+            handleRefreshAlarm(this);
         }
     }
-
     private void scheduleRefresh(Context context, long when) {
         AlarmManager alarmManager = (AlarmManager) context.getSystemService(
                 Context.ALARM_SERVICE);
-        PendingIntent sender = PendingIntent.getBroadcast(context,
-                0, sSubscribedFeedsRefreshIntent, 0);
-        alarmManager.set(AlarmManager.RTC, when, sender);
+        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
+                0, new Intent(SUBSCRIBED_FEEDS_REFRESH_ACTION), 0);
+        alarmManager.set(AlarmManager.RTC, when, pendingIntent);
     }
 
     private void handleTickle(Context context, String account, String feed) {
@@ -204,10 +184,8 @@
         // Schedule a refresh.
         long refreshTime = Calendar.getInstance().getTimeInMillis() + SUBSCRIPTION_REFRESH_INTERVAL;
         scheduleRefresh(context, refreshTime);
-        SharedPreferences preferences = context
-                .getSharedPreferences(sSubscribedFeedsPrefs,
-                        Context.MODE_WORLD_READABLE);
-        SharedPreferences.Editor editor = preferences.edit();
+        SharedPreferences.Editor editor = context.getSharedPreferences(sSubscribedFeedsPrefs,
+                Context.MODE_WORLD_READABLE).edit();
         editor.putLong(sRefreshTime, refreshTime);
         editor.commit();
     }
diff --git a/preloaded-classes b/preloaded-classes
index a90579f..b91f41b 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -783,7 +783,7 @@
 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream
 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream
 org.apache.harmony.xnet.provider.jsse.SSLParameters
-org.apache.harmony.xnet.provider.jsse.SSLSessionContextImpl$1
+org.apache.harmony.xnet.provider.jsse.ClientSessionContext
 org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl
 org.apache.harmony.xnet.provider.jsse.TrustManagerImpl
 org.apache.http.HttpHost
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index d8012b2..07c7299 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -34,21 +34,26 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.text.TextUtils;
-import android.util.Config;
+import android.text.format.Time;
+import android.util.EventLog;
 import android.util.Log;
 
 import java.io.FileDescriptor;
-import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.TimeZone;
 
 class AlarmManagerService extends IAlarmManager.Stub {
+    // The threshold for how long an alarm can be late before we print a
+    // warning message.  The time duration is in milliseconds.
+    private static final long LATE_ALARM_THRESHOLD = 10 * 1000;
+    
     private static final int RTC_WAKEUP_MASK = 1 << AlarmManager.RTC_WAKEUP;
     private static final int RTC_MASK = 1 << AlarmManager.RTC;
     private static final int ELAPSED_REALTIME_WAKEUP_MASK = 1 << AlarmManager.ELAPSED_REALTIME_WAKEUP; 
@@ -72,6 +77,7 @@
     private final ArrayList<Alarm> mRtcAlarms = new ArrayList<Alarm>();
     private final ArrayList<Alarm> mElapsedRealtimeWakeupAlarms = new ArrayList<Alarm>();
     private final ArrayList<Alarm> mElapsedRealtimeAlarms = new ArrayList<Alarm>();
+    private final IncreasingTimeOrder mIncreasingTimeOrder = new IncreasingTimeOrder();
     
     // slots corresponding with the inexact-repeat interval buckets,
     // ordered from shortest to longest
@@ -338,11 +344,26 @@
     private int addAlarmLocked(Alarm alarm) {
         ArrayList<Alarm> alarmList = getAlarmList(alarm.type);
         
-        int index = Collections.binarySearch(alarmList, alarm);
-        index = (index < 0) ? ((index + 1) * -1) : index;
-        if (localLOGV) Log.v(
-            TAG, "Adding alarm " + alarm + " at " + index);
+        int index = Collections.binarySearch(alarmList, alarm, mIncreasingTimeOrder);
+        if (index < 0) {
+            index = 0 - index - 1;
+        }
+        if (localLOGV) Log.v(TAG, "Adding alarm " + alarm + " at " + index);
         alarmList.add(index, alarm);
+
+        if (localLOGV) {
+            // Display the list of alarms for this alarm type
+            Log.v(TAG, "alarms: " + alarmList.size() + " type: " + alarm.type);
+            int position = 0;
+            for (Alarm a : alarmList) {
+                Time time = new Time();
+                time.set(a.when);
+                String timeStr = time.format("%b %d %I:%M:%S %p");
+                Log.v(TAG, position + ": " + timeStr
+                        + " " + a.operation.getTargetPackage());
+                position += 1;
+            }
+        }
         
         return index;
     }
@@ -459,14 +480,22 @@
 
             if (localLOGV) Log.v(TAG, "Checking active alarm when=" + alarm.when + " " + alarm);
 
-            if (alarm.when > now)
-            {
+            if (alarm.when > now) {
                 // don't fire alarms in the future
                 break;
             }
+            
+            // If the alarm is late, then print a warning message.
+            // Note that this can happen if the user creates a new event on
+            // the Calendar app with a reminder that is in the past. In that
+            // case, the reminder alarm will fire immediately.
+            if (localLOGV && now - alarm.when > LATE_ALARM_THRESHOLD) {
+                Log.v(TAG, "alarm is late! alarm time: " + alarm.when
+                        + " now: " + now + " delay (in seconds): "
+                        + (now - alarm.when) / 1000);
+            }
 
-            // add it to the trigger list so we can trigger it without the lock held.
-            // recurring alarms may have passed several alarm intervals while the
+            // Recurring alarms may have passed several alarm intervals while the
             // phone was asleep or off, so pass a trigger count when sending them.
             if (localLOGV) Log.v(TAG, "Alarm triggering: " + alarm);
             alarm.count = 1;
@@ -481,28 +510,42 @@
             it.remove();
             
             // if it repeats queue it up to be read-added to the list
-            if (alarm.repeatInterval > 0)
-            {
+            if (alarm.repeatInterval > 0) {
                 repeats.add(alarm);
             }
         }
 
         // reset any repeating alarms.
         it = repeats.iterator();
-        while (it.hasNext())
-        {
+        while (it.hasNext()) {
             Alarm alarm = it.next();
             alarm.when += alarm.count * alarm.repeatInterval;
             addAlarmLocked(alarm);
         }
         
-        if (alarmList.size() > 0)
-        {
+        if (alarmList.size() > 0) {
             setLocked(alarmList.get(0));
         }
     }
     
-    private class Alarm implements Comparable<Alarm> {
+    /**
+     * This Comparator sorts Alarms into increasing time order.
+     */
+    public static class IncreasingTimeOrder implements Comparator<Alarm> {
+        public int compare(Alarm a1, Alarm a2) {
+            long when1 = a1.when;
+            long when2 = a2.when;
+            if (when1 - when2 > 0) {
+                return 1;
+            }
+            if (when1 - when2 < 0) {
+                return -1;
+            }
+            return 0;
+        }
+    }
+    
+    private static class Alarm {
         public int type;
         public int count;
         public long when;
@@ -515,15 +558,7 @@
             operation = null;
         }
         
-        public int compareTo(Alarm obj)
-        {
-            if (obj.when > this.when) return -1;
-            if (obj.when < this.when) return 1;
-            if (obj.operation.equals(this.operation)
-                    && obj.repeatInterval == this.repeatInterval) return 0;
-            return -1;
-        }
-        
+        @Override
         public String toString()
         {
             return "Alarm{"
@@ -701,11 +736,11 @@
         public void scheduleDateChangedEvent() {
             Calendar calendar = Calendar.getInstance();
             calendar.setTimeInMillis(System.currentTimeMillis());
-            calendar.add(Calendar.DAY_OF_MONTH, 1);
             calendar.set(Calendar.HOUR, 0);
             calendar.set(Calendar.MINUTE, 0);
             calendar.set(Calendar.SECOND, 0);
             calendar.set(Calendar.MILLISECOND, 0);
+            calendar.add(Calendar.DAY_OF_MONTH, 1);
       
             set(AlarmManager.RTC, calendar.getTimeInMillis(), mDateChangeSender);
         }
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 9c9a580..3a9a59f 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -20,20 +20,31 @@
 import com.android.server.am.BatteryStatsService;
 
 import android.app.ActivityManagerNative;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.BatteryManager;
 import android.os.Binder;
+import android.os.Debug;
+import android.os.IBinder;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.UEventObserver;
+import android.provider.Checkin;
+import android.provider.Settings;
 import android.util.EventLog;
 import android.util.Log;
 
+import java.io.File;
 import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.PrintWriter;
-import java.lang.String;
+
+
 
 /**
  * <p>BatteryService monitors the charging status, and charge level of the device
@@ -60,12 +71,24 @@
 class BatteryService extends Binder {
     private static final String TAG = BatteryService.class.getSimpleName();
     
+    private static final boolean LOCAL_LOGV = false;
+    
     static final int LOG_BATTERY_LEVEL = 2722;
     static final int LOG_BATTERY_STATUS = 2723;
     static final int LOG_BATTERY_DISCHARGE_STATUS = 2730;
     
     static final int BATTERY_SCALE = 100;    // battery capacity is a percentage
 
+    // Used locally for determining when to make a last ditch effort to log
+    // discharge stats before the device dies.
+    private static final int CRITICAL_BATTERY_LEVEL = 4; 
+
+    private static final int DUMP_MAX_LENGTH = 24 * 1024;
+    private static final String[] DUMPSYS_ARGS = new String[] { "-c", "-u" };
+    private static final String BATTERY_STATS_SERVICE_NAME = "batteryinfo";
+    
+    private static final String DUMPSYS_DATA_PATH = "/data/system/";
+
     // This should probably be exposed in the API, though it's not critical
     private static final int BATTERY_PLUGGED_NONE = 0;
 
@@ -81,6 +104,7 @@
     private int mBatteryVoltage;
     private int mBatteryTemperature;
     private String mBatteryTechnology;
+    private boolean mBatteryLevelCritical;
 
     private int mLastBatteryStatus;
     private int mLastBatteryHealth;
@@ -88,6 +112,7 @@
     private int mLastBatteryLevel;
     private int mLastBatteryVoltage;
     private int mLastBatteryTemperature;
+    private boolean mLastBatteryLevelCritical;
     
     private int mPlugType;
     private int mLastPlugType = -1; // Extra state so we can detect first run
@@ -95,6 +120,7 @@
     private long mDischargeStartTime;
     private int mDischargeStartLevel;
     
+    
     public BatteryService(Context context) {
         mContext = context;
         mBatteryStats = BatteryStatsService.getService();
@@ -149,6 +175,8 @@
 
     private synchronized final void update() {
         native_update();
+
+        mBatteryLevelCritical = mBatteryLevel <= CRITICAL_BATTERY_LEVEL;
         if (mAcOnline) {
             mPlugType = BatteryManager.BATTERY_PLUGGED_AC;
         } else if (mUsbOnline) {
@@ -176,6 +204,8 @@
                                 mDischargeStartLevel, mBatteryLevel);
                         // make sure we see a discharge event before logging again
                         mDischargeStartTime = 0; 
+                        
+                        logOutlier(duration);
                     }
                 } else if (mPlugType == BATTERY_PLUGGED_NONE) {
                     // charging -> discharging or we just powered up
@@ -197,6 +227,12 @@
                 EventLog.writeEvent(LOG_BATTERY_LEVEL,
                         mBatteryLevel, mBatteryVoltage, mBatteryTemperature);
             }
+            if (mBatteryLevelCritical && !mLastBatteryLevelCritical &&
+                    mPlugType == BATTERY_PLUGGED_NONE) {
+                // We want to make sure we log discharge cycle outliers
+                // if the battery is about to die.
+                logOutlier(SystemClock.elapsedRealtime() - mDischargeStartTime);
+            }
             
             mLastBatteryStatus = mBatteryStatus;
             mLastBatteryHealth = mBatteryHealth;
@@ -205,6 +241,7 @@
             mLastPlugType = mPlugType;
             mLastBatteryVoltage = mBatteryVoltage;
             mLastBatteryTemperature = mBatteryTemperature;
+            mLastBatteryLevelCritical = mBatteryLevelCritical;
             
             sendIntent();
         }
@@ -247,6 +284,83 @@
         ActivityManagerNative.broadcastStickyIntent(intent, null);
     }
 
+    private final void logBatteryStats() {
+        
+        IBinder batteryInfoService = ServiceManager.getService(BATTERY_STATS_SERVICE_NAME);
+        if (batteryInfoService != null) {
+            byte[] buffer = new byte[DUMP_MAX_LENGTH];
+            File dumpFile = null;
+            FileOutputStream dumpStream = null;
+            try {
+                // dump the service to a file
+                dumpFile = new File(DUMPSYS_DATA_PATH + BATTERY_STATS_SERVICE_NAME + ".dump");
+                dumpStream = new FileOutputStream(dumpFile);
+                batteryInfoService.dump(dumpStream.getFD(), DUMPSYS_ARGS);
+                dumpStream.getFD().sync();
+
+                // read dumped file above into buffer truncated to DUMP_MAX_LENGTH
+                // and insert into events table.
+                int length = (int) Math.min(dumpFile.length(), DUMP_MAX_LENGTH);
+                FileInputStream fileInputStream = new FileInputStream(dumpFile);
+                int nread = fileInputStream.read(buffer, 0, length);
+                if (nread > 0) {
+                    Checkin.logEvent(mContext.getContentResolver(), 
+                            Checkin.Events.Tag.BATTERY_DISCHARGE_INFO, 
+                            new String(buffer, 0, nread));
+                    if (LOCAL_LOGV) Log.v(TAG, "dumped " + nread + "b from " + 
+                            batteryInfoService + "to log");
+                    if (LOCAL_LOGV) Log.v(TAG, "actual dump:" + new String(buffer, 0, nread));
+                }
+            } catch (RemoteException e) {
+                Log.e(TAG, "failed to dump service '" + BATTERY_STATS_SERVICE_NAME + 
+                        "':" + e);
+            } catch (IOException e) {
+                Log.e(TAG, "failed to write dumpsys file: " +  e);
+            } finally {
+                // make sure we clean up
+                if (dumpStream != null) {
+                    try {
+                        dumpStream.close();
+                    } catch (IOException e) {
+                        Log.e(TAG, "failed to close dumpsys output stream");
+                    }
+                }
+                if (dumpFile != null && !dumpFile.delete()) {
+                    Log.e(TAG, "failed to delete temporary dumpsys file: "
+                            + dumpFile.getAbsolutePath());
+                }
+            }
+        }
+    }
+    
+    private final void logOutlier(long duration) {
+        ContentResolver cr = mContext.getContentResolver();
+        String dischargeThresholdString = Settings.Gservices.getString(cr,
+                Settings.Gservices.BATTERY_DISCHARGE_THRESHOLD);
+        String durationThresholdString = Settings.Gservices.getString(cr,
+                Settings.Gservices.BATTERY_DISCHARGE_DURATION_THRESHOLD);
+        
+        if (dischargeThresholdString != null && durationThresholdString != null) {
+            try {
+                long durationThreshold = Long.parseLong(durationThresholdString);
+                int dischargeThreshold = Integer.parseInt(dischargeThresholdString);
+                if (duration <= durationThreshold && 
+                        mDischargeStartLevel - mBatteryLevel >= dischargeThreshold) {
+                    // If the discharge cycle is bad enough we want to know about it.
+                    logBatteryStats();
+                }
+                if (LOCAL_LOGV) Log.v(TAG, "duration threshold: " + durationThreshold + 
+                        " discharge threshold: " + dischargeThreshold);
+                if (LOCAL_LOGV) Log.v(TAG, "duration: " + duration + " discharge: " + 
+                        (mDischargeStartLevel - mBatteryLevel));
+            } catch (NumberFormatException e) {
+                Log.e(TAG, "Invalid DischargeThresholds GService string: " + 
+                        durationThresholdString + " or " + dischargeThresholdString);
+                return;
+            }
+        }
+    }
+
     private final int getIcon(int level) {
         if (mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) {
             return com.android.internal.R.drawable.stat_sys_battery_charge;
diff --git a/services/java/com/android/server/GadgetService.java b/services/java/com/android/server/GadgetService.java
index 4a430e0..0943778 100644
--- a/services/java/com/android/server/GadgetService.java
+++ b/services/java/com/android/server/GadgetService.java
@@ -229,7 +229,7 @@
             int callingUid = getCallingUid();
             final int N = mHosts.size();
             boolean changed = false;
-            for (int i=0; i<N; i++) {
+            for (int i=N-1; i>=0; i--) {
                 Host host = mHosts.get(i);
                 if (host.uid == callingUid) {
                     deleteHostLocked(host);
@@ -244,7 +244,7 @@
 
     void deleteHostLocked(Host host) {
         final int N = host.instances.size();
-        for (int i=0; i<N; i++) {
+        for (int i=N-1; i>=0; i--) {
             GadgetId id = host.instances.get(i);
             deleteGadgetLocked(id);
         }
@@ -622,6 +622,17 @@
         }
         return gadgetIds;
     }
+    
+    public int[] getGadgetIds(ComponentName provider) {
+        synchronized (mGadgetIds) {
+            Provider p = lookupProviderLocked(provider);
+            if (p != null && getCallingUid() == p.uid) {
+                return getGadgetIds(p);                
+            } else {
+                return new int[0];
+            }
+        }
+    }
 
     private Provider parseProviderInfoXml(ComponentName component, ResolveInfo ri) {
         Provider p = null;
diff --git a/services/java/com/android/server/HardwareService.java b/services/java/com/android/server/HardwareService.java
index 40456ff..2131ffdd 100755
--- a/services/java/com/android/server/HardwareService.java
+++ b/services/java/com/android/server/HardwareService.java
@@ -25,6 +25,7 @@
 import android.os.IHardwareService;
 import android.os.Power;
 import android.os.PowerManager;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.IBinder;
 import android.os.Binder;
@@ -240,6 +241,7 @@
         }
 
         public void run() {
+            Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_DISPLAY);
             synchronized (this) {
                 int index = 0;
                 long[] pattern = mPattern;
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index bc8da93..9d69114 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -214,7 +214,6 @@
 
     // Last known cell service state
     private TelephonyManager mTelephonyManager;
-    private int mSignalStrength = -1;
 
     // Location collector
     private ILocationCollector mCollector;
@@ -1764,7 +1763,7 @@
                         Log.d(TAG, "installing network location provider");
                         INetworkLocationManager.InstallCallback callback =
                                 (INetworkLocationManager.InstallCallback)msg.obj;
-                        callback.installNetworkLocationProvider(mContext, LocationManagerService.this);
+                        callback.installNetworkLocationProvider(LocationManagerService.this);
                     }
                 }
             } catch (Exception e) {
@@ -1774,40 +1773,90 @@
         }
     }
 
-    PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
-
-        private CellState mLastCellState = null;
+    class CellLocationUpdater extends Thread {
+        CellLocation mNextLocation;
+        
+        CellLocationUpdater() {
+            super("CellLocationUpdater");
+        }
+        
         @Override
-        public void onCellLocationChanged(CellLocation cellLocation) {
-            try {
+        public void run() {
+            int curAsu = -1;
+            CellLocation curLocation = null;
+            
+            while (true) {
+                // See if there is more work to do...
                 synchronized (mLocationListeners) {
-                    int asu = mSignalStrength;
-    
-                    // Gets cell state
-                    mLastCellState = new CellState(mTelephonyManager, cellLocation, asu);
-    
-                    // Notify collector
-                    if (mCollector != null) {
-                        mCollector.updateCellState(mLastCellState);
+                    if (curLocation == mNextLocation) {
+                        mCellLocationUpdater = null;
+                        break;
                     }
+                    
+                    curLocation = mNextLocation;
+                    if (curLocation == null) {
+                        mCellLocationUpdater = null;
+                        break;
+                    }
+                    
+                    curAsu = mLastSignalStrength;
+                    
+                    mNextLocation = null;
+                }
+                
+                try {
+                    // Gets cell state.  This can block so must be done without
+                    // locks held.
+                    CellState cs = new CellState(mTelephonyManager, curLocation, curAsu);
+                    
+                    synchronized (mLocationListeners) {
+                        mLastCellState = cs;
+        
+                        cs.updateSignalStrength(mLastSignalStrength);
+                        cs.updateRadioType(mLastRadioType);
+                        
+                        // Notify collector
+                        if (mCollector != null) {
+                            mCollector.updateCellState(cs);
+                        }
     
-                    // Updates providers
-                    List<LocationProviderImpl> providers = LocationProviderImpl.getProviders();
-                    for (LocationProviderImpl provider : providers) {
-                        if (provider.requiresCell()) {
-                            provider.updateCellState(mLastCellState);
+                        // Updates providers
+                        List<LocationProviderImpl> providers = LocationProviderImpl.getProviders();
+                        for (LocationProviderImpl provider : providers) {
+                            if (provider.requiresCell()) {
+                                provider.updateCellState(cs);
+                            }
                         }
                     }
+                } catch (RuntimeException e) {
+                    Log.e(TAG, "Exception in PhoneStateListener.onCellLocationChanged:", e);
                 }
-            } catch (Exception e) {
-                Log.e(TAG, "Exception in PhoneStateListener.onCellLocationCahnged:", e);
+            }
+        }
+    }
+    
+    CellLocationUpdater mCellLocationUpdater = null;
+    CellState mLastCellState = null;
+    int mLastSignalStrength = -1;
+    int mLastRadioType = -1;
+    
+    PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
+
+        @Override
+        public void onCellLocationChanged(CellLocation cellLocation) {
+            synchronized (mLocationListeners) {
+                if (mCellLocationUpdater == null) {
+                    mCellLocationUpdater = new CellLocationUpdater();
+                    mCellLocationUpdater.start();
+                }
+                mCellLocationUpdater.mNextLocation = cellLocation;
             }
         }
 
         @Override
         public void onSignalStrengthChanged(int asu) {
             synchronized (mLocationListeners) {
-                mSignalStrength = asu;
+                mLastSignalStrength = asu;
     
                 if (mLastCellState != null) {
                     mLastCellState.updateSignalStrength(asu);
@@ -1818,8 +1867,18 @@
         @Override
         public void onDataConnectionStateChanged(int state) {
             synchronized (mLocationListeners) {
+                // Get radio type
+                int radioType = mTelephonyManager.getNetworkType();
+                if (radioType == TelephonyManager.NETWORK_TYPE_GPRS ||
+                    radioType == TelephonyManager.NETWORK_TYPE_EDGE) {
+                    radioType = CellState.RADIO_TYPE_GPRS;
+                } else if (radioType == TelephonyManager.NETWORK_TYPE_UMTS) {
+                    radioType = CellState.RADIO_TYPE_WCDMA;
+                }
+                mLastRadioType = radioType;
+
                 if (mLastCellState != null) {
-                    mLastCellState.updateRadioType(mTelephonyManager);
+                    mLastCellState.updateRadioType(radioType);
                 }
             }
         }
@@ -2555,8 +2614,11 @@
             pw.println("  mGpsNavigating=" + mGpsNavigating);
             pw.println("  mNetworkLocationProvider=" + mNetworkLocationProvider);
             pw.println("  mNetworkLocationInterface=" + mNetworkLocationInterface);
+            pw.println("  mLastSignalStrength=" + mLastSignalStrength
+                    + "  mLastRadioType=" + mLastRadioType);
+            pw.println("  mCellLocationUpdater=" + mCellLocationUpdater);
+            pw.println("  mLastCellState=" + mLastCellState);
             pw.println("  mCollector=" + mCollector);
-            pw.println("  mSignalStrength=" + mSignalStrength);
             pw.println("  mAlarmInterval=" + mAlarmInterval
                     + " mScreenOn=" + mScreenOn
                     + " mWakeLockAcquireTime=" + mWakeLockAcquireTime);
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 0feb1da..8814e48 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -505,9 +505,12 @@
             if (mMediaStorageNotification == null) {
                 mMediaStorageNotification = new Notification();
                 mMediaStorageNotification.when = 0;
-                if (mPlaySounds) {
-                    mMediaStorageNotification.defaults |= Notification.DEFAULT_SOUND;
-                }
+            }
+
+            if (mPlaySounds) {
+                mMediaStorageNotification.defaults |= Notification.DEFAULT_SOUND;
+            } else {
+                mMediaStorageNotification.defaults &= ~Notification.DEFAULT_SOUND;
             }
 
             if (dismissable) {
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index e5de7f9..bc4b169 100644
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -311,6 +311,17 @@
                     mBatteryFull = batteryFull;
                     updateLights();
                 }
+            } else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)
+                    || action.equals(Intent.ACTION_PACKAGE_RESTARTED)) {
+                Uri uri = intent.getData();
+                if (uri == null) {
+                    return;
+                }
+                String pkgName = uri.getSchemeSpecificPart();
+                if (pkgName == null) {
+                    return;
+                }
+                cancelAllNotifications(pkgName);
             }
         }
     };
@@ -331,6 +342,8 @@
         // register for battery changed notifications
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_BATTERY_CHANGED);
+        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+        filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
         mContext.registerReceiver(mIntentReceiver, filter);
     }
 
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index c490e42..fec3608 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -1828,7 +1828,7 @@
         }
         return true;
     }
-    
+        
     private PackageParser.Package scanPackageLI(
         File scanFile, File destCodeFile, File destResourceFile,
         PackageParser.Package pkg, int parseFlags, int scanMode) {
@@ -1925,19 +1925,18 @@
                 }
             }
     
+            // Just create the setting, don't add it yet
             pkgSetting = mSettings.getPackageLP(pkg, suid, destCodeFile,
-                            destResourceFile, pkg.applicationInfo.flags, true);
+                            destResourceFile, pkg.applicationInfo.flags, true, false);
             if (pkgSetting == null) {
                 Log.w(TAG, "Creating application package " + pkgName + " failed");
                 mLastScanError = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
                 return null;
             }
-            synchronized(mPackages) {
-                if(mSettings.mDisabledSysPackages.get(pkg.packageName) != null) {
-                    pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
-                }
+            if(mSettings.mDisabledSysPackages.get(pkg.packageName) != null) {
+                pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
             }
-    
+        
             pkg.applicationInfo.uid = pkgSetting.userId;
             pkg.mExtras = pkgSetting;
     
@@ -1985,24 +1984,12 @@
         long scanFileTime = scanFile.lastModified();
         final boolean forceDex = (scanMode&SCAN_FORCE_DEX) != 0;
         final boolean scanFileNewer = forceDex || scanFileTime != pkgSetting.getTimeStamp();
-
-        // At this point we know it is okay to accept the package, though
-        // errors can still happen as we try to install...
-
-        if ((scanMode&SCAN_MONITOR) != 0) {
-            pkg.mPath = destCodeFile.getAbsolutePath();
-            mAppDirs.put(pkg.mPath, pkg);
-        }
         pkg.applicationInfo.processName = fixProcessName(
                 pkg.applicationInfo.packageName,
                 pkg.applicationInfo.processName,
                 pkg.applicationInfo.uid);
         pkg.applicationInfo.publicSourceDir = pkgSetting.resourcePathString;
 
-        synchronized (mPackages) {
-            mPackages.put(pkg.applicationInfo.packageName, pkg);
-        }
-
         File dataPath;
         if (mPlatformPackage == pkg) {
             // The system package is special.
@@ -2045,8 +2032,7 @@
                                     return null;
                                 }
                             }
-                            
-                        }
+                        } 
                         if (!recovered) {
                             mHasSystemUidErrors = true;
                         }
@@ -2078,7 +2064,7 @@
                     int ret = mInstaller.install(pkgName, pkg.applicationInfo.uid,
                             pkg.applicationInfo.uid);
                     if(ret < 0) {
-                        //error from installer
+                        // Error from installer
                         mLastScanError = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
                         return null;
                     }
@@ -2148,8 +2134,17 @@
             pkg.applicationInfo.flags |= ApplicationInfo.FLAG_FACTORY_TEST;
         }
 
+        if ((scanMode&SCAN_MONITOR) != 0) {
+            pkg.mPath = destCodeFile.getAbsolutePath();
+            mAppDirs.put(pkg.mPath, pkg);
+        }
+
         synchronized (mPackages) {
-            
+            // We don't expect installation to fail beyond this point
+            // Add the new setting to mSettings
+            mSettings.insertPackageSettingLP(pkgSetting, pkg.packageName, suid);
+            // Add the new setting to mPackages
+            mPackages.put(pkg.applicationInfo.packageName, pkg);          
             int N = pkg.providers.size();
             StringBuilder r = null;
             int i;
@@ -3197,7 +3192,7 @@
         private final String mRootDir;
         private final boolean mIsRom;
     }
-
+    
     /* Called when a downloaded package installation has been confirmed by the user */
     public void installPackage(
             final Uri packageURI, final IPackageInstallObserver observer, final int flags) {
@@ -3248,7 +3243,7 @@
     /*
      * Install a non-existing package.
      */
-    private void installNewPackageLI(String pkgName, int parseFlags,
+    private void installNewPackageLI(String pkgName,
             File tmpPackageFile, 
             String destFilePath, File destPackageFile, File destResourceFile,
             PackageParser.Package pkg, boolean forwardLocked,
@@ -3272,7 +3267,7 @@
         }
         mLastScanError = PackageManager.INSTALL_SUCCEEDED;
         PackageParser.Package newPackage = scanPackageLI(tmpPackageFile, destPackageFile,
-                destResourceFile, pkg, parseFlags,
+                destResourceFile, pkg, 0,
                 SCAN_MONITOR | SCAN_FORCE_DEX
                 | SCAN_UPDATE_SIGNATURE 
                 | (forwardLocked ? SCAN_FORWARD_LOCKED : 0));
@@ -3304,7 +3299,7 @@
         }
     }
     
-    private void replacePackageLI(String pkgName, int parseFlags,
+    private void replacePackageLI(String pkgName,
             File tmpPackageFile, 
             String destFilePath, File destPackageFile, File destResourceFile,
             PackageParser.Package pkg, boolean forwardLocked,
@@ -3321,16 +3316,15 @@
         boolean sysPkg = ((deletedPackage.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
         if(sysPkg) {
             replaceSystemPackageLI(deletedPackage, 
-                    parseFlags, 
                     tmpPackageFile, destFilePath, 
                     destPackageFile, destResourceFile, pkg, forwardLocked, res);
         } else {
-            replaceNonSystemPackageLI(deletedPackage, parseFlags, tmpPackageFile, destFilePath, 
+            replaceNonSystemPackageLI(deletedPackage, tmpPackageFile, destFilePath, 
                     destPackageFile, destResourceFile, pkg, forwardLocked, res);
         }
     }
     
-    private void replaceNonSystemPackageLI(PackageParser.Package deletedPackage, int parseFlags,
+    private void replaceNonSystemPackageLI(PackageParser.Package deletedPackage,
             File tmpPackageFile, 
             String destFilePath, File destPackageFile, File destResourceFile,
             PackageParser.Package pkg, boolean forwardLocked,
@@ -3339,6 +3333,7 @@
         String pkgName = deletedPackage.packageName;
         boolean deletedPkg = true;
         boolean updatedSettings = false;
+        int parseFlags = PackageManager.REPLACE_EXISTING_PACKAGE;
         // First delete the existing package while retaining the data directory
         if (!deletePackageLI(pkgName, false, PackageManager.DONT_DELETE_DATA,
                 res.removedInfo)) {
@@ -3414,14 +3409,15 @@
         }
     }
     
-    private void replaceSystemPackageLI(PackageParser.Package deletedPackage, int parseFlags,
+    private void replaceSystemPackageLI(PackageParser.Package deletedPackage,
             File tmpPackageFile, 
             String destFilePath, File destPackageFile, File destResourceFile,
             PackageParser.Package pkg, boolean forwardLocked,
             PackageInstalledInfo res) {
         PackageParser.Package newPackage = null;
         boolean updatedSettings = false;
-        parseFlags |= PackageParser.PARSE_IS_SYSTEM;
+        int parseFlags = PackageManager.REPLACE_EXISTING_PACKAGE |
+                PackageParser.PARSE_IS_SYSTEM;
         String packageName = deletedPackage.packageName;
         res.returnCode = PackageManager.INSTALL_FAILED_REPLACE_COULDNT_DELETE;
         if (packageName == null) {
@@ -3565,7 +3561,6 @@
         String pkgName = null;
         boolean forwardLocked = false;
         boolean replacingExistingPackage = false;
-        
         // Result object to be returned
         PackageInstalledInfo res = new PackageInstalledInfo();
         res.returnCode = PackageManager.INSTALL_SUCCEEDED;
@@ -3671,13 +3666,13 @@
             }
             
             if(replacingExistingPackage) {
-                replacePackageLI(pkgName, pFlags,
+                replacePackageLI(pkgName,
                         tmpPackageFile, 
                         destFilePath, destPackageFile, destResourceFile,
                         pkg, forwardLocked,
                         res);
             } else {
-                installNewPackageLI(pkgName, pFlags,
+                installNewPackageLI(pkgName,
                         tmpPackageFile, 
                         destFilePath, destPackageFile, destResourceFile,
                         pkg, forwardLocked,
@@ -4002,7 +3997,6 @@
         File sourceFile = new File(applicationInfo.sourceDir);
         if (!sourceFile.exists()) {
             Log.w(TAG, "Package source " + applicationInfo.sourceDir + " does not exist.");
-            return false;
         }
         outInfo.uid = applicationInfo.uid;
 
@@ -5318,10 +5312,10 @@
 
         PackageSetting getPackageLP(PackageParser.Package pkg,
                 SharedUserSetting sharedUser, File codePath, File resourcePath,
-                int pkgFlags, boolean create) {
+                int pkgFlags, boolean create, boolean add) {
             final String name = pkg.packageName;
             PackageSetting p = getPackageLP(name, sharedUser, codePath,
-                    resourcePath, pkgFlags, create);
+                    resourcePath, pkgFlags, create, add);
 
             if (p != null) {
                 p.pkg = pkg;
@@ -5452,7 +5446,7 @@
 
         private PackageSetting getPackageLP(String name,
                 SharedUserSetting sharedUser, File codePath, File resourcePath,
-                int pkgFlags, boolean create) {
+                int pkgFlags, boolean create, boolean add) {
             PackageSetting p = mPackages.get(name);
             if (p != null) {
                 if (!p.codePath.equals(codePath)) {
@@ -5497,15 +5491,25 @@
                 } else {
                     p.userId = FIRST_APPLICATION_UID;
                 }
-
                 if (p.userId < 0) {
                     reportSettingsProblem(Log.WARN,
                             "Package " + name + " could not be assigned a valid uid");
                     return null;
                 }
-                mPackages.put(name, p);
+                if (add) {
+                    // Finish adding new package by adding it and updating shared 
+                    // user preferences
+                    insertPackageSettingLP(p, name, sharedUser);
+                }
             }
-
+            return p;
+        }
+        
+        // Utility method that adds a PackageSetting to mPackages and
+        // completes updating the shared user attributes
+        private void insertPackageSettingLP(PackageSetting p, String name,
+                SharedUserSetting sharedUser) {
+            mPackages.put(name, p);
             if (sharedUser != null) {
                 if (p.sharedUser != null && p.sharedUser != sharedUser) {
                     reportSettingsProblem(Log.ERROR,
@@ -5515,17 +5519,16 @@
                     p.sharedUser.packages.remove(p);
                 } else if (p.userId != sharedUser.userId) {
                     reportSettingsProblem(Log.ERROR,
-                            "Package " + p.name + " was user id " + p.userId
-                            + " but is now user " + sharedUser
-                            + " with id " + sharedUser.userId
-                            + "; I am not changing its files so it will probably fail!");
+                        "Package " + p.name + " was user id " + p.userId
+                        + " but is now user " + sharedUser
+                        + " with id " + sharedUser.userId
+                        + "; I am not changing its files so it will probably fail!");
                 }
 
                 sharedUser.packages.add(p);
                 p.sharedUser = sharedUser;
                 p.userId = sharedUser.userId;
             }
-            return p;
         }
 
         private void updateSharedUserPerms (PackageSetting deletedPs) {
@@ -5980,7 +5983,7 @@
                 if (idObj != null && idObj instanceof SharedUserSetting) {
                     PackageSetting p = getPackageLP(pp.name,
                             (SharedUserSetting)idObj, pp.codePath, pp.resourcePath,
-                            pp.pkgFlags, true);
+                            pp.pkgFlags, true, true);
                     if (p == null) {
                         Log.w(TAG, "Unable to create application package for "
                                 + pp.name);
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index f41d21f..ad30ffc 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -973,11 +973,9 @@
                 if (mSpew) {
                     Log.d(TAG, "mBroadcastWakeLock=" + mBroadcastWakeLock);
                 }
-                if (mContext != null) {
-                    if (ActivityManagerNative.isSystemReady()) {
-                        mContext.sendOrderedBroadcast(mScreenOnIntent, null,
-                                mScreenOnBroadcastDone, mHandler, 0, null, null);
-                    }
+                if (mContext != null && ActivityManagerNative.isSystemReady()) {
+                    mContext.sendOrderedBroadcast(mScreenOnIntent, null,
+                            mScreenOnBroadcastDone, mHandler, 0, null, null);
                 } else {
                     synchronized (mLocks) {
                         EventLog.writeEvent(LOG_POWER_SCREEN_BROADCAST_STOP, 2,
@@ -996,7 +994,7 @@
                     // ignore it.
                 }
 
-                if (mContext != null) {
+                if (mContext != null && ActivityManagerNative.isSystemReady()) {
                     mContext.sendOrderedBroadcast(mScreenOffIntent, null,
                             mScreenOffBroadcastDone, mHandler, 0, null, null);
                 } else {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index fc25e38..77383bd 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -188,7 +188,6 @@
                 Log.i(TAG, "Starting Status Bar Service.");
                 statusBar = new StatusBarService(context);
                 ServiceManager.addService("statusbar", statusBar);
-                com.android.server.status.StatusBarPolicy.installIcons(context, statusBar);
             } catch (Throwable e) {
                 Log.e(TAG, "Failure starting StatusBarService", e);
             }
@@ -315,6 +314,12 @@
             } catch (Throwable e) {
                 Log.e(TAG, "Failure starting Gadget Service", e);
             }
+
+            try {
+                com.android.server.status.StatusBarPolicy.installIcons(context, statusBar);
+            } catch (Throwable e) {
+                Log.e(TAG, "Failure installing status bar icons", e);
+            }
         }
 
         // make sure the ADB_ENABLED setting value matches the secure property value
diff --git a/services/java/com/android/server/TelephonyRegistry.java b/services/java/com/android/server/TelephonyRegistry.java
index b5cf1aa..5e5fb93 100644
--- a/services/java/com/android/server/TelephonyRegistry.java
+++ b/services/java/com/android/server/TelephonyRegistry.java
@@ -33,12 +33,14 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 
+import com.android.internal.app.IBatteryStats;
 import com.android.internal.telephony.ITelephonyRegistry;
 import com.android.internal.telephony.IPhoneStateListener;
 import com.android.internal.telephony.DefaultPhoneNotifier;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneStateIntentReceiver;
 import com.android.internal.telephony.TelephonyIntents;
+import com.android.server.am.BatteryStatsService;
 
 
 /**
@@ -55,8 +57,9 @@
         int events;
     }
 
-    private Context mContext;
-    private ArrayList<Record> mRecords = new ArrayList();
+    private final Context mContext;
+    private final ArrayList<Record> mRecords = new ArrayList();
+    private final IBatteryStats mBatteryStats;
 
     private int mCallState = TelephonyManager.CALL_STATE_IDLE;
     private String mCallIncomingNumber = "";
@@ -81,6 +84,7 @@
     TelephonyRegistry(Context context) {
         CellLocation.getEmpty().fillInNotifierBundle(mCellLocation);
         mContext = context;
+        mBatteryStats = BatteryStatsService.getService();
     }
 
     public void listen(String pkgForDebug, IPhoneStateListener callback, int events,
@@ -414,6 +418,18 @@
     }
 
     private void broadcastCallStateChanged(int state, String incomingNumber) {
+        long ident = Binder.clearCallingIdentity();
+        try {
+            if (state == TelephonyManager.CALL_STATE_IDLE) {
+                mBatteryStats.notePhoneOff();
+            } else {
+                mBatteryStats.notePhoneOn();
+            }
+        } catch (RemoteException e) {
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+        
         Intent intent = new Intent(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
         intent.putExtra(Phone.STATE_KEY,
                 DefaultPhoneNotifier.convertCallState(state).toString());
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 10a2d29..a3ceb71 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -3954,6 +3954,10 @@
         synchronized(mWindowMap) {
             mKeyWaiter.bindTargetWindowLocked(focus);
         }
+
+        // NOSHIP extra state logging
+        mKeyWaiter.recordDispatchState(event, focus);
+        // END NOSHIP
         
         try {
             if (DEBUG_INPUT || DEBUG_FOCUS) {
@@ -4097,6 +4101,55 @@
      * but not the other way around.
      */
     final class KeyWaiter {
+        // NOSHIP debugging
+        public class DispatchState {
+            private KeyEvent event;
+            private WindowState focus;
+            private long time;
+            private WindowState lastWin;
+            private IBinder lastBinder;
+            private boolean finished;
+            private boolean gotFirstWindow;
+            private boolean eventDispatching;
+            private long timeToSwitch;
+            private boolean wasFrozen;
+            private boolean focusPaused;
+            
+            DispatchState(KeyEvent theEvent, WindowState theFocus) {
+                focus = theFocus;
+                event = theEvent;
+                time = System.currentTimeMillis();
+                // snapshot KeyWaiter state
+                lastWin = mLastWin;
+                lastBinder = mLastBinder;
+                finished = mFinished;
+                gotFirstWindow = mGotFirstWindow;
+                eventDispatching = mEventDispatching;
+                timeToSwitch = mTimeToSwitch;
+                wasFrozen = mWasFrozen;
+                // cache the paused state at ctor time as well
+                if (theFocus == null || theFocus.mToken == null) {
+                    Log.i(TAG, "focus " + theFocus + " mToken is null at event dispatch!");
+                    focusPaused = false;
+                } else {
+                    focusPaused = theFocus.mToken.paused;
+                }
+            }
+            
+            public String toString() {
+                return "{{" + event + " to " + focus + " @ " + time
+                        + " lw=" + lastWin + " lb=" + lastBinder
+                        + " fin=" + finished + " gfw=" + gotFirstWindow
+                        + " ed=" + eventDispatching + " tts=" + timeToSwitch
+                        + " wf=" + wasFrozen + " fp=" + focusPaused + "}}";
+            }
+        };
+        private DispatchState mDispatchState = null;
+        public void recordDispatchState(KeyEvent theEvent, WindowState theFocus) {
+            mDispatchState = new DispatchState(theEvent, theFocus);
+        }
+        // END NOSHIP
+
         public static final int RETURN_NOTHING = 0;
         public static final int RETURN_PENDING_POINTER = 1;
         public static final int RETURN_PENDING_TRACKBALL = 2;
@@ -4258,6 +4311,10 @@
                         Log.w(TAG, "Key dispatching timed out sending to " +
                               (targetWin != null ? targetWin.mAttrs.getTitle()
                               : "<null>"));
+                        // NOSHIP debugging
+                        Log.w(TAG, "Dispatch state: " + mDispatchState);
+                        Log.w(TAG, "Current state:  " + new DispatchState(nextKey, targetWin));
+                        // END NOSHIP
                         //dump();
                         if (targetWin != null) {
                             at = targetWin.getAppToken();
@@ -4640,7 +4697,7 @@
                 newWindow.mToken.paused = false;
 
                 mGotFirstWindow = true;
-                boolean doNotify = true;
+                boolean doNotify = false;
 
                 if ((newWindow.mAttrs.flags & FLAG_SYSTEM_ERROR) != 0) {
                     if (DEBUG_INPUT) Log.v(TAG,
@@ -4649,6 +4706,7 @@
                     mLastBinder = null;
                     mMotionTarget = null;
                     mFinished = true;
+                    doNotify = true;    // ensure that we reset the key waiters after hijacking
                 } else if (mLastWin != null) {
                     // If the new window is above the window we are
                     // waiting on, then stop waiting and let key dispatching
@@ -4657,15 +4715,15 @@
                         TAG, "Last win layer=" + mLastWin.mLayer
                         + ", new win layer=" + newWindow.mLayer);
                     if (newWindow.mLayer >= mLastWin.mLayer) {
-                        if (!mLastWin.canReceiveKeys()) {
-                            mLastWin.mToken.paused = false;
-                            doFinishedKeyLocked(true);  // does a notifyAll()
-                            doNotify = false;
-                        }
-                    } else {
-                        // the new window is lower; no need to wake key waiters
-                        doNotify = false;
+                        // The new window is above the old; finish pending input to the last
+                        // window and start directing it to the new one.
+                        mLastWin.mToken.paused = false;
+                        doFinishedKeyLocked(true);  // does a notifyAll()
                     }
+                    // Either the new window is lower, so there is no need to wake key waiters,
+                    // or we just finished key input to the previous window, which implicitly
+                    // notified the key waiters.  In both cases, we don't need to issue the
+                    // notification here, so we do not set doNotify.
                 }
 
                 if (doNotify) {
@@ -6405,7 +6463,7 @@
         public String toString() {
             return "Window{"
                 + Integer.toHexString(System.identityHashCode(this))
-                + " " + mAttrs.getTitle() + "}";
+                + " " + mAttrs.getTitle() + " paused=" + mToken.paused + "}";
         }
     }
     
@@ -8644,7 +8702,7 @@
                     + " mLastBinder=" + mKeyWaiter.mLastBinder);
             pw.println("    mFinished=" + mKeyWaiter.mFinished
                     + " mGotFirstWindow=" + mKeyWaiter.mGotFirstWindow
-                    + " mEventDispatching" + mKeyWaiter.mEventDispatching
+                    + " mEventDispatching=" + mKeyWaiter.mEventDispatching
                     + " mTimeToSwitch=" + mKeyWaiter.mTimeToSwitch);
         }
     }
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 6443d53..141569e 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -361,6 +361,13 @@
     HistoryRecord mFocusedActivity = null;
 
     /**
+     * This is the last activity that we put into the paused state.  This is
+     * used to determine if we need to do an activity transition while sleeping,
+     * when we normally hold the top activity paused.
+     */
+    HistoryRecord mLastPausedActivity = null;
+
+    /**
      * List of activities that are waiting for a new activity
      * to become visible before completing whatever operation they are
      * supposed to do.
@@ -1819,6 +1826,7 @@
         if (DEBUG_PAUSE) Log.v(TAG, "Start pausing: " + prev);
         mResumedActivity = null;
         mPausingActivity = prev;
+        mLastPausedActivity = prev;
         prev.state = ActivityState.PAUSING;
         prev.task.touchActiveTime();
 
@@ -1837,9 +1845,11 @@
                 // Ignore exception, if process died other code will cleanup.
                 Log.w(TAG, "Exception thrown during pause", e);
                 mPausingActivity = null;
+                mLastPausedActivity = null;
             }
         } else {
             mPausingActivity = null;
+            mLastPausedActivity = null;
         }
 
         // If we are not going to sleep, we want to ensure the device is
@@ -2002,7 +2012,7 @@
             // First: if this is not the current activity being started, make
             // sure it matches the current configuration.
             if (r != starting && doThisProcess) {
-                ensureActivityConfigurationLocked(r);
+                ensureActivityConfigurationLocked(r, 0);
             }
             
             if (r.app == null || r.app.thread == null) {
@@ -2192,6 +2202,15 @@
             return false;
         }
 
+        // If we are sleeping, and there is no resumed activity, and the top
+        // activity is paused, well that is the state we want.
+        if (mSleeping && mLastPausedActivity == next && next.state == ActivityState.PAUSED) {
+            // Make sure we have executed any pending transitions, since there
+            // should be nothing left to do at this point.
+            mWindowManager.executeAppTransition();
+            return false;
+        }
+        
         // The activity may be waiting for stop, but that is no longer
         // appropriate for it.
         mStoppingActivities.remove(next);
@@ -2311,6 +2330,7 @@
                     // Do over!
                     mHandler.sendEmptyMessage(RESUME_TOP_ACTIVITY_MSG);
                 }
+                mWindowManager.executeAppTransition();
                 return true;
             }
             
@@ -3839,6 +3859,9 @@
             if (DEBUG_PAUSE) Log.v(TAG, "App died while pausing: " + mPausingActivity);
             mPausingActivity = null;
         }
+        if (mLastPausedActivity != null && mLastPausedActivity.app == app) {
+            mLastPausedActivity = null;
+        }
 
         // Remove this application's activities from active lists.
         removeHistoryRecordsForAppLocked(mLRUActivities, app);
@@ -4432,7 +4455,7 @@
             Log.w(TAG, "Process " + app + " failed to attach");
             mProcessNames.remove(app.processName, app.info.uid);
             Process.killProcess(pid);
-            if (mPendingBroadcast.curApp.pid == pid) {
+            if (mPendingBroadcast != null && mPendingBroadcast.curApp.pid == pid) {
                 Log.w(TAG, "Unattached app died before broadcast acknowledged, skipping");
                 mPendingBroadcast = null;
                 scheduleBroadcastsLocked();
@@ -7836,6 +7859,7 @@
             pw.println("  mPausingActivity: " + mPausingActivity);
             pw.println("  mResumedActivity: " + mResumedActivity);
             pw.println("  mFocusedActivity: " + mFocusedActivity);
+            pw.println("  mLastPausedActivity: " + mLastPausedActivity);
 
             if (mRecentTasks.size() > 0) {
                 pw.println(" ");
@@ -10975,7 +10999,7 @@
         }
         
         if (starting != null) {
-            kept = ensureActivityConfigurationLocked(starting);
+            kept = ensureActivityConfigurationLocked(starting, changes);
             if (kept) {
                 // If this didn't result in the starting activity being
                 // destroyed, then we need to make sure at this point that all
@@ -11032,7 +11056,8 @@
      * for whatever reason.  Ensures the HistoryRecord is updated with the
      * correct configuration and all other bookkeeping is handled.
      */
-    private final boolean ensureActivityConfigurationLocked(HistoryRecord r) {
+    private final boolean ensureActivityConfigurationLocked(HistoryRecord r,
+            int globalChanges) {
         if (DEBUG_SWITCH) Log.i(TAG, "Ensuring correct configuration: " + r);
         
         // Short circuit: if the two configurations are the exact same
@@ -11079,7 +11104,7 @@
             if ((changes&(~r.info.configChanges)) != 0) {
                 // Aha, the activity isn't handling the change, so DIE DIE DIE.
                 r.configChangeFlags |= changes;
-                r.startFreezingScreenLocked(r.app, changes);
+                r.startFreezingScreenLocked(r.app, globalChanges);
                 if (r.app == null || r.app.thread == null) {
                     if (DEBUG_SWITCH) Log.i(TAG, "Switch is destroying non-running " + r);
                     destroyActivityLocked(r, true);
diff --git a/services/java/com/android/server/am/BaseErrorDialog.java b/services/java/com/android/server/am/BaseErrorDialog.java
index 4f62f62..bed2768 100644
--- a/services/java/com/android/server/am/BaseErrorDialog.java
+++ b/services/java/com/android/server/am/BaseErrorDialog.java
@@ -31,6 +31,8 @@
         super(context, com.android.internal.R.style.Theme_Dialog_AppError);
 
         getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+        getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
+                WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
         getWindow().setTitle("Error Dialog");
         setIcon(R.drawable.ic_dialog_alert);
     }
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index 9ba1198..27d0401 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -70,15 +70,13 @@
     public byte[] getStatistics() {
         mContext.enforceCallingPermission(
                 android.Manifest.permission.BATTERY_STATS, null);
-        synchronized (mStats) {
-            //Log.i("foo", "SENDING BATTERY INFO:");
-            //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo"));
-            Parcel out = Parcel.obtain();
-            mStats.writeToParcel(out, 0);
-            byte[] data = out.marshall();
-            out.recycle();
-            return data;
-        }
+        //Log.i("foo", "SENDING BATTERY INFO:");
+        //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo"));
+        Parcel out = Parcel.obtain();
+        mStats.writeToParcel(out, 0);
+        byte[] data = out.marshall();
+        out.recycle();
+        return data;
     }
     
     public void noteStartWakelock(int uid, String name, int type) {
@@ -137,6 +135,20 @@
         }
     }
 
+    public void notePhoneOn() {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.notePhoneOnLocked();
+        }
+    }
+    
+    public void notePhoneOff() {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.notePhoneOffLocked();
+        }
+    }
+
     public boolean isOnBattery() {
         return mStats.isOnBattery();
     }
diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java
index 3a5b13c..f4ff5df 100644
--- a/services/java/com/android/server/status/StatusBarPolicy.java
+++ b/services/java/com/android/server/status/StatusBarPolicy.java
@@ -234,7 +234,7 @@
             }
             else if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) ||
                     action.equals(AudioManager.VIBRATE_SETTING_CHANGED_ACTION)) {
-                updateVolume(intent);
+                updateVolume();
             }
             else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) {
                 updateSimState(intent);
@@ -326,6 +326,7 @@
                 null, com.android.internal.R.drawable.stat_sys_ringer_silent, 0, 0);
         mVolumeIcon = service.addIcon(mVolumeData, null);
         service.setIconVisibility(mVolumeIcon, false);
+        updateVolume();
         
         IntentFilter filter = new IntentFilter();
 
@@ -755,9 +756,7 @@
         }
     }
 
-    private final void updateVolume(Intent intent) {
-        // This can be called from two different received intents, so don't use extras.
-        
+    private final void updateVolume() {
         AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
         final int ringerMode = audioManager.getRingerMode();
         final boolean visible = ringerMode == AudioManager.RINGER_MODE_SILENT ||
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java
index 4748389..5442e1d 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarService.java
@@ -176,11 +176,11 @@
     WindowManager.LayoutParams mExpandedParams;
     ScrollView mScrollView;
     View mNotificationLinearLayout;
-    View mOngoingTitle;
+    TextView mOngoingTitle;
     LinearLayout mOngoingItems;
-    View mLatestTitle;
+    TextView mLatestTitle;
     LinearLayout mLatestItems;
-    View mNoNotificationsTitle;
+    TextView mNoNotificationsTitle;
     TextView mSpnLabel;
     TextView mPlmnLabel;
     TextView mClearButton;
@@ -270,11 +270,11 @@
 
         mExpandedDialog = new ExpandedDialog(context);
         mExpandedView = expanded;
-        mOngoingTitle = expanded.findViewById(R.id.ongoingTitle);
+        mOngoingTitle = (TextView)expanded.findViewById(R.id.ongoingTitle);
         mOngoingItems = (LinearLayout)expanded.findViewById(R.id.ongoingItems);
-        mLatestTitle = expanded.findViewById(R.id.latestTitle);
+        mLatestTitle = (TextView)expanded.findViewById(R.id.latestTitle);
         mLatestItems = (LinearLayout)expanded.findViewById(R.id.latestItems);
-        mNoNotificationsTitle = expanded.findViewById(R.id.noNotificationsTitle);
+        mNoNotificationsTitle = (TextView)expanded.findViewById(R.id.noNotificationsTitle);
         mClearButton = (TextView)expanded.findViewById(R.id.clear_all_button);
         mClearButton.setOnClickListener(mClearButtonListener);
         mSpnLabel = (TextView)expanded.findViewById(R.id.spnLabel);
@@ -1705,6 +1705,9 @@
      */
     void updateResources() {
         mClearButton.setText(mContext.getText(R.string.status_bar_clear_all_button));
+        mOngoingTitle.setText(mContext.getText(R.string.status_bar_ongoing_events_title));
+        mLatestTitle.setText(mContext.getText(R.string.status_bar_latest_events_title));
+        mNoNotificationsTitle.setText(mContext.getText(R.string.status_bar_no_notifications_title));
         Log.d(TAG, "updateResources");
     }
 
diff --git a/telephony/java/android/telephony/gsm/SmsMessage.java b/telephony/java/android/telephony/gsm/SmsMessage.java
index f79b0a0..c2e0165 100644
--- a/telephony/java/android/telephony/gsm/SmsMessage.java
+++ b/telephony/java/android/telephony/gsm/SmsMessage.java
@@ -467,7 +467,7 @@
      *         units remaining until the next message. int[3] is the encoding
      *         type that should be used for the message.
      */
-    public static int[] calculateLength(String messageBody, boolean use7bitOnly) {
+    public static int[] calculateLength(CharSequence messageBody, boolean use7bitOnly) {
         int ret[] = new int[4];
 
         try {
@@ -502,6 +502,25 @@
         return ret;
     }
 
+    /**
+     * Calculates the number of SMS's required to encode the message body and
+     * the number of characters remaining until the next message, given the
+     * current encoding.
+     *
+     * @param messageBody the message to encode
+     * @param use7bitOnly if true, characters that are not part of the GSM
+     *         alphabet are counted as a single space char.  If false, a
+     *         messageBody containing non-GSM alphabet characters is calculated
+     *         for 16-bit encoding.
+     * @return an int[4] with int[0] being the number of SMS's required, int[1]
+     *         the number of code units used, and int[2] is the number of code
+     *         units remaining until the next message. int[3] is the encoding
+     *         type that should be used for the message.
+     */
+    public static int[] calculateLength(String messageBody, boolean use7bitOnly) {
+        return calculateLength((CharSequence)messageBody, use7bitOnly);
+    }
+    
 
     /**
      * Get an SMS-SUBMIT PDU for a destination address and a message
@@ -541,7 +560,12 @@
 
             // TP-Data-Coding-Scheme
             // Default encoding, uncompressed
-            bo.write(0x00);
+            // To test writing messages to the SIM card, change this value 0x00 to 0x12, which
+            // means "bits 1 and 0 contain message class, and the class is 2". Note that this
+            // takes effect for the sender. In other words, messages sent by the phone with this
+            // change will end up on the receiver's SIM card. You can then send messages to
+            // yourself (on a phone with this change) and they'll end up on the SIM card.
+            bo.write(0x00); 
 
             // (no TP-Validity-Period)
 
diff --git a/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java
index 1c64641..4769cd1 100644
--- a/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java
@@ -884,6 +884,9 @@
 
         isConnected = (state != State.IDLE && state != State.FAILED);
 
+        // The "current" may no longer be valid.  MMS depends on this to send properly.
+        phone.updateCurrentCarrierInProvider();
+
         // TODO: It'd be nice to only do this if the changed entrie(s)
         // match the current operator.
         createAllApnList();
diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
index 4ad65fc..f93c724 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -1383,18 +1383,8 @@
                     break;
 
                 case EVENT_SIM_RECORDS_LOADED:
-                    mSIMRecords.getSIMOperatorNumeric();
-
-                    try {
-                        //set the current field the telephony provider according to
-                        //the SIM's operator
-                        Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
-                        ContentValues map = new ContentValues();
-                        map.put(Telephony.Carriers.NUMERIC, mSIMRecords.getSIMOperatorNumeric());
-                        mContext.getContentResolver().insert(uri, map);
-                    } catch (SQLException e) {
-                        Log.e(LOG_TAG, "Can't store current operator", e);
-                    }
+                    updateCurrentCarrierInProvider();
+                    
                     // Check if this is a different SIM than the previous one. If so unset the
                     // voice mail number.
                     String imsi = getVmSimImsi();
@@ -1535,7 +1525,27 @@
             }
         }
     }
-    
+
+    /**
+     * Sets the "current" field in the telephony provider according to the SIM's operator
+     * 
+     * @return true for success; false otherwise.
+     */
+    boolean updateCurrentCarrierInProvider() {
+        if (mSIMRecords != null) {
+            try {
+                Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
+                ContentValues map = new ContentValues();
+                map.put(Telephony.Carriers.NUMERIC, mSIMRecords.getSIMOperatorNumeric());
+                mContext.getContentResolver().insert(uri, map);
+                return true;
+            } catch (SQLException e) {
+                Log.e(LOG_TAG, "Can't store current operator", e);
+            }
+        }
+        return false;
+    }
+
     /**
      * Used to track the settings upon completion of the network change.
      */
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java b/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java
index 59a9422..df34897 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java
@@ -532,7 +532,7 @@
      * needed to represent this string. Counts unencodable char as 1 septet.
      */
     public static int
-    countGsmSeptets(String s)
+    countGsmSeptets(CharSequence s)
     {
         try {
             return countGsmSeptets(s, false);
@@ -549,7 +549,7 @@
      * char. Otherwise, counts invalid char as 1 septet
      */
     public static int
-    countGsmSeptets(String s, boolean throwsException) throws EncodeException
+    countGsmSeptets(CharSequence s, boolean throwsException) throws EncodeException
     {
         int charIndex = 0;
         int sz = s.length();
diff --git a/test-runner/android/test/mock/MockContentProvider.java b/test-runner/android/test/mock/MockContentProvider.java
index 9c00ecf..d04fc44 100644
--- a/test-runner/android/test/mock/MockContentProvider.java
+++ b/test-runner/android/test/mock/MockContentProvider.java
@@ -19,6 +19,7 @@
 import android.content.ContentValues;
 import android.content.IContentProvider;
 import android.content.ISyncAdapter;
+import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
 import android.database.CursorWindow;
 import android.database.IBulkCursor;
@@ -82,6 +83,12 @@
     }
 
     @SuppressWarnings("unused")
+    public AssetFileDescriptor openAssetFile(Uri uri, String mode)
+            throws FileNotFoundException {
+        throw new UnsupportedOperationException("unimplemented mock method");
+    }
+    
+    @SuppressWarnings("unused")
     public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
             String sortOrder) throws RemoteException {
         throw new UnsupportedOperationException("unimplemented mock method");
diff --git a/test-runner/android/test/mock/MockPackageManager.java b/test-runner/android/test/mock/MockPackageManager.java
index 57e7e41..ea190e2 100644
--- a/test-runner/android/test/mock/MockPackageManager.java
+++ b/test-runner/android/test/mock/MockPackageManager.java
@@ -34,6 +34,7 @@
 import android.content.pm.ProviderInfo;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
 import android.graphics.drawable.Drawable;
@@ -56,6 +57,12 @@
     }
 
     @Override
+    public Intent getLaunchIntentForPackage(String packageName)
+            throws NameNotFoundException {
+        throw new UnsupportedOperationException();
+    }
+    
+    @Override
     public int[] getPackageGids(String packageName) throws NameNotFoundException {
         throw new UnsupportedOperationException();
     }
diff --git a/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java b/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java
index f9af436..3daa8ab 100755
--- a/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java
+++ b/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java
@@ -121,6 +121,7 @@
     }
     @LargeTest
     public void testFreeApplicationCacheAllFiles() throws Exception {
+        boolean TRACKING = true;
         StatFs st = new StatFs("/data");
         long blks1 = getFreeStorageBlks(st);
         long availableMem = getFreeStorageSize(st);
@@ -128,11 +129,11 @@
         assertNotNull(cacheDir);
         createTestFiles1(cacheDir, "testtmpdir", 5);
         long blks2 = getFreeStorageBlks(st);
-        if(localLOGV) Log.i(TAG, "blk1="+blks1+", blks2="+blks2);
+        if(localLOGV || TRACKING) Log.i(TAG, "blk1="+blks1+", blks2="+blks2);
         //this should free up the test files that were created earlier
         invokePMFreeApplicationCache(availableMem);
         long blks3 = getFreeStorageBlks(st);
-        if(localLOGV) Log.i(TAG, "blks3="+blks3);
+        if(localLOGV || TRACKING) Log.i(TAG, "blks3="+blks3);
         verifyTestFiles1(cacheDir, "testtmpdir", 5);
     }
     
@@ -629,15 +630,16 @@
     
     @SmallTest
     public void testFreeStorage() throws Exception {
+        boolean TRACKING = true;
         StatFs st = new StatFs("/data");
         long blks1 = getFreeStorageBlks(st);
-        if(localLOGV) Log.i(TAG, "Available free blocks="+blks1);
+        if(localLOGV || TRACKING) Log.i(TAG, "Available free blocks="+blks1);
         long availableMem = getFreeStorageSize(st);
         File cacheDir = mContext.getCacheDir();
         assertNotNull(cacheDir);
         createTestFiles1(cacheDir, "testtmpdir", 5);
         long blks2 = getFreeStorageBlks(st);
-        if(localLOGV) Log.i(TAG, "Available blocks after writing test files in application cache="+blks2);
+        if(localLOGV || TRACKING) Log.i(TAG, "Available blocks after writing test files in application cache="+blks2);
         // Create receiver and register it
         FreeStorageReceiver receiver = new FreeStorageReceiver();
         mContext.registerReceiver(receiver, new IntentFilter(FreeStorageReceiver.ACTION_FREE));
@@ -646,7 +648,7 @@
         // Invoke PackageManager api
         invokePMFreeStorage(availableMem, receiver, pi);
         long blks3 = getFreeStorageBlks(st);
-        if(localLOGV) Log.i(TAG, "Available blocks after freeing cache"+blks3);
+        if(localLOGV || TRACKING) Log.i(TAG, "Available blocks after freeing cache"+blks3);
         assertEquals(receiver.getResultCode(), 1);
         mContext.unregisterReceiver(receiver);
         // Verify result  
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DbSSLSessionCacheTest.java b/tests/AndroidTests/src/com/android/unit_tests/DbSSLSessionCacheTest.java
new file mode 100644
index 0000000..77460be
--- /dev/null
+++ b/tests/AndroidTests/src/com/android/unit_tests/DbSSLSessionCacheTest.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.unit_tests;
+
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.provider.Settings;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.Suppress;
+
+import com.google.android.net.GoogleHttpClient;
+
+import com.android.internal.net.DbSSLSessionCache;
+import com.android.internal.net.SSLSessionCache;
+import com.android.internal.net.DbSSLSessionCache.DatabaseHelper;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+
+import java.io.IOException;
+import java.security.Principal;
+import java.security.cert.Certificate;
+
+import javax.net.ssl.SSLPeerUnverifiedException;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSessionContext;
+import javax.security.cert.X509Certificate;
+
+/** Unit test for SSL session caching with {@link GoogleHttpClient}.
+ *  Uses network resources. 
+ */
+@Suppress
+public class DbSSLSessionCacheTest extends AndroidTestCase {
+    
+    protected void setUp() throws Exception {
+    }
+
+    protected void tearDown() throws Exception {
+    }
+    
+    @LargeTest
+    public void testSslCacheSettings() throws Exception {
+        ContentResolver resolver = getContext().getContentResolver();
+        Settings.Gservices.putString(resolver, Settings.Gservices.SSL_SESSION_CACHE, 
+                "0");
+        assertFalse(SSLSessionCache.isEnabled(getContext().getContentResolver()));
+        
+        resolver = getContext().getContentResolver();
+        Settings.Gservices.putString(resolver, Settings.Gservices.SSL_SESSION_CACHE, 
+                "db");
+        assertTrue(SSLSessionCache.isEnabled(getContext().getContentResolver()));
+    }
+
+    /** 
+     * We want to test the actual database write - the actual hooking into 
+     * low-level SSL is tested. 
+     */
+    @LargeTest
+    public void testSslCacheAdd() throws Exception {
+        // Let's verify the database has the rows.
+        // Use internal details of the implementation - could make the field
+        // visible for testing, but it's same.
+        
+        // Use default database
+        DbSSLSessionCache cache = new DbSSLSessionCache(getContext());
+        cache.clear();
+        
+        
+        makeRequestInNewContext("https://www.google.com");
+
+        // Verify the key was inserted
+        SQLiteOpenHelper helper = new DatabaseHelper(getContext());
+        Cursor query = null;
+        try {
+            query = helper.getReadableDatabase().query(DbSSLSessionCache.SSL_CACHE_TABLE, 
+                    new String[] {"hostport"}, null, 
+                    null, null, null, null);
+
+            assertTrue(query.moveToFirst()); // one row inserted
+            String hostPort = query.getString(0);
+            assertEquals(hostPort, "www.google.com:443");
+        } finally {
+            query.close();
+        }
+    }
+    
+    @LargeTest
+    public void testExpire() throws Exception {
+        DatabaseHelper helper = new DatabaseHelper(getContext());
+        // clean up
+        DbSSLSessionCache cache = new DbSSLSessionCache(helper);
+        cache.clear();
+        
+        long t0 = System.currentTimeMillis();
+        for (int i = 0; i < DbSSLSessionCache.MAX_CACHE_SIZE + 2; i++) {
+            final int port = i;
+            cache.putSessionData(new MockSession() {
+                
+                public String getPeerHost() {
+                    return "test.host.com";
+                }
+                
+                public int getPeerPort() {
+                    return port;
+                }
+            }, new byte[256]);
+        }
+        long t1 = System.currentTimeMillis();
+
+        System.err.println("Time to insert " + 
+                (DbSSLSessionCache.MAX_CACHE_SIZE + 2) + " " + (t1 - t0));
+        
+        // first entry should have port 1.
+        Cursor query = helper.getReadableDatabase().query(DbSSLSessionCache.SSL_CACHE_TABLE, 
+                new String[] {"hostport", "session"}, null, 
+                null, null, null, null);
+
+        int cnt = query.getCount();
+        
+        assertTrue(query.moveToFirst()); // one row inserted
+        String hostPort = query.getString(0);
+        assertEquals("test.host.com:2", hostPort);
+        while (query.moveToNext()) {
+            hostPort = query.getString(0);
+            String session = query.getString(1);
+        }
+        long t2 = System.currentTimeMillis();
+        System.err.println("Time to load " + cnt + " " + (t2 - t1));
+        
+        query.close();
+    }
+    
+    private void makeRequestInNewContext(String url) throws IOException {
+        GoogleHttpClient client = new GoogleHttpClient(getContext(), "Test",
+                false /* no gzip */);
+
+        try {
+            // Note: we must test against a real server, because the connection
+            // gets established before the interceptor can crash the request.
+            HttpGet method = new HttpGet(url);
+            HttpResponse response = client.execute(method);
+        } finally {
+            client.close();
+        }
+    }
+    
+    private static class MockSession implements SSLSession {
+        
+        public String getPeerHost() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public int getPeerPort() {
+            throw new UnsupportedOperationException();
+        }
+
+
+        
+        public int getApplicationBufferSize() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public String getCipherSuite() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public long getCreationTime() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public byte[] getId() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public long getLastAccessedTime() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public Certificate[] getLocalCertificates() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public Principal getLocalPrincipal() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public int getPacketBufferSize() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public X509Certificate[] getPeerCertificateChain()
+                throws SSLPeerUnverifiedException {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public Principal getPeerPrincipal() throws SSLPeerUnverifiedException {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public String getProtocol() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public SSLSessionContext getSessionContext() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public Object getValue(String name) {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public String[] getValueNames() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public void invalidate() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public boolean isValid() {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public void putValue(String name, Object value) {
+            throw new UnsupportedOperationException();
+        }
+
+        
+        public void removeValue(String name) {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    
+}
diff --git a/tests/CoreTests/android/core/DatabaseSessionCache.java b/tests/CoreTests/android/core/DatabaseSessionCache.java
new file mode 100644
index 0000000..c344d9c
--- /dev/null
+++ b/tests/CoreTests/android/core/DatabaseSessionCache.java
@@ -0,0 +1,312 @@
+// Copyright 2009 The Android Open Source Project
+
+package android.core;
+
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+import android.content.ContentValues;
+import android.content.Context;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.net.ssl.SSLSession;
+
+/**
+ * Hook into harmony SSL cache to persist the SSL sessions.
+ *
+ * Current implementation is suitable for saving a small number of hosts -
+ * like google services. It can be extended with expiration and more features
+ * to support more hosts.
+ *
+ * {@hide}
+ */
+public class DatabaseSessionCache implements SSLClientSessionCache {
+    private static final String TAG = "SslSessionCache";
+    static DatabaseHelper sDefaultDatabaseHelper;
+
+    private DatabaseHelper mDatabaseHelper;
+
+    /**
+     * Table where sessions are stored.
+     */
+    public static final String SSL_CACHE_TABLE = "ssl_sessions";
+
+    private static final String SSL_CACHE_ID = "_id";
+
+    /**
+     * Key is host:port - port is not optional.
+     */
+    private static final String SSL_CACHE_HOSTPORT = "hostport";
+
+    /**
+     * Base64-encoded DER value of the session.
+     */
+    private static final String SSL_CACHE_SESSION = "session";
+
+    /**
+     * Time when the record was added - should be close to the time
+     * of the initial session negotiation.
+     */
+    private static final String SSL_CACHE_TIME_SEC = "time_sec";
+
+    public static final String DATABASE_NAME = "ssl_sessions.db";
+
+    public static final int DATABASE_VERSION = 1;
+
+    /** public for testing
+     */
+    public static final int SSL_CACHE_ID_COL = 0;
+    public static final int SSL_CACHE_HOSTPORT_COL = 1;
+    public static final int SSL_CACHE_SESSION_COL = 2;
+    public static final int SSL_CACHE_TIME_SEC_COL = 3;
+
+    private static final String SAVE_ON_ADD = "save_on_add";
+
+    static boolean sHookInitializationDone = false;
+
+    public static final int MAX_CACHE_SIZE = 256;
+
+    private static final Map<String, byte[]> mExternalCache =
+        new LinkedHashMap<String, byte[]>(MAX_CACHE_SIZE, 0.75f, true) {
+        @Override
+        public boolean removeEldestEntry(
+                Map.Entry<String, byte[]> eldest) {
+            boolean shouldDelete = this.size() > MAX_CACHE_SIZE;
+
+            // TODO: delete from DB
+            return shouldDelete;
+        }
+    };
+    static boolean mNeedsCacheLoad = true;
+
+    public static final String[] PROJECTION = new String[] {
+      SSL_CACHE_ID,
+      SSL_CACHE_HOSTPORT,
+      SSL_CACHE_SESSION,
+      SSL_CACHE_TIME_SEC
+    };
+
+    /**
+     * This class needs to be installed as a hook, if the security property
+     * is set. Getting the right classloader may be fun since we don't use
+     * Provider to get its classloader, but in android this is in same
+     * loader with AndroidHttpClient.
+     *
+     * This constructor will use the default database. You must
+     * call init() before to specify the context used for the database and
+     * check settings.
+     */
+    public DatabaseSessionCache() {
+        Log.v(TAG, "Instance created.");
+        // May be null if caching is disabled - no sessions will be persisted.
+        this.mDatabaseHelper = sDefaultDatabaseHelper;
+    }
+
+    /**
+     * Create a SslSessionCache instance, using the specified context to
+     * initialize the database.
+     *
+     * This constructor will use the default database - created the first
+     * time.
+     *
+     * @param activityContext
+     */
+    public DatabaseSessionCache(Context activityContext) {
+        // Static init - only one initialization will happen.
+        // Each SslSessionCache is using the same DB.
+        init(activityContext);
+        // May be null if caching is disabled - no sessions will be persisted.
+        this.mDatabaseHelper = sDefaultDatabaseHelper;
+    }
+
+    /**
+     * Create a SslSessionCache that uses a specific database.
+     *
+     * @param database
+     */
+    public DatabaseSessionCache(DatabaseHelper database) {
+        this.mDatabaseHelper = database;
+    }
+
+//    public static boolean enabled(Context androidContext) {
+//        String sslCache = Settings.Gservices.getString(androidContext.getContentResolver(),
+//                Settings.Gservices.SSL_SESSION_CACHE);
+//
+//        if (Log.isLoggable(TAG, Log.DEBUG)) {
+//            Log.d(TAG, "enabled " + sslCache + " " + androidContext.getPackageName());
+//        }
+//
+//        return SAVE_ON_ADD.equals(sslCache);
+//    }
+
+    /**
+     * You must call this method to enable SSL session caching for an app.
+     */
+    public synchronized static void init(Context activityContext) {
+        // It is possible that multiple provider will try to install this hook.
+        // We want a single db per VM.
+        if (sHookInitializationDone) {
+            return;
+        }
+
+
+//        // More values can be added in future to provide different
+//        // behaviours, like 'batch save'.
+//        if (enabled(activityContext)) {
+            Context appContext = activityContext.getApplicationContext();
+            sDefaultDatabaseHelper = new DatabaseHelper(appContext);
+
+            // Set default SSLSocketFactory
+            // The property is defined in the javadocs for javax.net.SSLSocketFactory
+            // (no constant defined there)
+            // This should cover all code using SSLSocketFactory.getDefault(),
+            // including native http client and apache httpclient.
+            // MCS is using its own custom factory - will need special code.
+//            Security.setProperty("ssl.SocketFactory.provider",
+//                    SslSocketFactoryWithCache.class.getName());
+//        }
+
+        // Won't try again.
+        sHookInitializationDone = true;
+    }
+
+    public void putSessionData(SSLSession session, byte[] der) {
+        if (mDatabaseHelper == null) {
+            return;
+        }
+        if (mExternalCache.size() > MAX_CACHE_SIZE) {
+            // remove oldest.
+            Cursor byTime = mDatabaseHelper.getWritableDatabase().query(SSL_CACHE_TABLE,
+                    PROJECTION, null, null, null, null, SSL_CACHE_TIME_SEC);
+            byTime.moveToFirst();
+            // TODO: can I do byTime.deleteRow() ?
+            String hostPort = byTime.getString(SSL_CACHE_HOSTPORT_COL);
+
+            mDatabaseHelper.getWritableDatabase().delete(SSL_CACHE_TABLE,
+                    SSL_CACHE_HOSTPORT + "= ?" , new String[] { hostPort });
+        }
+        // Serialize native session to standard DER encoding
+        long t0 = System.currentTimeMillis();
+
+        String b64 = new String(Base64.encodeBase64(der));
+        String key = session.getPeerHost() + ":" + session.getPeerPort();
+
+        ContentValues values = new ContentValues();
+        values.put(SSL_CACHE_HOSTPORT, key);
+        values.put(SSL_CACHE_SESSION, b64);
+        values.put(SSL_CACHE_TIME_SEC, System.currentTimeMillis() / 1000);
+
+        synchronized (this.getClass()) {
+            mExternalCache.put(key, der);
+
+            try {
+                mDatabaseHelper.getWritableDatabase().insert(SSL_CACHE_TABLE, null /*nullColumnHack */ , values);
+            } catch(SQLException ex) {
+                // Ignore - nothing we can do to recover, and caller shouldn't
+                // be affected.
+                Log.w(TAG, "Ignoring SQL exception when caching session", ex);
+            }
+        }
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            long t1 = System.currentTimeMillis();
+            Log.d(TAG, "New SSL session " + session.getPeerHost() +
+                    " DER len: " + der.length + " " + (t1 - t0));
+        }
+
+    }
+
+    public byte[] getSessionData(String host, int port) {
+        // Current (simple) implementation does a single lookup to DB, then saves
+        // all entries to the cache.
+
+        // This works for google services - i.e. small number of certs.
+        // If we extend this to all processes - we should hold a separate cache
+        // or do lookups to DB each time.
+        if (mDatabaseHelper == null) {
+            return null;
+        }
+        synchronized(this.getClass()) {
+            if (mNeedsCacheLoad) {
+                // Don't try to load again, if something is wrong on the first
+                // request it'll likely be wrong each time.
+                mNeedsCacheLoad = false;
+                long t0 = System.currentTimeMillis();
+
+                Cursor cur = null;
+                try {
+                    cur = mDatabaseHelper.getReadableDatabase().query(SSL_CACHE_TABLE, PROJECTION, null,
+                            null, null, null, null);
+                    if (cur.moveToFirst()) {
+                        do {
+                            String hostPort = cur.getString(SSL_CACHE_HOSTPORT_COL);
+                            String value = cur.getString(SSL_CACHE_SESSION_COL);
+
+                            if (hostPort == null || value == null) {
+                                continue;
+                            }
+                            // TODO: blob support ?
+                            byte[] der = Base64.decodeBase64(value.getBytes());
+                            mExternalCache.put(hostPort, der);
+                        } while (cur.moveToNext());
+
+                    }
+                } catch (SQLException ex) {
+                    Log.d(TAG, "Error loading SSL cached entries ", ex);
+                } finally {
+                    if (cur != null) {
+                        cur.close();
+                    }
+                    if (Log.isLoggable(TAG, Log.DEBUG)) {
+                        long t1 = System.currentTimeMillis();
+                        Log.d(TAG, "LOADED CACHED SSL " + (t1 - t0) + " ms");
+                    }
+                }
+            }
+
+            String key = host + ":" + port;
+
+            return mExternalCache.get(key);
+        }
+    }
+
+    public byte[] getSessionData(byte[] id) {
+        // We support client side only - the cache will do nothing on client.
+        return null;
+    }
+
+    /** Visible for testing.
+     */
+    public static class DatabaseHelper extends SQLiteOpenHelper {
+
+        public DatabaseHelper(Context context) {
+            super(context, DATABASE_NAME, null /* factory */, DATABASE_VERSION);
+        }
+
+        @Override
+        public void onCreate(SQLiteDatabase db) {
+            db.execSQL("CREATE TABLE " + SSL_CACHE_TABLE + " (" +
+                    SSL_CACHE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
+                    SSL_CACHE_HOSTPORT + " TEXT UNIQUE ON CONFLICT REPLACE," +
+                    SSL_CACHE_SESSION + " TEXT," +
+                    SSL_CACHE_TIME_SEC + " INTEGER" +
+            ");");
+            db.execSQL("CREATE INDEX ssl_sessions_idx1 ON ssl_sessions (" +
+                    SSL_CACHE_HOSTPORT + ");");
+        }
+
+        @Override
+        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+            db.execSQL("DROP TABLE IF EXISTS " + SSL_CACHE_TABLE );
+            onCreate(db);
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/tests/CoreTests/android/core/SSLPerformanceTest.java b/tests/CoreTests/android/core/SSLPerformanceTest.java
new file mode 100644
index 0000000..e2bd9c5
--- /dev/null
+++ b/tests/CoreTests/android/core/SSLPerformanceTest.java
@@ -0,0 +1,432 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.core;
+
+import android.test.AndroidTestCase;
+import android.os.Debug;
+import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache;
+import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
+import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.impl.conn.SingleClientConnManager;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.ResponseHandler;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.HttpResponse;
+
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSessionContext;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+import java.security.cert.Certificate;
+import java.security.Principal;
+import java.security.KeyManagementException;
+import java.util.Arrays;
+
+public class SSLPerformanceTest extends AndroidTestCase {
+
+    static final byte[] SESSION_DATA = new byte[6000];
+    static {
+        for (int i = 0; i < SESSION_DATA.length; i++) {
+            SESSION_DATA[i] = (byte) i;
+        }
+    }
+
+    static final File dataDir = new File("/data/data/android.core/");
+    static final File filesDir = new File(dataDir, "files");
+    static final File dbDir = new File(dataDir, "databases");
+
+    static final String CACHE_DIR
+            = SSLPerformanceTest.class.getName() + "/cache";
+
+    static final int ITERATIONS = 10;
+
+    public void testCreateNewEmptyDatabase() {
+        deleteDatabase();
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
+        cache.getSessionData("crazybob.org", 443);
+
+        stopwatch.stop();
+    }
+
+    public void testCreateNewEmptyDirectory() throws IOException {
+        deleteDirectory();
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
+                getCacheDirectory());
+        cache.getSessionData("crazybob.org", 443);
+
+        stopwatch.stop();
+    }
+
+    public void testOpenDatabaseWith10Sessions() {
+        deleteDatabase();
+
+        DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
+        putSessionsIn(cache);
+        closeDatabase();
+
+        System.err.println("Size of ssl_sessions.db w/ 10 sessions: "
+                + new File(dbDir, "ssl_sessions.db").length());
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        cache = new DatabaseSessionCache(getContext());
+        cache.getSessionData("crazybob.org", 443);
+
+        stopwatch.stop();
+    }
+
+    public void testOpenDirectoryWith10Sessions() throws IOException {
+        deleteDirectory();
+
+        SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
+                getCacheDirectory());
+        putSessionsIn(cache);
+        closeDirectoryCache();
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        cache = FileClientSessionCache.usingDirectory(
+                getCacheDirectory());
+        cache.getSessionData("crazybob.org", 443);
+
+        stopwatch.stop();
+    }
+
+    public void testGetSessionFromDatabase() {
+        deleteDatabase();
+
+        DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
+        cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
+        closeDatabase();
+
+        cache = new DatabaseSessionCache(getContext());
+        cache.getSessionData("crazybob.org", 443);
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        byte[] sessionData = cache.getSessionData("foo", 443);
+
+        stopwatch.stop();
+
+        assertTrue(Arrays.equals(SESSION_DATA, sessionData));
+    }
+
+    public void testGetSessionFromDirectory() throws IOException {
+        deleteDirectory();
+
+        SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
+                getCacheDirectory());
+        cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
+        closeDirectoryCache();
+
+        cache = FileClientSessionCache.usingDirectory(
+                getCacheDirectory());
+        cache.getSessionData("crazybob.org", 443);
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        byte[] sessionData = cache.getSessionData("foo", 443);
+
+        stopwatch.stop();
+        
+        assertTrue(Arrays.equals(SESSION_DATA, sessionData));
+    }
+
+    public void testPutSessionIntoDatabase() {
+        deleteDatabase();
+
+        DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
+        cache.getSessionData("crazybob.org", 443);
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
+
+        stopwatch.stop();
+    }
+
+    public void testPutSessionIntoDirectory() throws IOException {
+        deleteDirectory();
+
+        SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
+                getCacheDirectory());
+        cache.getSessionData("crazybob.org", 443);
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
+
+        stopwatch.stop();
+    }
+
+    public void testEngineInit() throws IOException, KeyManagementException {
+        Stopwatch stopwatch = new Stopwatch();
+
+        new SSLContextImpl().engineInit(null, null, null);
+
+        stopwatch.stop();
+    }
+
+    public void testWebRequestWithoutCache() throws IOException,
+            KeyManagementException {
+        SSLContextImpl sslContext = new SSLContextImpl();
+        sslContext.engineInit(null, null, null);
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        getVerisignDotCom(sslContext);
+
+        stopwatch.stop();
+    }
+
+    public void testWebRequestWithFileCache() throws IOException,
+            KeyManagementException {
+        deleteDirectory();
+
+        SSLContextImpl sslContext = new SSLContextImpl();
+        sslContext.engineInit(null, null, null,
+                FileClientSessionCache.usingDirectory(getCacheDirectory()),
+                null);
+
+        // Make sure www.google.com is in the cache.
+        getVerisignDotCom(sslContext);
+
+        // Re-initialize so we hit the file cache.
+        sslContext.engineInit(null, null, null,
+                FileClientSessionCache.usingDirectory(getCacheDirectory()),
+                null);
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        getVerisignDotCom(sslContext);
+
+        stopwatch.stop();
+    }
+
+    public void testWebRequestWithInMemoryCache() throws IOException,
+            KeyManagementException {
+        deleteDirectory();
+
+        SSLContextImpl sslContext = new SSLContextImpl();
+        sslContext.engineInit(null, null, null);
+
+        // Make sure www.google.com is in the cache.
+        getVerisignDotCom(sslContext);
+
+        Stopwatch stopwatch = new Stopwatch();
+
+        getVerisignDotCom(sslContext);
+
+        stopwatch.stop();
+    }
+
+    private void getVerisignDotCom(SSLContextImpl sslContext)
+            throws IOException {
+        SchemeRegistry schemeRegistry = new SchemeRegistry();
+        schemeRegistry.register(new Scheme("https",
+                new SSLSocketFactory(sslContext.engineGetSocketFactory()),
+                443));
+
+        ClientConnectionManager manager =
+                new SingleClientConnManager(null, schemeRegistry);
+
+        new DefaultHttpClient(manager, null).execute(
+                new HttpGet("https://www.verisign.com"),
+                new ResponseHandler<Object>() {
+                    public Object handleResponse(HttpResponse response)
+                            throws ClientProtocolException, IOException {
+                        return null;
+                    }
+                });
+    }
+
+    private void putSessionsIn(SSLClientSessionCache cache) {
+        for (int i = 0; i < 10; i++) {
+            cache.putSessionData(new FakeSession("host" + i), SESSION_DATA);
+        }
+    }
+
+    private void deleteDatabase() {
+        closeDatabase();
+        if (!new File(dbDir, "ssl_sessions.db").delete()) {
+            System.err.println("Failed to delete database.");
+        }
+    }
+
+    private void closeDatabase() {
+        if (DatabaseSessionCache.sDefaultDatabaseHelper != null) {
+            DatabaseSessionCache.sDefaultDatabaseHelper.close();
+        }
+        DatabaseSessionCache.sDefaultDatabaseHelper = null;
+        DatabaseSessionCache.sHookInitializationDone = false;
+        DatabaseSessionCache.mNeedsCacheLoad = true;
+    }
+
+    private void deleteDirectory() {
+        closeDirectoryCache();
+
+        File dir = getCacheDirectory();
+        if (!dir.exists()) {
+            return;
+        }
+        for (File file : dir.listFiles()) {
+            file.delete();
+        }
+        if (!dir.delete()) {
+            System.err.println("Failed to delete directory.");
+        }
+    }
+
+    private void closeDirectoryCache() {
+        try {
+            Method reset = FileClientSessionCache.class
+                    .getDeclaredMethod("reset");
+            reset.setAccessible(true);
+            reset.invoke(null);
+        } catch (NoSuchMethodException e) {
+            throw new RuntimeException(e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (InvocationTargetException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private File getCacheDirectory() {
+        return new File(getContext().getFilesDir(), CACHE_DIR);
+    }
+
+    class Stopwatch {
+        {
+            Debug.startAllocCounting();
+        }
+        long start = System.nanoTime();
+
+        void stop() {
+            long elapsed = (System.nanoTime() - start) / 1000;
+            Debug.stopAllocCounting();
+            System.err.println(getName() + ": " + elapsed + "us, "
+                + Debug.getThreadAllocCount() + " allocations, "
+                + Debug.getThreadAllocSize() + " bytes");
+        }
+    }
+}
+
+class FakeSession implements SSLSession {
+    final String host;
+
+    FakeSession(String host) {
+        this.host = host;
+    }
+
+    public int getApplicationBufferSize() {
+        throw new UnsupportedOperationException();
+    }
+
+    public String getCipherSuite() {
+        throw new UnsupportedOperationException();
+    }
+
+    public long getCreationTime() {
+        throw new UnsupportedOperationException();
+    }
+
+    public byte[] getId() {
+        return host.getBytes();
+    }
+
+    public long getLastAccessedTime() {
+        throw new UnsupportedOperationException();
+    }
+
+    public Certificate[] getLocalCertificates() {
+        throw new UnsupportedOperationException();
+    }
+
+    public Principal getLocalPrincipal() {
+        throw new UnsupportedOperationException();
+    }
+
+    public int getPacketBufferSize() {
+        throw new UnsupportedOperationException();
+    }
+
+    public javax.security.cert.X509Certificate[] getPeerCertificateChain() {
+        throw new UnsupportedOperationException();
+    }
+
+    public Certificate[] getPeerCertificates() {
+        throw new UnsupportedOperationException();
+    }
+
+    public String getPeerHost() {
+        return host;
+    }
+
+    public int getPeerPort() {
+        return 443;
+    }
+
+    public Principal getPeerPrincipal() {
+        throw new UnsupportedOperationException();
+    }
+
+    public String getProtocol() {
+        throw new UnsupportedOperationException();
+    }
+
+    public SSLSessionContext getSessionContext() {
+        throw new UnsupportedOperationException();
+    }
+
+    public Object getValue(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    public String[] getValueNames() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void invalidate() {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean isValid() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void putValue(String name, Object value) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void removeValue(String name) {
+        throw new UnsupportedOperationException();
+    }
+}
diff --git a/tests/CoreTests/android/core/SSLSocketTest.java b/tests/CoreTests/android/core/SSLSocketTest.java
index 922090a..088fa8c 100644
--- a/tests/CoreTests/android/core/SSLSocketTest.java
+++ b/tests/CoreTests/android/core/SSLSocketTest.java
@@ -19,9 +19,13 @@
 import junit.framework.TestCase;
 
 import org.apache.commons.codec.binary.Base64;
+import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
+import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
+import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache;
 
 import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -29,18 +33,28 @@
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.security.KeyStore;
+import java.security.KeyManagementException;
 import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Random;
 
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 
+/**
+ * SSL integration tests that hit real servers.
+ */
 public class SSLSocketTest extends TestCase {
 
     private static SSLSocketFactory clientFactory =
@@ -61,13 +75,15 @@
      * @param delay     The delay after each request (in seconds).
      * @throws IOException When a problem occurs.
      */
-    private void fetch(String host, int port, boolean secure, String path,
-            int outerLoop, int innerLoop, int delay, int timeout) throws IOException {
+    private void fetch(SSLSocketFactory socketFactory, String host, int port,
+            boolean secure, String path, int outerLoop, int innerLoop,
+            int delay, int timeout) throws IOException {
         InetSocketAddress address = new InetSocketAddress(host, port);
 
         for (int i = 0; i < outerLoop; i++) {
             // Connect to the remote host
-            Socket socket = secure ? clientFactory.createSocket() : new Socket();
+            Socket socket = secure ? socketFactory.createSocket()
+                    : new Socket();
             if (timeout >= 0) {
                 socket.setKeepAlive(true);
                 socket.setSoTimeout(timeout * 1000);
@@ -159,6 +175,16 @@
     }
 
     /**
+     * Invokes fetch() with the default socket factory.
+     */
+    private void fetch(String host, int port, boolean secure, String path,
+            int outerLoop, int innerLoop,
+            int delay, int timeout) throws IOException {
+        fetch(clientFactory, host, port, secure, path, outerLoop, innerLoop,
+                delay, timeout);
+    }
+
+    /**
      * Does a single request for each of the hosts. Consumes the response.
      *
      * @throws IOException If a problem occurs.
@@ -619,13 +645,17 @@
         
         public void run() {
             try {
-                KeyManager[] keyManagers = provideKeys ? getKeyManagers(SERVER_KEYS_BKS) : null;
-                TrustManager[] trustManagers = new TrustManager[] { trustManager };
+                KeyManager[] keyManagers = provideKeys
+                        ? getKeyManagers(SERVER_KEYS_BKS) : null;
+                TrustManager[] trustManagers = new TrustManager[] {
+                        trustManager };
 
                 SSLContext sslContext = SSLContext.getInstance("TLS");
                 sslContext.init(keyManagers, trustManagers, null);
                 
-                SSLServerSocket serverSocket = (SSLServerSocket)sslContext.getServerSocketFactory().createServerSocket();
+                SSLServerSocket serverSocket
+                        = (SSLServerSocket) sslContext.getServerSocketFactory()
+                        .createServerSocket();
                 
                 if (clientAuth == CLIENT_AUTH_WANTED) {
                     serverSocket.setWantClientAuth(true);
@@ -637,14 +667,15 @@
                 
                 serverSocket.bind(new InetSocketAddress(port));
                 
-                SSLSocket clientSocket = (SSLSocket)serverSocket.accept();
+                SSLSocket clientSocket = (SSLSocket) serverSocket.accept();
 
                 InputStream stream = clientSocket.getInputStream();
 
                 for (int i = 0; i < 256; i++) {
                     int j = stream.read();
                     if (i != j) {
-                        throw new RuntimeException("Error reading socket, expected " + i + ", got " + j);
+                        throw new RuntimeException("Error reading socket,"
+                                + " expected " + i + ", got " + j);
                     }
                 }
                 
@@ -690,13 +721,16 @@
         
         public void run() {
             try {
-                KeyManager[] keyManagers = provideKeys ? getKeyManagers(CLIENT_KEYS_BKS) : null;
-                TrustManager[] trustManagers = new TrustManager[] { trustManager };
+                KeyManager[] keyManagers = provideKeys
+                        ? getKeyManagers(CLIENT_KEYS_BKS) : null;
+                TrustManager[] trustManagers = new TrustManager[] {
+                        trustManager };
 
                 SSLContext sslContext = SSLContext.getInstance("TLS");
                 sslContext.init(keyManagers, trustManagers, null);
                 
-                SSLSocket socket = (SSLSocket)sslContext.getSocketFactory().createSocket();
+                SSLSocket socket = (SSLSocket) sslContext.getSocketFactory()
+                        .createSocket();
 
                 socket.connect(new InetSocketAddress(port));
                 socket.startHandshake();
@@ -867,6 +901,189 @@
             fail("SSL handshake should have failed.");
         }
     }
-    
-    
+
+    /**
+     * Tests our in-memory and persistent caching support.
+     */
+    public void testClientSessionCaching() throws IOException,
+            KeyManagementException {
+        SSLContextImpl context = new SSLContextImpl();
+
+        // Cache size = 2.
+        FakeClientSessionCache fakeCache = new FakeClientSessionCache();
+        context.engineInit(null, null, null, fakeCache, null);
+        SSLSocketFactory socketFactory = context.engineGetSocketFactory();
+        context.engineGetClientSessionContext().setSessionCacheSize(2);
+        makeRequests(socketFactory);
+        List<String> smallCacheOps = Arrays.asList(
+                "get www.fortify.net",
+                "put www.fortify.net",
+                "get www.paypal.com",
+                "put www.paypal.com",
+                "get www.yellownet.ch",
+                "put www.yellownet.ch",
+
+                // At this point, all in-memory cache requests should miss,
+                // but the sessions will still be in the persistent cache.
+                "get www.fortify.net",
+                "get www.paypal.com",
+                "get www.yellownet.ch"
+        );
+        assertEquals(smallCacheOps, fakeCache.ops);
+
+        // Cache size = 3.
+        fakeCache = new FakeClientSessionCache();
+        context.engineInit(null, null, null, fakeCache, null);
+        socketFactory = context.engineGetSocketFactory();
+        context.engineGetClientSessionContext().setSessionCacheSize(3);
+        makeRequests(socketFactory);
+        List<String> bigCacheOps = Arrays.asList(
+                "get www.fortify.net",
+                "put www.fortify.net",
+                "get www.paypal.com",
+                "put www.paypal.com",
+                "get www.yellownet.ch",
+                "put www.yellownet.ch"
+
+                // At this point, all results should be in the in-memory
+                // cache, and the persistent cache shouldn't be hit anymore.
+        );
+        assertEquals(bigCacheOps, fakeCache.ops);
+
+        // Cache size = 4.
+        fakeCache = new FakeClientSessionCache();
+        context.engineInit(null, null, null, fakeCache, null);
+        socketFactory = context.engineGetSocketFactory();
+        context.engineGetClientSessionContext().setSessionCacheSize(4);
+        makeRequests(socketFactory);
+        assertEquals(bigCacheOps, fakeCache.ops);
+    }
+
+    /**
+     * Executes sequence of requests twice using given socket factory.
+     */
+    private void makeRequests(SSLSocketFactory socketFactory)
+            throws IOException {
+        for (int i = 0; i < 2; i++) {
+            fetch(socketFactory, "www.fortify.net", 443, true, "/sslcheck.html",
+                    1, 1, 0, 60);
+            fetch(socketFactory, "www.paypal.com", 443, true, "/",
+                    1, 1, 0, 60);
+            fetch(socketFactory, "www.yellownet.ch", 443, true, "/",
+                    1, 1, 0, 60);
+        }
+    }
+
+    /**
+     * Fake in the sense that it doesn't actually persist anything.
+     */
+    static class FakeClientSessionCache implements SSLClientSessionCache {
+
+        List<String> ops = new ArrayList<String>();
+        Map<String, byte[]> sessions = new HashMap<String, byte[]>();
+
+        public byte[] getSessionData(String host, int port) {
+            ops.add("get " + host);
+            return sessions.get(host);
+        }
+
+        public void putSessionData(SSLSession session, byte[] sessionData) {
+            String host = session.getPeerHost();
+            System.err.println("length: " + sessionData.length);
+            ops.add("put " + host);
+            sessions.put(host, sessionData);
+        }
+    }
+
+    public void testFileBasedClientSessionCache() throws IOException,
+            KeyManagementException {
+        SSLContextImpl context = new SSLContextImpl();
+        String tmpDir = System.getProperty("java.io.tmpdir");
+        if (tmpDir == null) {
+            fail("Please set 'java.io.tmpdir' system property.");
+        }
+        File cacheDir = new File(tmpDir
+                + "/" + SSLSocketTest.class.getName() + "/cache");
+        deleteDir(cacheDir);
+        SSLClientSessionCache fileCache
+                = FileClientSessionCache.usingDirectory(cacheDir);
+        try {
+            ClientSessionCacheProxy cacheProxy
+                    = new ClientSessionCacheProxy(fileCache);
+            context.engineInit(null, null, null, cacheProxy, null);
+            SSLSocketFactory socketFactory = context.engineGetSocketFactory();
+            context.engineGetClientSessionContext().setSessionCacheSize(1);
+            makeRequests(socketFactory);
+            List<String> expected = Arrays.asList(
+                    "unsuccessful get www.fortify.net",
+                    "put www.fortify.net",
+                    "unsuccessful get www.paypal.com",
+                    "put www.paypal.com",
+                    "unsuccessful get www.yellownet.ch",
+                    "put www.yellownet.ch",
+
+                    // At this point, all in-memory cache requests should miss,
+                    // but the sessions will still be in the persistent cache.
+                    "successful get www.fortify.net",
+                    "successful get www.paypal.com",
+                    "successful get www.yellownet.ch"
+            );
+            assertEquals(expected, cacheProxy.ops);
+
+            // Try again now that file-based cache is populated.
+            fileCache = FileClientSessionCache.usingDirectory(cacheDir);
+            cacheProxy = new ClientSessionCacheProxy(fileCache);
+            context.engineInit(null, null, null, cacheProxy, null);
+            socketFactory = context.engineGetSocketFactory();
+            context.engineGetClientSessionContext().setSessionCacheSize(1);
+            makeRequests(socketFactory);
+            expected = Arrays.asList(
+                    "successful get www.fortify.net",
+                    "successful get www.paypal.com",
+                    "successful get www.yellownet.ch",
+                    "successful get www.fortify.net",
+                    "successful get www.paypal.com",
+                    "successful get www.yellownet.ch"
+            );
+            assertEquals(expected, cacheProxy.ops);
+        } finally {
+            deleteDir(cacheDir);
+        }
+    }
+
+    private static void deleteDir(File directory) {
+        if (!directory.exists()) {
+            return;
+        }
+        for (File file : directory.listFiles()) {
+            file.delete();
+        }
+        directory.delete();
+    }
+
+    static class ClientSessionCacheProxy implements SSLClientSessionCache {
+
+        final SSLClientSessionCache delegate;
+        final List<String> ops = new ArrayList<String>();
+
+        ClientSessionCacheProxy(SSLClientSessionCache delegate) {
+            this.delegate = delegate;
+        }
+
+        public byte[] getSessionData(String host, int port) {
+            byte[] sessionData = delegate.getSessionData(host, port);
+            ops.add((sessionData == null ? "unsuccessful" : "successful")
+                    + " get " + host);
+            return sessionData;
+        }
+
+        public void putSessionData(SSLSession session, byte[] sessionData) {
+            delegate.putSessionData(session, sessionData);
+            ops.add("put " + session.getPeerHost());
+        }
+    }
+
+    public static void main(String[] args) throws KeyManagementException, IOException {
+        new SSLSocketTest().testFileBasedClientSessionCache();
+    }
 }
diff --git a/tests/CoreTests/android/location/LocationManagerProximityTest.java b/tests/CoreTests/android/location/LocationManagerProximityTest.java
index 5f62983..e1501e3 100644
--- a/tests/CoreTests/android/location/LocationManagerProximityTest.java
+++ b/tests/CoreTests/android/location/LocationManagerProximityTest.java
@@ -23,6 +23,7 @@
 import android.location.Criteria;
 import android.location.Location;
 import android.location.LocationManager;
+import android.provider.Settings;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
@@ -33,8 +34,10 @@
  * TODO: add tests for more scenarios
  * 
  * To run:
- *  adb shell am instrument -e class com.google.android.mapstests.api.LocationProximityTest \
- *     -w com.google.android.mapstests/.MapInstrumentationTestRunner
+ *  adb shell am instrument -e class android.location.LocationManagerProximityTest \
+ *     -w android.core/android.test.InstrumentationTestRunner
+ *     
+ * This test requires that the "Allow mock locations" setting be enabled     
  * 
  */
 @MediumTest
@@ -46,8 +49,6 @@
     private LocationManager mLocationManager;
     private PendingIntent mPendingIntent;
     private TestIntentReceiver mIntentReceiver;
-    private String mOriginalAllowedProviders;
-    private int mOriginalMocksAllowed;
 
     private static final String LOG_TAG = "LocationProximityTest";
 
@@ -60,27 +61,13 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        
-        // allow mock locations
-        mOriginalMocksAllowed =
-            android.provider.Settings.Secure.getInt(getContext().getContentResolver(),
-                android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, 0);
-        
-        android.provider.Settings.Secure.putInt(getContext().getContentResolver(),
-                android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, 1);
-        
-        mOriginalAllowedProviders = 
-            android.provider.Settings.Secure.getString(
-                    getContext().getContentResolver(), 
-                    android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
-        
-        // ensure 'only' the mock provider is enabled
-        // need to do this so the proximity listener does not ignore the mock 
-        // updates in favor of gps updates
-        android.provider.Settings.Secure.putString(
-                getContext().getContentResolver(), 
-                android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 
-                PROVIDER_NAME);
+
+        // test that mock locations are allowed so a more descriptive error message can be logged
+        if (Settings.Secure.getInt(getContext().getContentResolver(),
+            Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0) {
+            fail("Mock locations are currently disabled in Settings - this test requires " +
+                 "mock locations");
+        }
 
         mLocationManager = (LocationManager) getContext().
                 getSystemService(Context.LOCATION_SERVICE);
@@ -109,18 +96,6 @@
         if (mIntentReceiver != null) {
             getContext().unregisterReceiver(mIntentReceiver);
         }
-        
-        android.provider.Settings.Secure.putInt(getContext().getContentResolver(),
-                android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, mOriginalMocksAllowed);
-        
-        if (mOriginalAllowedProviders != null) {
-            // restore original settings
-            android.provider.Settings.Secure.putString(
-                    getContext().getContentResolver(), 
-                    android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 
-                    mOriginalAllowedProviders);
-            mLocationManager.updateProviders();
-        }
     }
 
     /**
diff --git a/tests/CoreTests/run_core_test.sh b/tests/CoreTests/run_core_test.sh
index 1fc3348..ffa31ed 100755
--- a/tests/CoreTests/run_core_test.sh
+++ b/tests/CoreTests/run_core_test.sh
@@ -1,4 +1,6 @@
 framework=/system/framework
 bpath=$framework/core.jar:$framework/ext.jar:$framework/framework.jar:$framework/android.test.runner.jar
-adb shell exec dalvikvm  -Xbootclasspath:$bpath -cp system/app/CoreTests.apk \
+adb shell exec dalvikvm -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=3001 \
+      -Xbootclasspath:$bpath -cp /data/app/android.core.apk \
+      -Djava.io.tmpdir=/sdcard/tmp \
       com.android.internal.util.WithFramework junit.textui.TestRunner $*
diff --git a/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java b/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
index 6c71e86..17f6bdc 100755
--- a/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
+++ b/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
@@ -83,10 +83,6 @@
         mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_NORMAL|EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT, 
                 R.string.auto_correct_edit_text_label));
         
-        /* Normal Edit Text w/Search Flag*/
-        mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_NORMAL|EditorInfo.TYPE_TEXT_FLAG_SEARCH, 
-                R.string.search_edit_text_label));
-        
         /* Uri Edit Text */
         mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_URI, 
         		R.string.uri_edit_text_label));
diff --git a/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml b/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml
index 4d483c7..e0a416e 100644
--- a/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml
+++ b/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml
@@ -16,8 +16,11 @@
 
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/oh_hai_text"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
+    android:layout_width="150dp"
+    android:layout_height="150dp"
     android:text="@string/oh_hai"
+    android:background="#8fff"
+    android:textColor="#000"
+    android:textStyle="bold"
 />
 
diff --git a/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml b/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml
index 0fc7812..33cc2e3 100644
--- a/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml
+++ b/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml
@@ -1,7 +1,7 @@
 <gadget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minWidth="40dp"
-    android:minHeight="30dp"
-    android:updatePeriodMillis="60000"
+    android:minWidth="150dp"
+    android:minHeight="150dp"
+    android:updatePeriodMillis="2000"
     android:initialLayout="@layout/test_gadget"
     >
 </gadget-provider>
diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp
index 4c776fb..edb12ea 100644
--- a/tools/aapt/Images.cpp
+++ b/tools/aapt/Images.cpp
@@ -859,6 +859,14 @@
 
     analyze_image(imageName, imageInfo, grayscaleTolerance, rgbPalette, alphaPalette,
                   &paletteEntries, &hasTransparency, &color_type, outRows);
+
+    // If the image is a 9-patch, we need to preserve it as a ARGB file to make
+    // sure the pixels will not be pre-dithered/clamped until we decide they are
+    if (imageInfo.is9Patch && (color_type == PNG_COLOR_TYPE_RGB ||
+            color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_PALETTE)) {
+        color_type = PNG_COLOR_TYPE_RGB_ALPHA;
+    }
+
     switch (color_type) {
     case PNG_COLOR_TYPE_PALETTE:
         NOISY(printf("Image %s has %d colors%s, using PNG_COLOR_TYPE_PALETTE\n",
diff --git a/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java b/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java
index 0810d29..df1876d 100644
--- a/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java
+++ b/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java
@@ -24,28 +24,35 @@
  * <p/>
  * <p/>{@link #getApiLevel()} gives the ability to know which methods are available.
  * <p/>
+ * Changes in API level 3:
+ * <ul>
+ * <li>{@link #computeLayout(IXmlPullParser, Object, int, int, int, float, float, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}</li>
+ * <li> deprecated {@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}</li>
+ * </ul>
  * Changes in API level 2:
  * <ul>
  * <li>{@link #getApiLevel()}</li>
- * <li>{@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)},
- * deprecated {@link #computeLayout(IXmlPullParser, Object, int, int, String, Map, Map, IProjectCallback, ILayoutLog)}.</li>
+ * <li>{@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}</li>
+ * <li>deprecated {@link #computeLayout(IXmlPullParser, Object, int, int, String, Map, Map, IProjectCallback, ILayoutLog)}</li>
  * </ul>
  */
 public interface ILayoutBridge {
     
-    final int API_CURRENT = 2;
+    final int API_CURRENT = 3;
 
     /**
      * Returns the API level of the layout library.
      * While no methods will ever be removed, some may become deprecated, and some new ones
      * will appear.
+     * <p/>If calling this method throws an {@link AbstractMethodError}, then the API level
+     * should be considered to be 1. 
      */
     int getApiLevel();
 
     /**
      * Initializes the Bridge object.
      * @param fontOsLocation the location of the fonts.
-     * @param enumValueMap map attrName => { map enumFlagName => Integer value }.
+     * @param enumValueMap map attrName => { map enumFlagName => Integer value }. 
      * @return true if success.
      * @since 1
      */
@@ -56,8 +63,11 @@
      * @param layoutDescription the {@link IXmlPullParser} letting the LayoutLib Bridge visit the
      * layout file.
      * @param projectKey An Object identifying the project. This is used for the cache mechanism.
-     * @param screenWidth
-     * @param screenHeight
+     * @param screenWidth the screen width
+     * @param screenHeight the screen height
+     * @param density the density factor for the screen.
+     * @param xdpi the screen actual dpi in X
+     * @param ydpi the screen actual dpi in Y
      * @param themeName The name of the theme to use.
      * @param isProjectTheme true if the theme is a project theme, false if it is a framework theme.
      * @param projectResources the resources of the project. The map contains (String, map) pairs
@@ -72,8 +82,41 @@
      * the project.
      * @param logger the object responsible for displaying warning/errors to the user.
      * @return an {@link ILayoutResult} object that contains the result of the layout.
+     * @since 3
+     */
+    ILayoutResult computeLayout(IXmlPullParser layoutDescription,
+            Object projectKey,
+            int screenWidth, int screenHeight, int density, float xdpi, float ydpi,
+            String themeName, boolean isProjectTheme,
+            Map<String, Map<String, IResourceValue>> projectResources,
+            Map<String, Map<String, IResourceValue>> frameworkResources,
+            IProjectCallback projectCallback, ILayoutLog logger);
+
+    /**
+     * Computes and renders a layout
+     * @param layoutDescription the {@link IXmlPullParser} letting the LayoutLib Bridge visit the
+     * layout file.
+     * @param projectKey An Object identifying the project. This is used for the cache mechanism.
+     * @param screenWidth the screen width
+     * @param screenHeight the screen height
+     * @param themeName The name of the theme to use.
+     * @param isProjectTheme true if the theme is a project theme, false if it is a framework theme.
+     * @param projectResources the resources of the project. The map contains (String, map) pairs
+     * where the string is the type of the resource reference used in the layout file, and the
+     * map contains (String, {@link IResourceValue}) pairs where the key is the resource name,
+     * and the value is the resource value.
+     * @param frameworkResources the framework resources. The map contains (String, map) pairs
+     * where the string is the type of the resource reference used in the layout file, and the map
+     * contains (String, {@link IResourceValue}) pairs where the key is the resource name, and the
+     * value is the resource value.
+     * @param projectCallback The {@link IProjectCallback} object to get information from
+     * the project.
+     * @param logger the object responsible for displaying warning/errors to the user.
+     * @return an {@link ILayoutResult} object that contains the result of the layout.
+     * @deprecated Use {@link #computeLayout(IXmlPullParser, Object, int, int, int, float, float, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}
      * @since 2
      */
+    @Deprecated
     ILayoutResult computeLayout(IXmlPullParser layoutDescription,
             Object projectKey,
             int screenWidth, int screenHeight, String themeName, boolean isProjectTheme,
@@ -102,7 +145,7 @@
      * the project.
      * @param logger the object responsible for displaying warning/errors to the user.
      * @return an {@link ILayoutResult} object that contains the result of the layout.
-     * @deprecated Use {@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}.
+     * @deprecated Use {@link #computeLayout(IXmlPullParser, Object, int, int, int, float, float, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}
      * @since 1
      */
     @Deprecated
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
index 82fe365..6abc452d 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
@@ -40,6 +40,7 @@
 import android.os.Looper;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
+import android.util.DisplayMetrics;
 import android.util.TypedValue;
 import android.view.BridgeInflater;
 import android.view.IWindow;
@@ -72,6 +73,8 @@
     private static final int DEFAULT_STATUS_BAR_HEIGHT = 25;
     
     public static class StaticMethodNotImplementedException extends RuntimeException {
+        private static final long serialVersionUID = 1L;
+
         public StaticMethodNotImplementedException(String msg) {
             super(msg);
         }
@@ -277,17 +280,37 @@
             isProjectTheme = true;
         }
         
-        return computeLayout(layoutDescription, projectKey, screenWidth, screenHeight, themeName, isProjectTheme,
+        return computeLayout(layoutDescription, projectKey,
+                screenWidth, screenHeight, DisplayMetrics.DEFAULT_DENSITY,
+                DisplayMetrics.DEFAULT_DENSITY, DisplayMetrics.DEFAULT_DENSITY,
+                themeName, isProjectTheme,
+                projectResources, frameworkResources, customViewLoader, logger);
+    }
+
+    /*
+     * For compatilibty purposes, we implement the old deprecated version of computeLayout.
+     * (non-Javadoc)
+     * @see com.android.layoutlib.api.ILayoutBridge#computeLayout(com.android.layoutlib.api.IXmlPullParser, java.lang.Object, int, int, java.lang.String, boolean, java.util.Map, java.util.Map, com.android.layoutlib.api.IProjectCallback, com.android.layoutlib.api.ILayoutLog)
+     */
+    public ILayoutResult computeLayout(IXmlPullParser layoutDescription, Object projectKey,
+            int screenWidth, int screenHeight, String themeName, boolean isProjectTheme,
+            Map<String, Map<String, IResourceValue>> projectResources,
+            Map<String, Map<String, IResourceValue>> frameworkResources,
+            IProjectCallback customViewLoader, ILayoutLog logger) {
+        return computeLayout(layoutDescription, projectKey,
+                screenWidth, screenHeight, DisplayMetrics.DEFAULT_DENSITY,
+                DisplayMetrics.DEFAULT_DENSITY, DisplayMetrics.DEFAULT_DENSITY,
+                themeName, isProjectTheme,
                 projectResources, frameworkResources, customViewLoader, logger);
     }
 
     /*
      * (non-Javadoc)
-     * @see com.android.layoutlib.api.ILayoutBridge#computeLayout(com.android.layoutlib.api.IXmlPullParser, java.lang.Object, int, int, java.lang.String, boolean, java.util.Map, java.util.Map, com.android.layoutlib.api.IProjectCallback, com.android.layoutlib.api.ILayoutLog)
+     * @see com.android.layoutlib.api.ILayoutBridge#computeLayout(com.android.layoutlib.api.IXmlPullParser, java.lang.Object, int, int, int, float, float, java.lang.String, boolean, java.util.Map, java.util.Map, com.android.layoutlib.api.IProjectCallback, com.android.layoutlib.api.ILayoutLog)
      */
-    public ILayoutResult computeLayout(IXmlPullParser layoutDescription,
-            Object projectKey,
-            int screenWidth, int screenHeight, String themeName, boolean isProjectTheme,
+    public ILayoutResult computeLayout(IXmlPullParser layoutDescription, Object projectKey,
+            int screenWidth, int screenHeight, int density, float xdpi, float ydpi,
+            String themeName, boolean isProjectTheme,
             Map<String, Map<String, IResourceValue>> projectResources,
             Map<String, Map<String, IResourceValue>> frameworkResources,
             IProjectCallback customViewLoader, ILayoutLog logger) {
@@ -298,7 +321,7 @@
         synchronized (sDefaultLogger) {
             sLogger = logger;
         }
-        
+
         // find the current theme and compute the style inheritance map
         Map<IStyleResourceValue, IStyleResourceValue> styleParentMap =
             new HashMap<IStyleResourceValue, IStyleResourceValue>();
@@ -309,7 +332,16 @@
         
         BridgeContext context = null; 
         try {
-            context = new BridgeContext(projectKey, currentTheme, projectResources,
+            // setup the display Metrics.
+            DisplayMetrics metrics = new DisplayMetrics();
+            metrics.density = density / (float) DisplayMetrics.DEFAULT_DENSITY;
+            metrics.scaledDensity = metrics.density;
+            metrics.widthPixels = screenWidth;
+            metrics.heightPixels = screenHeight;
+            metrics.xdpi = xdpi;
+            metrics.ydpi = ydpi;
+
+            context = new BridgeContext(projectKey, metrics, currentTheme, projectResources,
                     frameworkResources, styleParentMap, customViewLoader, logger);
             BridgeInflater inflater = new BridgeInflater(context, customViewLoader);
             context.setBridgeInflater(inflater);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
index 0df20e4d..baa3d53 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
@@ -87,14 +87,21 @@
     private BridgeContentResolver mContentResolver;
 
     /**
-     * @param projectKey
-     * @param currentTheme 
-     * @param projectResources
-     * @param frameworkResources
+     * @param projectKey An Object identifying the project. This is used for the cache mechanism.
+     * @param metrics the {@link DisplayMetrics}.
+     * @param themeName The name of the theme to use.
+     * @param projectResources the resources of the project. The map contains (String, map) pairs
+     * where the string is the type of the resource reference used in the layout file, and the
+     * map contains (String, {@link IResourceValue}) pairs where the key is the resource name,
+     * and the value is the resource value.
+     * @param frameworkResources the framework resources. The map contains (String, map) pairs
+     * where the string is the type of the resource reference used in the layout file, and the map
+     * contains (String, {@link IResourceValue}) pairs where the key is the resource name, and the
+     * value is the resource value.
      * @param styleInheritanceMap
      * @param customViewLoader
      */
-    public BridgeContext(Object projectKey,
+    public BridgeContext(Object projectKey, DisplayMetrics metrics,
             IStyleResourceValue currentTheme,
             Map<String, Map<String, IResourceValue>> projectResources,
             Map<String, Map<String, IResourceValue>> frameworkResources,
@@ -105,10 +112,6 @@
         mLogger = logger;
         Configuration config = new Configuration();
         
-        DisplayMetrics metrics = new DisplayMetrics();
-        metrics.setToDefaults();
-        
-
         AssetManager assetManager = BridgeAssetManager.initSystem();
         mResources = BridgeResources.initSystem(
                 this,
diff --git a/tools/preload/Android.mk b/tools/preload/Android.mk
index d3457fe..e6fa103 100644
--- a/tools/preload/Android.mk
+++ b/tools/preload/Android.mk
@@ -2,7 +2,19 @@
 
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := *.java
+LOCAL_SRC_FILES := \
+	ClassRank.java \
+	Compile.java  \
+	LoadedClass.java \
+	MemoryUsage.java \
+	Operation.java \
+	Policy.java \
+	PrintCsv.java \
+	PrintPsTree.java \
+	Proc.java \
+	Record.java \
+	Root.java \
+	WritePreloadedClassFile.java
 
 LOCAL_MODULE:= preload
 
