Merge change 64 into donut

* changes:
  Remove references to android.util.Config
diff --git a/api/3.xml b/api/3.xml
index 8a2649d..4d8f7a7 100644
--- a/api/3.xml
+++ b/api/3.xml
@@ -27950,6 +27950,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_INPUT_METHOD_CHANGED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.INPUT_METHOD_CHANGED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_INSERT"
  type="java.lang.String"
  transient="false"
@@ -36662,6 +36673,23 @@
 <exception name="Resources.NotFoundException" type="android.content.res.Resources.NotFoundException">
 </exception>
 </method>
+<method name="openRawResource"
+ return="java.io.InputStream"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="id" type="int">
+</parameter>
+<parameter name="value" type="android.util.TypedValue">
+</parameter>
+<exception name="Resources.NotFoundException" type="android.content.res.Resources.NotFoundException">
+</exception>
+</method>
 <method name="openRawResourceFd"
  return="android.content.res.AssetFileDescriptor"
  abstract="false"
@@ -60555,6 +60583,17 @@
  visibility="public"
 >
 </method>
+<method name="isProximityCorrectionEnabled"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isShifted"
  return="boolean"
  abstract="false"
@@ -60717,6 +60756,19 @@
 <parameter name="previewEnabled" type="boolean">
 </parameter>
 </method>
+<method name="setProximityCorrectionEnabled"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="enabled" type="boolean">
+</parameter>
+</method>
 <method name="setShifted"
  return="boolean"
  abstract="false"
@@ -67477,6 +67529,17 @@
 <parameter name="context" type="android.content.Context">
 </parameter>
 </method>
+<method name="inferStreamType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isDefault"
  return="boolean"
  abstract="false"
@@ -73303,7 +73366,7 @@
  visibility="public"
 >
 </field>
-<field name="RENDERMODE_CONTUOUSLY"
+<field name="RENDERMODE_CONTINUOUSLY"
  type="int"
  transient="false"
  volatile="false"
@@ -78380,6 +78443,17 @@
  visibility="public"
 >
 </method>
+<method name="getThread"
+ return="java.lang.Thread"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="loop"
  return="void"
  abstract="false"
@@ -88523,6 +88597,17 @@
  visibility="public"
 >
 </field>
+<field name="NUMBER_OF_SONGS_FOR_ARTIST"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;numsongs_by_artist&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </interface>
 <class name="MediaStore.Audio.Albums"
  extends="java.lang.Object"
@@ -91205,6 +91290,17 @@
  visibility="public"
 >
 </field>
+<field name="BACKGROUND_DATA"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;background_data&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="BLUETOOTH_ON"
  type="java.lang.String"
  transient="false"
@@ -91402,6 +91498,28 @@
  visibility="public"
 >
 </field>
+<field name="WIFI_MAX_DHCP_RETRY_COUNT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_max_dhcp_retry_count&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_mobile_data_transition_wakelock_timeout_ms&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON"
  type="java.lang.String"
  transient="false"
@@ -91567,6 +91685,17 @@
  visibility="public"
 >
 </field>
+<field name="WIFI_WATCHDOG_WATCH_LIST"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_watchdog_watch_list&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="Settings.SettingNotFoundException"
  extends="android.util.AndroidException"
@@ -92692,6 +92821,50 @@
  visibility="public"
 >
 </field>
+<field name="WIFI_SLEEP_POLICY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_sleep_policy&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_SLEEP_POLICY_DEFAULT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_SLEEP_POLICY_NEVER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="WIFI_STATIC_DNS1"
  type="java.lang.String"
  transient="false"
@@ -95055,6 +95228,17 @@
 <parameter name="events" type="int">
 </parameter>
 </method>
+<field name="ACTION_PHONE_STATE_CHANGED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.PHONE_STATE&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="CALL_STATE_IDLE"
  type="int"
  transient="false"
@@ -95176,6 +95360,58 @@
  visibility="public"
 >
 </field>
+<field name="EXTRA_INCOMING_NUMBER"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;incoming_number&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;state&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE_IDLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE_OFFHOOK"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE_RINGING"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="NETWORK_TYPE_EDGE"
  type="int"
  transient="false"
@@ -97996,6 +98232,89 @@
 </exception>
 </method>
 </class>
+<class name="ProviderTestCase2"
+ extends="android.test.AndroidTestCase"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="ProviderTestCase2"
+ type="android.test.ProviderTestCase2"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="providerClass" type="java.lang.Class&lt;T&gt;">
+</parameter>
+<parameter name="providerAuthority" type="java.lang.String">
+</parameter>
+</constructor>
+<method name="getMockContentResolver"
+ return="android.test.mock.MockContentResolver"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMockContext"
+ return="android.test.IsolatedContext"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getProvider"
+ return="T"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="newResolverWithContentProviderFromSql"
+ return="android.content.ContentResolver"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="targetContext" type="android.content.Context">
+</parameter>
+<parameter name="filenamePrefix" type="java.lang.String">
+</parameter>
+<parameter name="providerClass" type="java.lang.Class&lt;T&gt;">
+</parameter>
+<parameter name="authority" type="java.lang.String">
+</parameter>
+<parameter name="databaseName" type="java.lang.String">
+</parameter>
+<parameter name="databaseVersion" type="int">
+</parameter>
+<parameter name="sql" type="java.lang.String">
+</parameter>
+<exception name="IllegalAccessException" type="java.lang.IllegalAccessException">
+</exception>
+<exception name="InstantiationException" type="java.lang.InstantiationException">
+</exception>
+</method>
+</class>
 <class name="RenamingDelegatingContext"
  extends="android.content.ContextWrapper"
  abstract="false"
@@ -119790,17 +120109,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_FORWARD"
- type="int"
- transient="false"
- volatile="false"
- value="90"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_G"
  type="int"
  transient="false"
@@ -119922,6 +120230,72 @@
  visibility="public"
 >
 </field>
+<field name="KEYCODE_MEDIA_FAST_FORWARD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="90"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_NEXT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="87"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_PLAY_PAUSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="85"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_PREVIOUS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="88"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_REWIND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="89"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_STOP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="86"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="KEYCODE_MENU"
  type="int"
  transient="false"
@@ -119966,17 +120340,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_NEXTSONG"
- type="int"
- transient="false"
- volatile="false"
- value="87"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_NOTIFICATION"
  type="int"
  transient="false"
@@ -120032,17 +120395,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_PLAYPAUSE"
- type="int"
- transient="false"
- volatile="false"
- value="85"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_PLUS"
  type="int"
  transient="false"
@@ -120076,17 +120428,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_PREVIOUSSONG"
- type="int"
- transient="false"
- volatile="false"
- value="88"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_Q"
  type="int"
  transient="false"
@@ -120109,17 +120450,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_REWIND"
- type="int"
- transient="false"
- volatile="false"
- value="89"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_RIGHT_BRACKET"
  type="int"
  transient="false"
@@ -120241,17 +120571,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_STOP"
- type="int"
- transient="false"
- volatile="false"
- value="86"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_SYM"
  type="int"
  transient="false"
@@ -122772,7 +123091,7 @@
 <method name="setOrientation"
  return="void"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="true"
  final="false"
@@ -127779,6 +128098,17 @@
 <parameter name="context" type="android.content.Context">
 </parameter>
 </method>
+<method name="getDoubleTapTimeout"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getEdgeSlop"
  return="int"
  abstract="false"
@@ -127867,6 +128197,17 @@
  visibility="public"
 >
 </method>
+<method name="getScaledDoubleTapSlop"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getScaledEdgeSlop"
  return="int"
  abstract="false"
@@ -128027,6 +128368,21 @@
  visibility="public"
 >
 </constructor>
+<method name="dumpCapturedView"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="java.lang.String">
+</parameter>
+<parameter name="view" type="java.lang.Object">
+</parameter>
+</method>
 <method name="startHierarchyTracing"
  return="void"
  abstract="false"
@@ -128134,6 +128490,17 @@
 >
 </field>
 </class>
+<class name="ViewDebug.CapturedViewProperty"
+ extends="java.lang.Object"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="java.lang.annotation.Annotation">
+</implements>
+</class>
 <class name="ViewDebug.ExportedProperty"
  extends="java.lang.Object"
  abstract="true"
@@ -130327,6 +130694,19 @@
 <parameter name="listener" type="android.view.ViewTreeObserver.OnPreDrawListener">
 </parameter>
 </method>
+<method name="addOnScrollChangedListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.view.ViewTreeObserver.OnScrollChangedListener">
+</parameter>
+</method>
 <method name="addOnTouchModeChangeListener"
  return="void"
  abstract="false"
@@ -130412,6 +130792,19 @@
 <parameter name="victim" type="android.view.ViewTreeObserver.OnPreDrawListener">
 </parameter>
 </method>
+<method name="removeOnScrollChangedListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="victim" type="android.view.ViewTreeObserver.OnScrollChangedListener">
+</parameter>
+</method>
 <method name="removeOnTouchModeChangeListener"
  return="void"
  abstract="false"
@@ -130487,6 +130880,25 @@
 >
 </method>
 </interface>
+<interface name="ViewTreeObserver.OnScrollChangedListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onScrollChanged"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</interface>
 <interface name="ViewTreeObserver.OnTouchModeChangeListener"
  abstract="true"
  static="true"
@@ -140184,6 +140596,17 @@
  visibility="public"
 >
 </method>
+<method name="getOriginalUrl"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getTitle"
  return="java.lang.String"
  abstract="false"
@@ -141761,6 +142184,17 @@
 <parameter name="realm" type="java.lang.String">
 </parameter>
 </method>
+<method name="getOriginalUrl"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getPluginList"
  return="android.webkit.PluginList"
  abstract="false"
@@ -142257,6 +142691,19 @@
 <parameter name="setMap" type="boolean">
 </parameter>
 </method>
+<method name="setNetworkAvailable"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="networkUp" type="boolean">
+</parameter>
+</method>
 <method name="setPictureListener"
  return="void"
  abstract="false"
@@ -143070,6 +143517,17 @@
  visibility="public"
 >
 </method>
+<method name="getTextFilter"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getTranscriptMode"
  return="int"
  abstract="false"
@@ -144778,6 +145236,126 @@
 </parameter>
 </method>
 </interface>
+<class name="AlphabetIndexer"
+ extends="android.database.DataSetObserver"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.widget.SectionIndexer">
+</implements>
+<constructor name="AlphabetIndexer"
+ type="android.widget.AlphabetIndexer"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cursor" type="android.database.Cursor">
+</parameter>
+<parameter name="sortedColumnIndex" type="int">
+</parameter>
+<parameter name="alphabet" type="java.lang.CharSequence">
+</parameter>
+</constructor>
+<method name="compare"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="word" type="java.lang.String">
+</parameter>
+<parameter name="letter" type="java.lang.String">
+</parameter>
+</method>
+<method name="getPositionForSection"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectionIndex" type="int">
+</parameter>
+</method>
+<method name="getSectionForPosition"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="position" type="int">
+</parameter>
+</method>
+<method name="getSections"
+ return="java.lang.Object[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setCursor"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cursor" type="android.database.Cursor">
+</parameter>
+</method>
+<field name="mAlphabet"
+ type="java.lang.CharSequence"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</field>
+<field name="mColumnIndex"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</field>
+<field name="mDataCursor"
+ type="android.database.Cursor"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</field>
+</class>
 <class name="AnalogClock"
  extends="android.view.View"
  abstract="false"
@@ -146234,19 +146812,6 @@
 <parameter name="listener" type="android.widget.Chronometer.OnChronometerTickListener">
 </parameter>
 </method>
-<method name="setStarted"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="started" type="boolean">
-</parameter>
-</method>
 <method name="start"
  return="void"
  abstract="false"
@@ -146652,6 +147217,17 @@
 <parameter name="parent" type="android.view.ViewGroup">
 </parameter>
 </method>
+<method name="onContentChanged"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</method>
 <method name="runQueryOnBackgroundThread"
  return="android.database.Cursor"
  abstract="false"
@@ -152025,6 +152601,27 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="force" type="boolean">
+</parameter>
+</method>
+<method name="update"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
 <parameter name="anchor" type="android.view.View">
 </parameter>
 <parameter name="width" type="int">
@@ -153753,6 +154350,22 @@
 <parameter name="c" type="android.database.Cursor">
 </parameter>
 </constructor>
+<constructor name="ResourceCursorAdapter"
+ type="android.widget.ResourceCursorAdapter"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="layout" type="int">
+</parameter>
+<parameter name="c" type="android.database.Cursor">
+</parameter>
+<parameter name="autoRequery" type="boolean">
+</parameter>
+</constructor>
 <method name="newView"
  return="android.view.View"
  abstract="false"
@@ -154270,6 +154883,28 @@
  visibility="public"
 >
 </method>
+<method name="getStartX"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getStartY"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isFinished"
  return="boolean"
  abstract="false"
diff --git a/api/current.xml b/api/current.xml
index 66128c5..aac8a3d 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -28038,6 +28038,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_INPUT_METHOD_CHANGED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.INPUT_METHOD_CHANGED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_INSERT"
  type="java.lang.String"
  transient="false"
@@ -28335,6 +28346,28 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_POWER_CONNECTED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.ACTION_POWER_CONNECTED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ACTION_POWER_DISCONNECTED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.ACTION_POWER_DISCONNECTED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_PROVIDER_CHANGED"
  type="java.lang.String"
  transient="false"
@@ -36750,6 +36783,23 @@
 <exception name="Resources.NotFoundException" type="android.content.res.Resources.NotFoundException">
 </exception>
 </method>
+<method name="openRawResource"
+ return="java.io.InputStream"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="id" type="int">
+</parameter>
+<parameter name="value" type="android.util.TypedValue">
+</parameter>
+<exception name="Resources.NotFoundException" type="android.content.res.Resources.NotFoundException">
+</exception>
+</method>
 <method name="openRawResourceFd"
  return="android.content.res.AssetFileDescriptor"
  abstract="false"
@@ -60643,6 +60693,17 @@
  visibility="public"
 >
 </method>
+<method name="isProximityCorrectionEnabled"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isShifted"
  return="boolean"
  abstract="false"
@@ -60805,6 +60866,19 @@
 <parameter name="previewEnabled" type="boolean">
 </parameter>
 </method>
+<method name="setProximityCorrectionEnabled"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="enabled" type="boolean">
+</parameter>
+</method>
 <method name="setShifted"
  return="boolean"
  abstract="false"
@@ -67565,6 +67639,17 @@
 <parameter name="context" type="android.content.Context">
 </parameter>
 </method>
+<method name="inferStreamType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isDefault"
  return="boolean"
  abstract="false"
@@ -73391,7 +73476,7 @@
  visibility="public"
 >
 </field>
-<field name="RENDERMODE_CONTUOUSLY"
+<field name="RENDERMODE_CONTINUOUSLY"
  type="int"
  transient="false"
  volatile="false"
@@ -78468,6 +78553,17 @@
  visibility="public"
 >
 </method>
+<method name="getThread"
+ return="java.lang.Thread"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="loop"
  return="void"
  abstract="false"
@@ -88611,6 +88707,17 @@
  visibility="public"
 >
 </field>
+<field name="NUMBER_OF_SONGS_FOR_ARTIST"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;numsongs_by_artist&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </interface>
 <class name="MediaStore.Audio.Albums"
  extends="java.lang.Object"
@@ -91293,6 +91400,17 @@
  visibility="public"
 >
 </field>
+<field name="BACKGROUND_DATA"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;background_data&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="BLUETOOTH_ON"
  type="java.lang.String"
  transient="false"
@@ -91490,6 +91608,28 @@
  visibility="public"
 >
 </field>
+<field name="WIFI_MAX_DHCP_RETRY_COUNT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_max_dhcp_retry_count&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_mobile_data_transition_wakelock_timeout_ms&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON"
  type="java.lang.String"
  transient="false"
@@ -91655,6 +91795,17 @@
  visibility="public"
 >
 </field>
+<field name="WIFI_WATCHDOG_WATCH_LIST"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_watchdog_watch_list&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="Settings.SettingNotFoundException"
  extends="android.util.AndroidException"
@@ -92780,6 +92931,50 @@
  visibility="public"
 >
 </field>
+<field name="WIFI_SLEEP_POLICY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;wifi_sleep_policy&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_SLEEP_POLICY_DEFAULT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_SLEEP_POLICY_NEVER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="WIFI_STATIC_DNS1"
  type="java.lang.String"
  transient="false"
@@ -95143,6 +95338,17 @@
 <parameter name="events" type="int">
 </parameter>
 </method>
+<field name="ACTION_PHONE_STATE_CHANGED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.PHONE_STATE&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="CALL_STATE_IDLE"
  type="int"
  transient="false"
@@ -95264,6 +95470,58 @@
  visibility="public"
 >
 </field>
+<field name="EXTRA_INCOMING_NUMBER"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;incoming_number&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;state&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE_IDLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE_OFFHOOK"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_STATE_RINGING"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="NETWORK_TYPE_EDGE"
  type="int"
  transient="false"
@@ -98084,6 +98342,89 @@
 </exception>
 </method>
 </class>
+<class name="ProviderTestCase2"
+ extends="android.test.AndroidTestCase"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="ProviderTestCase2"
+ type="android.test.ProviderTestCase2"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="providerClass" type="java.lang.Class&lt;T&gt;">
+</parameter>
+<parameter name="providerAuthority" type="java.lang.String">
+</parameter>
+</constructor>
+<method name="getMockContentResolver"
+ return="android.test.mock.MockContentResolver"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMockContext"
+ return="android.test.IsolatedContext"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getProvider"
+ return="T"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="newResolverWithContentProviderFromSql"
+ return="android.content.ContentResolver"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="targetContext" type="android.content.Context">
+</parameter>
+<parameter name="filenamePrefix" type="java.lang.String">
+</parameter>
+<parameter name="providerClass" type="java.lang.Class&lt;T&gt;">
+</parameter>
+<parameter name="authority" type="java.lang.String">
+</parameter>
+<parameter name="databaseName" type="java.lang.String">
+</parameter>
+<parameter name="databaseVersion" type="int">
+</parameter>
+<parameter name="sql" type="java.lang.String">
+</parameter>
+<exception name="IllegalAccessException" type="java.lang.IllegalAccessException">
+</exception>
+<exception name="InstantiationException" type="java.lang.InstantiationException">
+</exception>
+</method>
+</class>
 <class name="RenamingDelegatingContext"
  extends="android.content.ContextWrapper"
  abstract="false"
@@ -119878,17 +120219,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_FORWARD"
- type="int"
- transient="false"
- volatile="false"
- value="90"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_G"
  type="int"
  transient="false"
@@ -120010,6 +120340,72 @@
  visibility="public"
 >
 </field>
+<field name="KEYCODE_MEDIA_FAST_FORWARD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="90"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_NEXT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="87"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_PLAY_PAUSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="85"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_PREVIOUS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="88"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_REWIND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="89"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_MEDIA_STOP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="86"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="KEYCODE_MENU"
  type="int"
  transient="false"
@@ -120054,17 +120450,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_NEXTSONG"
- type="int"
- transient="false"
- volatile="false"
- value="87"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_NOTIFICATION"
  type="int"
  transient="false"
@@ -120120,17 +120505,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_PLAYPAUSE"
- type="int"
- transient="false"
- volatile="false"
- value="85"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_PLUS"
  type="int"
  transient="false"
@@ -120164,17 +120538,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_PREVIOUSSONG"
- type="int"
- transient="false"
- volatile="false"
- value="88"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_Q"
  type="int"
  transient="false"
@@ -120197,17 +120560,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_REWIND"
- type="int"
- transient="false"
- volatile="false"
- value="89"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_RIGHT_BRACKET"
  type="int"
  transient="false"
@@ -120329,17 +120681,6 @@
  visibility="public"
 >
 </field>
-<field name="KEYCODE_STOP"
- type="int"
- transient="false"
- volatile="false"
- value="86"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="KEYCODE_SYM"
  type="int"
  transient="false"
@@ -127867,6 +128208,17 @@
 <parameter name="context" type="android.content.Context">
 </parameter>
 </method>
+<method name="getDoubleTapTimeout"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getEdgeSlop"
  return="int"
  abstract="false"
@@ -127955,6 +128307,17 @@
  visibility="public"
 >
 </method>
+<method name="getScaledDoubleTapSlop"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getScaledEdgeSlop"
  return="int"
  abstract="false"
@@ -128115,6 +128478,21 @@
  visibility="public"
 >
 </constructor>
+<method name="dumpCapturedView"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="tag" type="java.lang.String">
+</parameter>
+<parameter name="view" type="java.lang.Object">
+</parameter>
+</method>
 <method name="startHierarchyTracing"
  return="void"
  abstract="false"
@@ -128222,6 +128600,17 @@
 >
 </field>
 </class>
+<class name="ViewDebug.CapturedViewProperty"
+ extends="java.lang.Object"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="java.lang.annotation.Annotation">
+</implements>
+</class>
 <class name="ViewDebug.ExportedProperty"
  extends="java.lang.Object"
  abstract="true"
@@ -130415,6 +130804,19 @@
 <parameter name="listener" type="android.view.ViewTreeObserver.OnPreDrawListener">
 </parameter>
 </method>
+<method name="addOnScrollChangedListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.view.ViewTreeObserver.OnScrollChangedListener">
+</parameter>
+</method>
 <method name="addOnTouchModeChangeListener"
  return="void"
  abstract="false"
@@ -130500,6 +130902,19 @@
 <parameter name="victim" type="android.view.ViewTreeObserver.OnPreDrawListener">
 </parameter>
 </method>
+<method name="removeOnScrollChangedListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="victim" type="android.view.ViewTreeObserver.OnScrollChangedListener">
+</parameter>
+</method>
 <method name="removeOnTouchModeChangeListener"
  return="void"
  abstract="false"
@@ -130575,6 +130990,25 @@
 >
 </method>
 </interface>
+<interface name="ViewTreeObserver.OnScrollChangedListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onScrollChanged"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</interface>
 <interface name="ViewTreeObserver.OnTouchModeChangeListener"
  abstract="true"
  static="true"
@@ -140490,6 +140924,17 @@
  visibility="public"
 >
 </method>
+<method name="getOriginalUrl"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getTitle"
  return="java.lang.String"
  abstract="false"
@@ -142067,6 +142512,17 @@
 <parameter name="realm" type="java.lang.String">
 </parameter>
 </method>
+<method name="getOriginalUrl"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getPluginList"
  return="android.webkit.PluginList"
  abstract="false"
@@ -142563,6 +143019,19 @@
 <parameter name="setMap" type="boolean">
 </parameter>
 </method>
+<method name="setNetworkAvailable"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="networkUp" type="boolean">
+</parameter>
+</method>
 <method name="setPictureListener"
  return="void"
  abstract="false"
@@ -143376,6 +143845,17 @@
  visibility="public"
 >
 </method>
+<method name="getTextFilter"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getTranscriptMode"
  return="int"
  abstract="false"
@@ -145084,6 +145564,126 @@
 </parameter>
 </method>
 </interface>
+<class name="AlphabetIndexer"
+ extends="android.database.DataSetObserver"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.widget.SectionIndexer">
+</implements>
+<constructor name="AlphabetIndexer"
+ type="android.widget.AlphabetIndexer"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cursor" type="android.database.Cursor">
+</parameter>
+<parameter name="sortedColumnIndex" type="int">
+</parameter>
+<parameter name="alphabet" type="java.lang.CharSequence">
+</parameter>
+</constructor>
+<method name="compare"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="word" type="java.lang.String">
+</parameter>
+<parameter name="letter" type="java.lang.String">
+</parameter>
+</method>
+<method name="getPositionForSection"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sectionIndex" type="int">
+</parameter>
+</method>
+<method name="getSectionForPosition"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="position" type="int">
+</parameter>
+</method>
+<method name="getSections"
+ return="java.lang.Object[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setCursor"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cursor" type="android.database.Cursor">
+</parameter>
+</method>
+<field name="mAlphabet"
+ type="java.lang.CharSequence"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</field>
+<field name="mColumnIndex"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</field>
+<field name="mDataCursor"
+ type="android.database.Cursor"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</field>
+</class>
 <class name="AnalogClock"
  extends="android.view.View"
  abstract="false"
@@ -146540,19 +147140,6 @@
 <parameter name="listener" type="android.widget.Chronometer.OnChronometerTickListener">
 </parameter>
 </method>
-<method name="setStarted"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="started" type="boolean">
-</parameter>
-</method>
 <method name="start"
  return="void"
  abstract="false"
@@ -146958,6 +147545,17 @@
 <parameter name="parent" type="android.view.ViewGroup">
 </parameter>
 </method>
+<method name="onContentChanged"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</method>
 <method name="runQueryOnBackgroundThread"
  return="android.database.Cursor"
  abstract="false"
@@ -152342,6 +152940,27 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="force" type="boolean">
+</parameter>
+</method>
+<method name="update"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
 <parameter name="anchor" type="android.view.View">
 </parameter>
 <parameter name="width" type="int">
@@ -154070,6 +154689,22 @@
 <parameter name="c" type="android.database.Cursor">
 </parameter>
 </constructor>
+<constructor name="ResourceCursorAdapter"
+ type="android.widget.ResourceCursorAdapter"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="layout" type="int">
+</parameter>
+<parameter name="c" type="android.database.Cursor">
+</parameter>
+<parameter name="autoRequery" type="boolean">
+</parameter>
+</constructor>
 <method name="newView"
  return="android.view.View"
  abstract="false"
@@ -154587,6 +155222,28 @@
  visibility="public"
 >
 </method>
+<method name="getStartX"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getStartY"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isFinished"
  return="boolean"
  abstract="false"
diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java
index 021dc2e..20a579a 100644
--- a/core/java/android/app/AlertDialog.java
+++ b/core/java/android/app/AlertDialog.java
@@ -738,7 +738,10 @@
          * @return This Builder object to allow for chaining of calls to set
          *         methods
          *         
-         * @hide pending API review
+         * 
+         * This is currently hidden because it seems like people should just
+         * be able to put padding around the view.
+         * @hide
          */
         public Builder setView(View view, int viewSpacingLeft, int viewSpacingTop,
                 int viewSpacingRight, int viewSpacingBottom) {
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 429c060..e82a86c 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -508,6 +508,8 @@
  *     <li> {@link #ACTION_PACKAGE_DATA_CLEARED}
  *     <li> {@link #ACTION_UID_REMOVED}
  *     <li> {@link #ACTION_BATTERY_CHANGED}
+ *     <li> {@link #ACTION_POWER_CONNECTED}
+ *     <li> {@link #ACTION_POWER_DISCONNECTED} 
  * </ul>
  *
  * <h3>Standard Categories</h3>
@@ -1250,6 +1252,24 @@
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
     /**
+     * Broadcast Action:  External power has been connected to the device.
+     * This is intended for applications that wish to register specifically to this notification.
+     * Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
+     * stay active to receive this notification.  This action can be used to implement actions
+     * that wait until power is available to trigger.
+     */
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED";
+    /**
+     * Broadcast Action:  External power has been removed from the device.
+     * This is intended for applications that wish to register specifically to this notification.
+     * Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
+     * stay active to receive this notification.  This action can be used to implement actions
+     * that wait until power is available to trigger. 
+     */
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED";    
+    /**
      * Broadcast Action:  Indicates low memory condition on the device
      */
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
@@ -1407,7 +1427,6 @@
 
     /**
      * Broadcast Action: An input method has been changed.
-     * {@hide pending API Council approval}
      */
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_INPUT_METHOD_CHANGED =
@@ -2060,6 +2079,12 @@
      * android.intent.action.VIEW; an application's custom action would be
      * something like com.google.app.myapp.CUSTOM_ACTION.
      *
+     * <p><em>Note: scheme and host name matching in the Android framework is
+     * case-sensitive, unlike the formal RFC.  As a result,
+     * you should always ensure that you write your Uri with these elements
+     * using lower case letters, and normalize any Uris you receive from
+     * outside of Android to ensure the scheme and host is lower case.</em></p>
+     *
      * @param action The Intent action, such as ACTION_VIEW.
      * @param uri The Intent data URI.
      */
@@ -2094,6 +2119,12 @@
      * construct the Intent and then calling {@link #setClass} to set its
      * class.
      *
+     * <p><em>Note: scheme and host name matching in the Android framework is
+     * case-sensitive, unlike the formal RFC.  As a result,
+     * you should always ensure that you write your Uri with these elements
+     * using lower case letters, and normalize any Uris you receive from
+     * outside of Android to ensure the scheme and host is lower case.</em></p>
+     *
      * @param action The Intent action, such as ACTION_VIEW.
      * @param uri The Intent data URI.
      * @param packageContext A Context of the application package implementing
@@ -3143,6 +3174,12 @@
      * Set the data this intent is operating on.  This method automatically
      * clears any type that was previously set by {@link #setType}.
      *
+     * <p><em>Note: scheme and host name matching in the Android framework is
+     * case-sensitive, unlike the formal RFC.  As a result,
+     * you should always ensure that you write your Uri with these elements
+     * using lower case letters, and normalize any Uris you receive from
+     * outside of Android to ensure the scheme and host is lower case.</em></p>
+     *
      * @param data The URI of the data this intent is now targeting.
      *
      * @return Returns the same Intent object, for chaining multiple calls
@@ -3163,6 +3200,12 @@
      * only specify a type and not data, for example to indicate the type of
      * data to return.  This method automatically clears any data that was
      * previously set by {@link #setData}.
+     * 
+     * <p><em>Note: MIME type matching in the Android framework is
+     * case-sensitive, unlike formal RFC MIME types.  As a result,
+     * you should always write your MIME types with lower case letters,
+     * and any MIME types you receive from outside of Android should be
+     * converted to lower case before supplying them here.</em></p>
      *
      * @param type The MIME type of the data being handled by this intent.
      *
@@ -3185,6 +3228,13 @@
      * to override the MIME type that would ordinarily be inferred from the
      * data with your own type given here.
      *
+     * <p><em>Note: MIME type, Uri scheme, and host name matching in the
+     * Android framework is case-sensitive, unlike the formal RFC definitions.
+     * As a result, you should always write these elements with lower case letters,
+     * and normalize any MIME types or Uris you receive from
+     * outside of Android to ensure these elements are lower case before
+     * supplying them here.</em></p>
+     *
      * @param data The URI of the data this intent is now targeting.
      * @param type The MIME type of the data being handled by this intent.
      *
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index e81bc86..9b190df 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -86,18 +86,27 @@
  * type is determined by calling {@link Intent#resolveType}.  A wildcard can be
  * used for the MIME sub-type, in both the Intent and IntentFilter, so that the
  * type "audio/*" will match "audio/mpeg", "audio/aiff", "audio/*", etc.
+ * <em>Note that MIME type matching here is <b>case sensitive</b>, unlike
+ * formal RFC MIME types!</em>  You should thus always use lower case letters
+ * for your MIME types.
  *
  * <p><strong>Data Scheme</strong> matches if any of the given values match the
  * Intent data's scheme.
  * The Intent scheme is determined by calling {@link Intent#getData}
  * and {@link android.net.Uri#getScheme} on that URI.
+ * <em>Note that scheme matching here is <b>case sensitive</b>, unlike
+ * formal RFC schemes!</em>  You should thus always use lower case letters
+ * for your schemes.
  *
  * <p><strong>Data Authority</strong> matches if any of the given values match
  * the Intent's data authority <em>and</em> one of the data scheme's in the filter
  * has matched the Intent, <em>or</em> no authories were supplied in the filter.
  * The Intent authority is determined by calling
  * {@link Intent#getData} and {@link android.net.Uri#getAuthority} on that URI.
- *
+ * <em>Note that authority matching here is <b>case sensitive</b>, unlike
+ * formal RFC host names!</em>  You should thus always use lower case letters
+ * for your authority.
+ * 
  * <p><strong>Data Path</strong> matches if any of the given values match the
  * Intent's data path <em>and</em> both a scheme and authority in the filter
  * has matched against the Intent, <em>or</em> no paths were supplied in the
@@ -340,6 +349,12 @@
     /**
      * New IntentFilter that matches a single action and data type.
      *
+     * <p><em>Note: MIME type matching in the Android framework is
+     * case-sensitive, unlike formal RFC MIME types.  As a result,
+     * you should always write your MIME types with lower case letters,
+     * and any MIME types you receive from outside of Android should be
+     * converted to lower case before supplying them here.</em></p>
+     *
      * <p>Throws {@link MalformedMimeTypeException} if the given MIME type is
      * not syntactically correct.
      *
@@ -477,6 +492,12 @@
      * one of these types <em>or</em> a matching scheme.  If no data types
      * are included, then an Intent will only match if it specifies no data.
      *
+     * <p><em>Note: MIME type matching in the Android framework is
+     * case-sensitive, unlike formal RFC MIME types.  As a result,
+     * you should always write your MIME types with lower case letters,
+     * and any MIME types you receive from outside of Android should be
+     * converted to lower case before supplying them here.</em></p>
+     *
      * <p>Throws {@link MalformedMimeTypeException} if the given MIME type is
      * not syntactically correct.
      *
@@ -546,6 +567,12 @@
      * one of these schemes <em>or</em> a matching data type.  If no schemes
      * are included, then an Intent will match only if it includes no data.
      *
+     * <p><em>Note: scheme matching in the Android framework is
+     * case-sensitive, unlike formal RFC schemes.  As a result,
+     * you should always write your schemes with lower case letters,
+     * and any schemes you receive from outside of Android should be
+     * converted to lower case before supplying them here.</em></p>
+     *
      * @param scheme Name of the scheme to match, i.e. "http".
      *
      * @see #matchData
@@ -630,6 +657,16 @@
             return mPort;
         }
 
+        /**
+         * Determine whether this AuthorityEntry matches the given data Uri.
+         * <em>Note that this comparison is case-sensitive, unlike formal
+         * RFC host names.  You thus should always normalize to lower-case.</em>
+         * 
+         * @param data The Uri to match.
+         * @return Returns either {@link IntentFilter#NO_MATCH_DATA},
+         * {@link IntentFilter#MATCH_CATEGORY_PORT}, or
+         * {@link IntentFilter#MATCH_CATEGORY_HOST}.
+         */
         public int match(Uri data) {
             String host = data.getHost();
             if (host == null) {
@@ -663,6 +700,12 @@
      * included in the filter, then an Intent's data must match one of
      * them.  If no authorities are included, then only the scheme must match.
      *
+     * <p><em>Note: host name in the Android framework is
+     * case-sensitive, unlike formal RFC host names.  As a result,
+     * you should always write your host names with lower case letters,
+     * and any host names you receive from outside of Android should be
+     * converted to lower case before supplying them here.</em></p>
+     *
      * @param host The host part of the authority to match.  May start with a
      *             single '*' to wildcard the front of the host name.
      * @param port Optional port part of the authority to match.  If null, any
@@ -821,13 +864,20 @@
      * schemes/paths, the match will only succeed if the intent does not
      * also specify a type or data.
      *
-     * <p>Note that to match against an authority, you must also specify a base
+     * <p>Be aware that to match against an authority, you must also specify a base
      * scheme the authority is in.  To match against a data path, both a scheme
      * and authority must be specified.  If the filter does not specify any
      * types or schemes that it matches against, it is considered to be empty
      * (any authority or data path given is ignored, as if it were empty as
      * well).
      *
+     * <p><em>Note: MIME type, Uri scheme, and host name matching in the
+     * Android framework is case-sensitive, unlike the formal RFC definitions.
+     * As a result, you should always write these elements with lower case letters,
+     * and normalize any MIME types or Uris you receive from
+     * outside of Android to ensure these elements are lower case before
+     * supplying them here.</em></p>
+     *
      * @param type The desired data type to look for, as returned by
      *             Intent.resolveType().
      * @param scheme The desired data scheme to look for, as returned by
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 7e4b7ac..956b15a 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -35,8 +35,9 @@
     public Locale locale;
 
     /**
-     * Locale should persist on setting
-     * @hide pending API council approval
+     * Locale should persist on setting.  This is hidden because it is really
+     * questionable whether this is the right way to expose the functionality.
+     * @hide
      */
     public boolean userSetLocale;
 
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 1a963f6..e020462 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -756,7 +756,7 @@
 
     /**
      * Open a data stream for reading a raw resource.  This can only be used
-     * with resources whose value is the name of an asset files -- that is, it can be
+     * with resources whose value is the name of an asset file -- that is, it can be
      * used to open drawable, sound, and raw resources; it will fail on string
      * and color resources.
      *
@@ -766,8 +766,6 @@
      * @return InputStream Access to the resource data.
      *
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
-     *
-     * @hide Pending API council approval
      */
     public InputStream openRawResource(int id, TypedValue value) throws NotFoundException {
         getValue(id, value, true);
diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java
index 76f0860..038eedf 100644
--- a/core/java/android/database/AbstractCursor.java
+++ b/core/java/android/database/AbstractCursor.java
@@ -463,14 +463,16 @@
     }
     
     /**
-     * @hide pending API council approval
+     * This is hidden until the data set change model has been re-evaluated.
+     * @hide
      */
     protected void notifyDataSetChange() {
         mDataSetObservable.notifyChanged();
     }
     
     /**
-     * @hide pending API council approval
+     * This is hidden until the data set change model has been re-evaluated.
+     * @hide
      */
     protected DataSetObservable getDataSetObservable() {
         return mDataSetObservable;
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 2af080a..7d331dc 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -1143,7 +1143,10 @@
      * @param initialRead set the initial count of items to read from the cursor
      * @param maxRead set the count of items to read on each iteration after the first
      * @return A {@link Cursor} object, which is positioned before the first entry
-     * @hide pending API council approval
+     * 
+     * This work is incomplete and not fully tested or reviewed, so currently
+     * hidden.
+     * @hide
      */
     public Cursor rawQuery(String sql, String[] selectionArgs, 
             int initialRead, int maxRead) {
diff --git a/core/java/android/database/sqlite/SQLiteQuery.java b/core/java/android/database/sqlite/SQLiteQuery.java
index 1386a0d..cdd9f86 100644
--- a/core/java/android/database/sqlite/SQLiteQuery.java
+++ b/core/java/android/database/sqlite/SQLiteQuery.java
@@ -131,7 +131,6 @@
         }
     }
     
-    /** {@hide pending API Council approval} */
     @Override
     public String toString() {
         return "SQLiteQuery: " + mQuery;
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index 9b8b5db..65c9893 100755
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -486,19 +486,17 @@
     }
 
     /**
-     * Enables or disables proximity correction. When enabled, {@link OnKeyboardActionListener#onKey}
-     * gets called with key codes for adjacent keys. Otherwise only the primary code is returned.
+     * When enabled, calls to {@link OnKeyboardActionListener#onKey} will include key
+     * codes for adjacent keys.  When disabled, only the primary key code will be
+     * reported.
      * @param enabled whether or not the proximity correction is enabled
-     * @hide Pending API Council approval
      */
     public void setProximityCorrectionEnabled(boolean enabled) {
         mProximityCorrectOn = enabled;
     }
 
     /**
-     * Returns the enabled state of the proximity correction.
-     * @return true if proximity correction is enabled, false otherwise
-     * @hide Pending API Council approval
+     * Returns true if proximity correction is enabled.
      */
     public boolean isProximityCorrectionEnabled() {
         return mProximityCorrectOn;
diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java
index 9581893..69b3540 100644
--- a/core/java/android/os/Looper.java
+++ b/core/java/android/os/Looper.java
@@ -175,9 +175,6 @@
 
     /**
      * Return the Thread associated with this Looper.
-     * 
-     * @since CURRENT
-     * {@hide pending API Council approval}
      */
     public Thread getThread() {
         return mThread;
diff --git a/core/java/android/provider/Contacts.java b/core/java/android/provider/Contacts.java
index c2d3907..3141f1a 100644
--- a/core/java/android/provider/Contacts.java
+++ b/core/java/android/provider/Contacts.java
@@ -279,7 +279,9 @@
          * at least one E-mail or IM {@link ContactMethods} that match the
          * filter.
          * 
-         * @hide pending API council review
+         * Not exposed because we expect significant changes in the contacts
+         * schema and do not want to have to support this.
+         * @hide
          */
         public static final Uri WITH_EMAIL_OR_IM_FILTER_URI =
             Uri.parse("content://contacts/people/with_email_or_im_filter");
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index b91bc9d..b6f96c4 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -1152,19 +1152,25 @@
              * and indicates the number of songs on the album by the given
              * artist.
              * <P>Type: INTEGER</P>
-             *
-             * @hide pending API Council approval
              */
             public static final String NUMBER_OF_SONGS_FOR_ARTIST = "numsongs_by_artist";
 
             /**
-             * The year in which the earliest and latest songs
-             * on this album were released. These will often
-             * be the same, but for compilation albums they
-             * might differ.
+             * The year in which the earliest songs
+             * on this album were released. This will often
+             * be the same as {@link #LAST_YEAR}, but for compilation albums
+             * they might differ.
              * <P>Type: INTEGER</P>
              */
             public static final String FIRST_YEAR = "minyear";
+            
+            /**
+             * The year in which the latest songs
+             * on this album were released. This will often
+             * be the same as {@link #FIRST_YEAR}, but for compilation albums
+             * they might differ.
+             * <P>Type: INTEGER</P>
+             */
             public static final String LAST_YEAR = "maxyear";
 
             /**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 3fb46ed..4dd6524 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -885,8 +885,6 @@
          * Set to one of {@link #WIFI_SLEEP_POLICY_DEFAULT},
          * {@link #WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED}, or
          * {@link #WIFI_SLEEP_POLICY_NEVER}.
-         * 
-         * @hide pending API council
          */
         public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
 
@@ -894,8 +892,6 @@
          * Value for {@link #WIFI_SLEEP_POLICY} to use the default Wi-Fi sleep
          * policy, which is to sleep shortly after the turning off
          * according to the {@link #STAY_ON_WHILE_PLUGGED_IN} setting.
-         * 
-         * @hide pending API council
          */
         public static final int WIFI_SLEEP_POLICY_DEFAULT = 0;
 
@@ -903,15 +899,11 @@
          * Value for {@link #WIFI_SLEEP_POLICY} to use the default policy when
          * the device is on battery, and never go to sleep when the device is
          * plugged in.
-         * 
-         * @hide pending API council
          */
         public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1;
         
         /**
          * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep.
-         * 
-         * @hide pending API council
          */
         public static final int WIFI_SLEEP_POLICY_NEVER = 2;
         
@@ -2005,7 +1997,6 @@
 
         /**
          * A comma-separated list of SSIDs for which the Wi-Fi watchdog should be enabled.
-         * @hide pending API council
          */
         public static final String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
 
@@ -2028,16 +2019,12 @@
          * The maximum number of times we will retry a connection to an access
          * point for which we have failed in acquiring an IP address from DHCP.
          * A value of N means that we will make N+1 connection attempts in all.
-         * 
-         * @hide pending API Council approval
          */
         public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
     
         /**
          * Maximum amount of time in milliseconds to hold a wakelock while waiting for mobile
          * data connectivity to be established after a disconnect from Wi-Fi.
-         * 
-         * @hide pending API Council approval
          */
         public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS =
             "wifi_mobile_data_transition_wakelock_timeout_ms";
@@ -2045,8 +2032,6 @@
         /**
          * Whether background data usage is allowed by the user. See
          * ConnectivityManager for more info.
-         * 
-         * @hide pending API council
          */
         public static final String BACKGROUND_DATA = "background_data";
 
diff --git a/core/java/android/speech/srec/UlawEncoderInputStream.java b/core/java/android/speech/srec/UlawEncoderInputStream.java
index 132fe027..a488ead 100644
--- a/core/java/android/speech/srec/UlawEncoderInputStream.java
+++ b/core/java/android/speech/srec/UlawEncoderInputStream.java
@@ -26,8 +26,9 @@
 
 /**
  * InputStream which transforms 16 bit pcm data to ulaw data.
- *
- * @hide pending API council approval
+ * 
+ * Not yet ready to be supported, so
+ * @hide
  */
 public final class UlawEncoderInputStream extends InputStream {
     private final static String TAG = "UlawEncoderInputStream";
diff --git a/core/java/android/speech/srec/WaveHeader.java b/core/java/android/speech/srec/WaveHeader.java
index a99496d..4c3b172 100644
--- a/core/java/android/speech/srec/WaveHeader.java
+++ b/core/java/android/speech/srec/WaveHeader.java
@@ -30,7 +30,9 @@
  * <li> bitsPerSample - usually 16 for PCM, 8 for ALAW, or 8 for ULAW.
  * <li> numBytes - size of audio data after this header, in bytes.
  * </ul>
- * @hide pending API council approval
+ * 
+ * Not yet ready to be supported, so
+ * @hide
  */
 public class WaveHeader {
     
diff --git a/core/java/android/view/Gravity.java b/core/java/android/view/Gravity.java
index 36d8ce6..cf79638 100644
--- a/core/java/android/view/Gravity.java
+++ b/core/java/android/view/Gravity.java
@@ -231,7 +231,7 @@
     }
 
     /**
-     * Apply addition gravity behavior based on the overall "display" that an
+     * Apply additional gravity behavior based on the overall "display" that an
      * object exists in.  This can be used after
      * {@link #apply(int, int, int, Rect, int, int, Rect)} to place the object
      * within a visible display.  By default this moves or clips the object
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 41779ba..6349288 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -111,14 +111,13 @@
     public static final int KEYCODE_MENU            = 82;
     public static final int KEYCODE_NOTIFICATION    = 83;
     public static final int KEYCODE_SEARCH          = 84;
-    public static final int KEYCODE_PLAYPAUSE       = 85;
-    public static final int KEYCODE_STOP            = 86;
-    public static final int KEYCODE_NEXTSONG        = 87;
-    public static final int KEYCODE_PREVIOUSSONG    = 88;
-    public static final int KEYCODE_REWIND          = 89;
-    public static final int KEYCODE_FORWARD         = 90;
+    public static final int KEYCODE_MEDIA_PLAY_PAUSE= 85;
+    public static final int KEYCODE_MEDIA_STOP      = 86;
+    public static final int KEYCODE_MEDIA_NEXT      = 87;
+    public static final int KEYCODE_MEDIA_PREVIOUS  = 88;
+    public static final int KEYCODE_MEDIA_REWIND    = 89;
+    public static final int KEYCODE_MEDIA_FAST_FORWARD = 90;
     public static final int KEYCODE_MUTE            = 91;
-    private static final int LAST_KEYCODE           = KEYCODE_MUTE;
 
     // NOTE: If you add a new keycode here you must also add it to:
     //  isSystem()
@@ -127,7 +126,15 @@
     //  frameworks/base/core/res/res/values/attrs.xml
     //  commands/monkey/Monkey.java
     //  emulator?
+    //
+    //  Also Android currently does not reserve code ranges for vendor-
+    //  specific key codes.  If you have new key codes to have, you
+    //  MUST contribute a patch to the open source project to define
+    //  those new codes.  This is intended to maintain a consistent
+    //  set of key code definitions across all Android devices.
    
+    private static final int LAST_KEYCODE           = KEYCODE_MUTE;
+    
     /**
      * @deprecated There are now more than MAX_KEYCODE keycodes.
      * Use {@link #getMaxKeyCode()} instead.
@@ -582,12 +589,12 @@
         case KEYCODE_MUTE:
         case KEYCODE_POWER:
         case KEYCODE_HEADSETHOOK:
-        case KEYCODE_PLAYPAUSE:
-        case KEYCODE_STOP:
-        case KEYCODE_NEXTSONG:
-        case KEYCODE_PREVIOUSSONG:
-        case KEYCODE_REWIND:
-        case KEYCODE_FORWARD:
+        case KEYCODE_MEDIA_PLAY_PAUSE:
+        case KEYCODE_MEDIA_STOP:
+        case KEYCODE_MEDIA_NEXT:
+        case KEYCODE_MEDIA_PREVIOUS:
+        case KEYCODE_MEDIA_REWIND:
+        case KEYCODE_MEDIA_FAST_FORWARD:
         case KEYCODE_CAMERA:
         case KEYCODE_FOCUS:
         case KEYCODE_SEARCH:
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index b26be66..ec1c733 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -7462,7 +7462,9 @@
     }
 
     /**
-     * Provide haptic feedback to the user for this view.
+     * BZZZTT!!1!
+     * 
+     * <p>Provide haptic feedback to the user for this view.
      *
      * <p>The framework will provide haptic feedback for some built in actions,
      * such as long presses, but you may wish to provide feedback for your
@@ -7479,7 +7481,9 @@
     }
 
     /**
-     * Like {@link #performHapticFeedback(int)}, with additional options.
+     * BZZZTT!!1!
+     * 
+     * <p>Like {@link #performHapticFeedback(int)}, with additional options.
      *
      * @param feedbackConstant One of the constants defined in
      * {@link HapticFeedbackConstants}
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index d3f48c6..8e1524b 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -267,7 +267,6 @@
      * @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
      */
     public static int getDoubleTapTimeout() {
         return DOUBLE_TAP_TIMEOUT;
@@ -324,7 +323,6 @@
     /**
      * @return Distance between the first touch and second touch to still be
      *         considered a double tap
-     * @hide pending API council
      */
     public int getScaledDoubleTapSlop() {
         return mDoubleTapSlop;
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java
index c1e9ed8..367c9a2 100644
--- a/core/java/android/view/ViewDebug.java
+++ b/core/java/android/view/ViewDebug.java
@@ -186,9 +186,7 @@
     /**
      * This annotation can be used to mark fields and methods to be dumped when
      * the view is captured. Methods with this annotation must have no arguments
-     * and must return <some type of data>.
-     * 
-     * @hide pending API Council approval
+     * and must return a valid type of data.
      */
     @Target({ ElementType.FIELD, ElementType.METHOD })
     @Retention(RetentionPolicy.RUNTIME)
@@ -1345,13 +1343,11 @@
     }
     
     /**
-     * dump view info for id based instrument test generation 
+     * Dump view info for id based instrument test generation 
      * (and possibly further data analysis). The results are dumped
      * to the log. 
      * @param tag for log
      * @param view for dump
-     * 
-     * @hide pending API Council approval
      */
     public static void dumpCapturedView(String tag, Object view) {        
         Class<?> klass = view.getClass();
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java
index 4230afa..26e5cbc 100644
--- a/core/java/android/view/ViewTreeObserver.java
+++ b/core/java/android/view/ViewTreeObserver.java
@@ -102,8 +102,6 @@
     /**
      * Interface definition for a callback to be invoked when
      * something in the view tree has been scrolled.
-     * 
-     * @hide pending API council approval
      */
     public interface OnScrollChangedListener {
         /**
@@ -115,7 +113,9 @@
 
     /**
      * Parameters used with OnComputeInternalInsetsListener.
-     * {@hide pending API Council approval}
+     * 
+     * We are not yet ready to commit to this API and support it, so
+     * @hide
      */
     public final static class InternalInsetsInfo {
         /**
@@ -200,7 +200,9 @@
     /**
      * Interface definition for a callback to be invoked when layout has
      * completed and the client can compute its interior insets.
-     * {@hide pending API Council approval}
+     * 
+     * We are not yet ready to commit to this API and support it, so
+     * @hide
      */
     public interface OnComputeInternalInsetsListener {
         /**
@@ -381,8 +383,6 @@
      * @param listener The callback to add
      *
      * @throws IllegalStateException If {@link #isAlive()} returns false
-     *
-     * @hide pending API council approval
      */
     public void addOnScrollChangedListener(OnScrollChangedListener listener) {
         checkIsAlive();
@@ -402,8 +402,6 @@
      * @throws IllegalStateException If {@link #isAlive()} returns false
      *
      * @see #addOnScrollChangedListener(OnScrollChangedListener)
-     *
-     * @hide pending API council approval
      */
     public void removeOnScrollChangedListener(OnScrollChangedListener victim) {
         checkIsAlive();
@@ -454,7 +452,9 @@
      * @param listener The callback to add
      *
      * @throws IllegalStateException If {@link #isAlive()} returns false
-     * {@hide pending API Council approval}
+     * 
+     * We are not yet ready to commit to this API and support it, so
+     * @hide
      */
     public void addOnComputeInternalInsetsListener(OnComputeInternalInsetsListener listener) {
         checkIsAlive();
@@ -475,7 +475,9 @@
      * @throws IllegalStateException If {@link #isAlive()} returns false
      *
      * @see #addOnComputeInternalInsetsListener(OnComputeInternalInsetsListener)
-     * {@hide pending API Council approval}
+     * 
+     * We are not yet ready to commit to this API and support it, so
+     * @hide
      */
     public void removeOnComputeInternalInsetsListener(OnComputeInternalInsetsListener victim) {
         checkIsAlive();
diff --git a/core/java/android/webkit/WebHistoryItem.java b/core/java/android/webkit/WebHistoryItem.java
index a408e06..fd26b98 100644
--- a/core/java/android/webkit/WebHistoryItem.java
+++ b/core/java/android/webkit/WebHistoryItem.java
@@ -101,8 +101,6 @@
      * url, the final url may be different as there might have been 
      * redirects while loading the site.
      * @return The original url of this history item.
-     * 
-     * @hide pending API Council approval
      */
     public String getOriginalUrl() {
         return mOriginalUrl;
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 1822ba4..a5846ed 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -909,8 +909,6 @@
      * the javascript property window.navigator.isOnline and
      * generates the online/offline event as specified in HTML5, sec. 5.7.7
      * @param networkUp boolean indicating if network is available
-     * 
-     * @hide pending API Council approval
      */
     public void setNetworkAvailable(boolean networkUp) {
         mWebViewCore.sendMessage(EventHub.SET_NETWORK_STATE,
@@ -1776,8 +1774,6 @@
      * Also, there may have been redirects resulting in a different url to that
      * originally requested.
      * @return The url that was originally requested for the current page.
-     * 
-     * @hide pending API Council approval
      */
     public String getOriginalUrl() {
         WebHistoryItem h = mCallbackProxy.getBackForwardList().getCurrentItem();
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 0563687..772ad89 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -944,7 +944,6 @@
     /**
      * 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) {
diff --git a/core/java/android/widget/AlphabetIndexer.java b/core/java/android/widget/AlphabetIndexer.java
index bbabaaa..4e466a0 100644
--- a/core/java/android/widget/AlphabetIndexer.java
+++ b/core/java/android/widget/AlphabetIndexer.java
@@ -30,7 +30,6 @@
  * Your adapter is responsible for updating the cursor by calling {@link #setCursor} if the
  * cursor changes. {@link #getPositionForSection} method does the binary search for the starting 
  * index of a given section (alphabet).
- * @hide pending API council approval
  */
 public class AlphabetIndexer extends DataSetObserver implements SectionIndexer {
 
diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java
index 91add58..7e66722 100644
--- a/core/java/android/widget/Chronometer.java
+++ b/core/java/android/widget/Chronometer.java
@@ -199,6 +199,7 @@
 
     /**
      * The same as calling {@link #start} or {@link #stop}.
+     * @hide pending API council approval
      */
     @android.view.RemotableViewMethod
     public void setStarted(boolean started) {
diff --git a/core/java/android/widget/CursorAdapter.java b/core/java/android/widget/CursorAdapter.java
index da90a9f4..baa6833 100644
--- a/core/java/android/widget/CursorAdapter.java
+++ b/core/java/android/widget/CursorAdapter.java
@@ -354,7 +354,6 @@
      * sub classes.
      * 
      * @see ContentObserver#onChange(boolean)
-     * @hide pending API Council approval
      */
     protected void onContentChanged() {
         if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index a2ec83f..b162a0e 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -388,12 +388,12 @@
         int keyCode = event.getKeyCode();
         if (event.getRepeatCount() == 0 && event.isDown() && (
                 keyCode ==  KeyEvent.KEYCODE_HEADSETHOOK ||
-                keyCode ==  KeyEvent.KEYCODE_PLAYPAUSE ||
+                keyCode ==  KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE ||
                 keyCode ==  KeyEvent.KEYCODE_SPACE)) {
             doPauseResume();
             show(sDefaultTimeout);
             return true;
-        } else if (keyCode ==  KeyEvent.KEYCODE_STOP) {
+        } else if (keyCode ==  KeyEvent.KEYCODE_MEDIA_STOP) {
             if (mPlayer.isPlaying()) {
                 mPlayer.pause();
                 updatePausePlay();
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index f864690..2c9714e 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -1062,8 +1062,6 @@
      * @param height the new height, can be -1 to ignore
      * @param force reposition the window even if the specified position
      *              already seems to correspond to the LayoutParams
-     * 
-     * @hide pending API council approval
      */
     public void update(int x, int y, int width, int height, boolean force) {
         if (width != -1) {
diff --git a/core/java/android/widget/ResourceCursorAdapter.java b/core/java/android/widget/ResourceCursorAdapter.java
index a5dbd98..c9c217a 100644
--- a/core/java/android/widget/ResourceCursorAdapter.java
+++ b/core/java/android/widget/ResourceCursorAdapter.java
@@ -61,7 +61,6 @@
      * @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);
diff --git a/core/java/android/widget/Scroller.java b/core/java/android/widget/Scroller.java
index febc956..c9ace0a 100644
--- a/core/java/android/widget/Scroller.java
+++ b/core/java/android/widget/Scroller.java
@@ -135,7 +135,6 @@
      * Returns the start X offset in the scroll. 
      * 
      * @return The start X offset as an absolute distance from the origin.
-     * @hide pending API council
      */
     public final int getStartX() {
         return mStartX;
@@ -145,7 +144,6 @@
      * Returns the start Y offset in the scroll. 
      * 
      * @return The start Y offset as an absolute distance from the origin.
-     * @hide pending API council
      */
     public final int getStartY() {
         return mStartY;
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index 4c5df2f..6d3a2d3 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -460,7 +460,7 @@
                 mMediaPlayer != null &&
                 mMediaController != null) {
             if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK ||
-                    keyCode == KeyEvent.KEYCODE_PLAYPAUSE) {
+                    keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) {
                 if (mMediaPlayer.isPlaying()) {
                     pause();
                     mMediaController.show();
@@ -469,7 +469,7 @@
                     mMediaController.hide();
                 }
                 return true;
-            } else if (keyCode == KeyEvent.KEYCODE_STOP 
+            } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP 
                     && mMediaPlayer.isPlaying()) {
                 pause();
                 mMediaController.show();
diff --git a/core/jni/android_net_wifi_Wifi.cpp b/core/jni/android_net_wifi_Wifi.cpp
index fcab813..25670df 100644
--- a/core/jni/android_net_wifi_Wifi.cpp
+++ b/core/jni/android_net_wifi_Wifi.cpp
@@ -291,6 +291,7 @@
 {
     return doBooleanCommand("DRIVER RXFILTER-ADD 0", "OK")
 	&& doBooleanCommand("DRIVER RXFILTER-ADD 1", "OK")
+	&& doBooleanCommand("DRIVER RXFILTER-ADD 3", "OK")
 	&& doBooleanCommand("DRIVER RXFILTER-START", "OK");
 }
 
@@ -298,6 +299,7 @@
 {
     jboolean result = doBooleanCommand("DRIVER RXFILTER-STOP", "OK");
     if (result) {
+	(void)doBooleanCommand("DRIVER RXFILTER-REMOVE 3", "OK");
 	(void)doBooleanCommand("DRIVER RXFILTER-REMOVE 1", "OK");
 	(void)doBooleanCommand("DRIVER RXFILTER-REMOVE 0", "OK");
     }
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 3a70d9a..9f6ebed 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -203,12 +203,14 @@
     <!-- Allows an application to create mock location providers for testing -->
     <permission android:name="android.permission.ACCESS_MOCK_LOCATION"
         android:permissionGroup="android.permission-group.LOCATION"
+        android:protectionLevel="dangerous"
         android:label="@string/permlab_accessMockLocation"
         android:description="@string/permdesc_accessMockLocation" />
 
     <!-- Allows an application to access extra location provider commands -->
     <permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
         android:permissionGroup="android.permission-group.LOCATION"
+        android:protectionLevel="normal"
         android:label="@string/permlab_accessLocationExtraCommands"
         android:description="@string/permdesc_accessLocationExtraCommands" />
 
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index ff99e59..a9f267a 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -576,7 +576,7 @@
     <string name="Noon">"Mediodía"</string>
     <string name="midnight">"medianoche"</string>
     <string name="Midnight">"Medianoche"</string>
-    <string name="month_day">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>"</string>
+    <string name="month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>"</string>
     <!-- no translation found for month (7026169712234774086) -->
     <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>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 7273dd8..c664d1a 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -576,7 +576,7 @@
     <string name="Noon">"Midi"</string>
     <string name="midnight">"minuit"</string>
     <string name="Midnight">"Minuit"</string>
-    <string name="month_day">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>"</string>
+    <string name="month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>"</string>
     <!-- no translation found for month (7026169712234774086) -->
     <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>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index a82ad38..f80a4f4 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -576,7 +576,7 @@
     <string name="Noon">"Mezzogiorno"</string>
     <string name="midnight">"mezzanotte"</string>
     <string name="Midnight">"Mezzanotte"</string>
-    <string name="month_day">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>"</string>
+    <string name="month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>"</string>
     <!-- no translation found for month (7026169712234774086) -->
     <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>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 888873d..8da040e 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -43,7 +43,7 @@
     <string name="needPuk2">"SIMカードのロック解除のためPUK2を入力します。"</string>
     <string name="ClipMmi">"着信時の発信者番号"</string>
     <string name="ClirMmi">"発信者番号"</string>
-    <string name="CfMmi">"電話の転送"</string>
+    <string name="CfMmi">"着信転送"</string>
     <string name="CwMmi">"通話中着信"</string>
     <string name="BaMmi">"発信制限"</string>
     <string name="PwdMmi">"パスワードの変更"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 0647d11..50d245b 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -576,10 +576,10 @@
     <string name="Noon">"Południe"</string>
     <string name="midnight">"północ"</string>
     <string name="Midnight">"Północ"</string>
-    <string name="month_day">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>"</string>
+    <string name="month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>"</string>
     <!-- no translation found for month (7026169712234774086) -->
     <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>
+    <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>
     <string name="month_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
     <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>
@@ -607,7 +607,7 @@
     <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_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>
+    <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>
     <string name="abbrev_month_year">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
     <string name="abbrev_month_day">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="DAY">%-d</xliff:g>"</string>
     <!-- no translation found for abbrev_month (3131032032850777433) -->
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index e27227a..f90929a 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -850,12 +850,12 @@
         <enum name="KEYCODE_MENU" value="82" />
         <enum name="KEYCODE_NOTIFICATION" value="83" />
         <enum name="KEYCODE_SEARCH" value="84" />
-        <enum name="KEYCODE_PLAYPAUSE" value="85" />
-        <enum name="KEYCODE_STOP" value="86" />
-        <enum name="KEYCODE_NEXTSONG" value="87" />
-        <enum name="KEYCODE_PREVIOUSSONG" value="88" />
-        <enum name="KEYCODE_REWIND" value="89" />
-        <enum name="KEYCODE_FORWARD" value="90" />
+        <enum name="KEYCODE_MEDIA_PLAY_PAUSE" value="85" />
+        <enum name="KEYCODE_MEDIA_STOP" value="86" />
+        <enum name="KEYCODE_MEDIA_NEXT" value="87" />
+        <enum name="KEYCODE_MEDIA_PREVIOUS" value="88" />
+        <enum name="KEYCODE_MEDIA_REWIND" value="89" />
+        <enum name="KEYCODE_MEDIA_FAST_FORWARD" value="90" />
         <enum name="KEYCODE_MUTE" value="91" />
     </attr>
 
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 2ff0962..093ddd3 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1062,15 +1062,24 @@
     <declare-styleable name="AndroidManifestData" parent="AndroidManifestIntentFilter">
         <!-- Specify a MIME type that is handled, as per
              {@link android.content.IntentFilter#addDataType
-             IntentFilter.addDataType()}. -->
+             IntentFilter.addDataType()}.
+             <p><em>Note: MIME type matching in the Android framework is
+             case-sensitive, unlike formal RFC MIME types.  As a result,
+             MIME types here should always use lower case letters.</em></p> -->
         <attr name="mimeType" format="string" />
         <!-- Specify a URI scheme that is handled, as per
              {@link android.content.IntentFilter#addDataScheme
-             IntentFilter.addDataScheme()}. -->
+             IntentFilter.addDataScheme()}.
+             <p><em>Note: scheme matching in the Android framework is
+             case-sensitive, unlike the formal RFC.  As a result,
+             schemes here should always use lower case letters.</em></p> -->
         <attr name="scheme" format="string" />
         <!-- Specify a URI authority host that is handled, as per
              {@link android.content.IntentFilter#addDataAuthority
-             IntentFilter.addDataAuthority()}. -->
+             IntentFilter.addDataAuthority()}.
+             <p><em>Note: host name matching in the Android framework is
+             case-sensitive, unlike the formal RFC.  As a result,
+             host names here should always use lower case letters.</em></p> -->
         <attr name="host" format="string" />
         <!-- Specify a URI authority port that is handled, as per
              {@link android.content.IntentFilter#addDataAuthority
@@ -1140,10 +1149,17 @@
             {@link android.content.Intent#setAction Intent.setAction()}. -->
         <attr name="action" format="string" />
         <!-- The data URI to assign to the Intent, as per
-            {@link android.content.Intent#setData Intent.setData()}. -->
+            {@link android.content.Intent#setData Intent.setData()}.
+            <p><em>Note: scheme and host name matching in the Android framework is
+            case-sensitive, unlike the formal RFC.  As a result,
+            Uris here should always be normalized to use lower case letters
+            for these elements (as well as other proper Uri normalization).</em></p> -->
         <attr name="data" format="string" />
         <!-- The MIME type name to assign to the Intent, as per
-            {@link android.content.Intent#setType Intent.setType()}. -->
+            {@link android.content.Intent#setType Intent.setType()}.
+            <p><em>Note: MIME type matching in the Android framework is
+            case-sensitive, unlike formal RFC MIME types.  As a result,
+            MIME types here should always use lower case letters.</em></p> -->
         <attr name="mimeType" />
         <!-- The package part of the ComponentName to assign to the Intent, as per
             {@link android.content.Intent#setComponent Intent.setComponent()}. -->
diff --git a/docs/html/sdk/1.5_r1/index.jd b/docs/html/sdk/1.5_r1/index.jd
index 345489a..412887a 100644
--- a/docs/html/sdk/1.5_r1/index.jd
+++ b/docs/html/sdk/1.5_r1/index.jd
@@ -1,21 +1,20 @@
-page.title=Android 1.5 SDK, Release 1
-
-sdk.version=1.5_r1
+sdk.version=1.5
+sdk.rel.id=1
 sdk.date=April 2009
 
-sdk.win_download=android-sdk-windows-1.5_r1.zip
+sdk.win_download=
 sdk.win_bytes=
 sdk.win_checksum=
 
-sdk.mac_download=android-sdk-mac_x86-1.5_r1.zip
+sdk.mac_download=
 sdk.mac_bytes=
 sdk.mac_checksum=
 
-sdk.linux_download=android-sdk-linux_x86-1.5_r1.zip
+sdk.linux_download=
 sdk.linux_bytes=
 sdk.linux_checksum=
 
-
+page.title=Download Android SDK
 @jd:body
 
 <h2>SDK Contents</h2>
@@ -25,7 +24,7 @@
 <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  
 <a href="{@docRoot}guide/developing/tools/index.html">Dev Guide</a> and access them in the <code>&lt;sdk&gt;/tools/</code> directory. 
 
-<p>The tools package included in this SDK is the same as that included in the Android 1.0, Release 2 SDK. </p>
+<p>The tools package included in this SDK includes many updates from that provided in the previous SDK and requires you to migrate your applications to the new development environment. For details, see the <a href="upgrading">Upgrading the SDK</a> document.</p>
 
 <h4 id="system_images">System Images</h4>
 
@@ -40,17 +39,23 @@
 <td width="5%"><nobr>Android 1.5</nobr></td>
 <td  width="5%">3</td>
 <td  width="5%"><nobr><a href="{@docRoot}sdk/android-1.5.html">Version Notes</a></nobr></td>
-<td>Includes com.google.android.maps external library and a set of standard development applications. </td>
+<td>Includes a set of standard development applications. </td>
+</tr>
+<tr>
+<td width="5%"><nobr>Android 1.1</nobr></td>
+<td  width="5%">2</td>
+<td  width="5%"><nobr><a href="{@docRoot}sdk/android-1.1.html">Version Notes</a></nobr></td>
+<td>Includes 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 <a href="{@docRoot}guide/samples/index.html">Dev Guide</a> and access the sample code itself
-in the <code>&lt;sdk&gt;/samples/</code> directory of the SDK package.</p>
+in the <code>&lt;sdk&gt;/platforms/android-1.5/samples/</code> directory of the SDK package. Note the new location &mdash; the SDK now includes multiple platform versions that you can develop against and each has its own sample code directory. </p>
 
+<!-- 
 <h4>Documentation</h4>
 
 <p>The SDK package includes a full set of local documentation. 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>
@@ -58,5 +63,5 @@
 <p>The most current documentation is always available on the Android Developers site:</p>
 
 <p style="margin-left:2em;"><a href="http://developer.android.com/index.html">http://developer.android.com/</a></p>
-
+-->
 
diff --git a/docs/html/sdk/1.5_r1/installing.jd b/docs/html/sdk/1.5_r1/installing.jd
index df9ec3a..a1f7cff 100644
--- a/docs/html/sdk/1.5_r1/installing.jd
+++ b/docs/html/sdk/1.5_r1/installing.jd
@@ -1,312 +1,10 @@
-page.title=Installing the Android SDK
-sdk.version=1.5_r1
+sdk.version=1.5
+sdk.rel.id=1
+sdk.date=April 2009
 
+page.title=Installing the Android SDK
 @jd:body
 
-
-<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.5_r1/index.html">Download</a> 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.5_r1/upgrading.html"><strong>Upgrading the
-SDK</strong></a></b> document instead.
-</p>
-
-
-<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.5_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>
-	
-	<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>
-
-        <p>Optionally, you can add the path to the SDK <code>tools</code> directory to your path. As mentioned above, the <code>tools/</code> directory is located in the SDK directory. </p>
-     <ul>
-          <li>On Linux, edit your ~/.bash_profile or ~/.bashrc file. Look
-          for a line that sets the PATH environment variable and add the
-          full path to the <code>tools/</code> directory to it. If you don't 
-          see a line setting the path, you can add one:</li>
-
-          <ul><code>export PATH=${PATH}:<em>&lt;your_sdk_dir&gt;</em>/tools</code></ul>
-
-          <li>On a Mac, look in your home directory for .bash_profile and
-          proceed as for Linux. You can create the .bash_profile, if 
-          you haven't already set one up on your machine. </li>
-
-          <li>On Windows, right click on My Computer, and select Properties.  
-        Under the Advanced tab, hit the Environment Variables button, and in the
-        dialog that comes up, double-click on Path under System Variables. Add  the full path to the <code>tools/</code> directory to the path. </li>
-        </ul>
-
-        <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>
-
-
-<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 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>
-
-
-<h2 id="installingplugin">Installing the ADT Plugin for Eclipse</h2>
-
-<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>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>
-<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>
-    <li>Select <strong>Android</strong> from the left panel. </li>
-    <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! 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>
-<p> 
-If you are having trouble downloading the ADT plugin after following the steps above, here are some suggestions: </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>
-
-
-<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
-development machine, you might find these resources helpful: 
-        <ul>
-           <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/Java </a></li>
-           <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/JavaInstallation </a></li>
-       </ul>
-   </li>
-<li>Here are the steps to install Java and Eclipse, prior to installing
-the Android SDK and ADT Plugin.
-<ol>
-    <li>If you are running a 64-bit distribution on your development
-machine, you need to install the <code>ia32-libs</code> package using
-<code>apt-get:</code>:
-        <pre>apt-get install ia32-libs</pre></li>
-    <li>Next, install Java:
-        <pre>apt-get install sun-java6-bin</pre></li>
-    <li>The Ubuntu package manager does not currently offer an Eclipse 3.3
-    version for download, so we recommend that you download Eclipse from
-eclipse.org (<a
-href="http://www.eclipse.org/downloads/">http://www.eclipse.org/
-downloads/</a>). A Java or RCP version of Eclipse is recommended.</li>
-<li>Follow the steps given in previous sections to install the SDK 
-and the ADT plugin. </li>
-</ol>
-</ul>
-<h4>Other Linux Notes</h4>
-<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
-in the <a href="{@docRoot}sdk/1.5_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>
+<p>See the <a href="{@docRoot}sdk/preview/index.html">Download page</a> for more information.</p>
 
 
diff --git a/docs/html/sdk/1.5_r1/requirements.jd b/docs/html/sdk/1.5_r1/requirements.jd
index 3f0deca..c3ee8f7 100644
--- a/docs/html/sdk/1.5_r1/requirements.jd
+++ b/docs/html/sdk/1.5_r1/requirements.jd
@@ -1,11 +1,7 @@
 page.title=System Requirements
-
-sdk.version=1.5_r1
-sdk.date=April 2009
-
 @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.5 SDK, Release 1. </p>
+<p>The sections below describe the system and software requirements for developing Android applications using the Android SDK tools included in Android <?cs var:sdk.version ?> SDK, Release <?cs var:sdk.rel.id ?>. </p>
 
 <h3>Supported Operating Systems</h3>
 <ul>
diff --git a/docs/html/sdk/1.5_r1/upgrading.jd b/docs/html/sdk/1.5_r1/upgrading.jd
index 63b7a3c..5323131 100644
--- a/docs/html/sdk/1.5_r1/upgrading.jd
+++ b/docs/html/sdk/1.5_r1/upgrading.jd
@@ -30,17 +30,42 @@
 </div>
 -->
 
-<p>This document describes how to move your development environment and existing
-Android applications from an Android 1.0 SDK to the Android 1.5, Release 1 SDK.
+
+    <div id="qv-wrapper">
+    <div id="qv">
+
+<h2>Upgrading quickview</h2>
+<ul>
+<li>The Android 1.5 SDK uses a new project structure and a new ADT plugin (ADT 0.9). </li>
+<li>To move existing projects into the SDK, you must make some minor changes in your development environment.</li>
+<li>The new ADT plugin (ADT 0.9) <em>is not compatible</em> with projects created in previous SDKs.</li>
+<li>You need to uninstall your existing ADT plugin, before installing ADT 0.9.</li>
+
+</ul>
+
+<!--<h2>Related Information</h2>
+<ol>
+<li><a href="{@docRoot}sdk/api_diff/3/changes.html">Android 1.5 API Differences</a></li>
+</ol>
+-->
+</div>
+</div>
+
+<p>See the <a href="{@docRoot}sdk/preview/index.html">Download page</a> for more information.</p>
+
+<!-- <p>This document describes how to move your development environment and existing
+Android applications from an Android 1.1 or 1.0 SDK to the Android 1.5 SDK.
 If you are migrating applications from an earlier SDK, please read the upgrading
 document available in the Android 1.0 SDK package.
 </p>
 
-<p>To ensure that your applications are compliant with the Android 1.5 system available 
+<p>To ensure that your existing applications run properly with the Android 1.5 system available 
 on mobile devices, you need to install the Android 1.5 SDK and port your existing Android 
 applications to it. The sections below will guide you through the process.</p>
 
-<h2 id="install-new">Installing the Latest SDK</h2>
+</ul>
+
+<h2 id="install-new">Installing the SDK</h2>
 
 <p><a href="{@docRoot}sdk/1.5_r1/index.html">Download the SDK</a> and unpack it into a safe location.</p>
 
@@ -133,9 +158,9 @@
 <p>One way to start is to open your project in Eclipse and see where the ADT
 identifies errors in your application. You can also look up
 specific changes in the Android APIs in the 
-<!-- <a href="{@docRoot}sdk/android-1.5.html#api-changes"> -->
+android-1.5.html#api-changes 
 Android 1.5 Version Notes
-<!-- </a> -->
+
 document.</p>
 
 <p>If you have additional trouble updating your code, visit the 
@@ -148,4 +173,4 @@
 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>
-
+-->
\ No newline at end of file
diff --git a/docs/html/sdk/android-1.5.jd b/docs/html/sdk/android-1.5.jd
index 55fc4ba..fff911e 100644
--- a/docs/html/sdk/android-1.5.jd
+++ b/docs/html/sdk/android-1.5.jd
@@ -8,238 +8,7 @@
 <em>API Level:</em>&nbsp;<strong>3</strong></p>
 
 
-<p>This document provides version notes for the Android 1.5 system image included in the SDK. </p>
-
-<ul>
-<li><a href="#overview">Overview</a>
-<li><a href="#overview">External Libraries</a>
-<li><a href="#comp">Device Compatibility</a>
-<li><a href="#apps">Built-in Applications</a>
-<li><a href="#locs">UI Localizations</a>
-<li><a href="#resolved-issues">Resolved Issues</a>
-<li><a href="#features">New Features</a>
-<li><a href="#api-changes">API Changes</a>
-</ul>
-
-<h2 id="overview">Overview</h2>
-
-<p>The Android 1.5 system image delivered in the SDK is the development
-counterpart to the Android 1.5 production system image, deployable to
-Android-powered handsets starting in February 2009. </p>
-
-<p>The Android 1.5 system image delivers an updated version of the framework
-API. As with previous versions, the Android 1.5 API 
-is assigned an integer identifier &mdash; <strong>3</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application.</p>
-
-<p>Applications can reference a specific API Level value in their
-manifest files, to indicate the minimum version of the Android system
-required to run the application. To reference a minimum API Level, applications 
-can add a <code>minSdkVersion</code> attribute in their manifest files.
-The value of the attribute is an integer corresponding to an API Level 
-identifier. Prior to installing an application, the system then checks the value of 
-<code>minSdkVersion</code> and allows the install only
-if the referenced integer is less than or equal to the API Level integer stored
-in the system itself. </p>
-
-<p>If you use the Android 1.5 system image to build an application
-compatible with Android-powered devices running the Android 1.5
-platform, please note that you <strong><span
-style="color:red;">must</span></strong> set the the
-<code>android:minSdkVersion</code> attribute in the application's
-manifest to "3", which is the API strictly associated with Android 1.5.
-</p>
-
-<p>Specifically, you define the <code>android:minSdkVersion</code>
-attribute in a <code>&lt;uses-sdk&gt;</code> element as a child of
-<code>&lt;manifest&gt;</code> in the manifest file. When set, the
-attribute looks like this: </p>
-
-<pre>&lt;manifest&gt;
-  ...
-  &lt;uses-sdk minSdkVersion="3" /&gt;
-  ...
-&lt;/manifest&gt;</pre>
-
-<p>By setting <code>android:minSdkVersion</code> in this way, you ensure
-that users will only be able to install your application if their
-devices are running the Android 1.5 platform. In turn, this ensures that
-your application will function properly on their devices, especially if
-it uses <a href="#apichange">APIs introduced in Android 1.5</a>. </p>
-
-<p>If your application uses APIs introduced in Android 1.5 but does not
-declare <code>&lt;uses-sdk minSdkVersion="3" /&gt;</code>, then it will
-run properly on Android 1.5 devices but <em>not</em> on Android 1.0
-devices. In the latter case, the application will crash at runtime when
-it tries to use the Android 1.5 APIs.</p>
-
-<p>If your application does not use any new APIs introduced in Android
-1.5, you can indicate general Android 1.0 compatibility by removing
-<code>minSdkVersion</code> or setting the attribute to "1". However,
-before publishing your application, you must make sure to compile your
-application against the Android 1.0 system image (available in the
-Android SDK), to ensure that it builds and functions properly for
-Android 1.0 devices. You should test the application against system
-images corresponding to the API Levels that the application is designed
-to be compatible with.</p>
-
-<p>If you are sure your application is not using Android 1.5 APIs and
-has no need to use them, you might find it easier to keep working in the
-Android 1.1 SDK, rather than migrating to the Android 1.5 SDK and having
-to do additional testing. </p>
-
-
-<h2 id="extlibs">External Libraries</h2>
-
-<p>The system image includes these external libraries, which you can
-access from your application by adding a <a
-href="{@docRoot}guide/topics/manifest/uses-library-element.html">
-&lt;uses-library&gt;</a>.</p>
-	<ul>
-	<li>com.google.android.maps &mdash; gives your
-application access to Google Maps data. Note that, to use Google Maps
-data, a Maps API Key is required.</li>
-	</ul>
-
-<h2 id="comp">Device Compatibility</h2>
-
-<p>The Android 1.5 system image was tested for compatability with the
-Android-powered devices listed below:</p>
-	<ul>
-	<li><a href="http://www.t-mobileg1.com">T-Mobile G1</a></li>
-	</ul>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image includes these built-in applications:</p>
-	<ul>
-	<li>Alarm Clock</li>
-	<li>API Demos</li>
-	<li>Browser</li>
-	<li>Calculator</li>
-	<li>Camera</li>
-	<li>Contacts</li>
-	<li>Dev Tools</li>
-	<li>Dialer</li>
-	<li>Email</li>
-	<li>Maps (and StreetView)</li>
-	<li>Messaging</li>
-	<li>Music</li>
-	<li>Pictures</li>
-	<li>Settings</li>
-	</ul>
-
-<h2 id="locs">UI Localizations</h2>
-
-<p>The system image provides localized UI strings for the languages
-listed below.</p>
-	<ul>
-	<li>English, US (en_US)</li>
-	<li>German (de) </li>
-	</ul>
-
-<p>Localized UI strings match the locales that are displayable in 
-the emulator, accessible through the device Settings application.</p>
-
-<h2 id="resolved-issues">Resolved Issues</h2>
-<ul>
-<li>AlarmClock alert now plays audio/vibe directly, rather than through
-AlarmManager. AlarmClock alert starts playing audio/vibe in its
-IntentReceiver, rather than on activity start. These changes should
-prevent alarms from being blocked by modal dialogs.</li>
-<li>Fixes to device sleep. </li>
-<li>Single tap no longer opens the in-call dialpad; users now need to
-touch and drag it. </li>
-<li>Fixes a bug causing approximately 1 in 25 outbound messages to
-freeze up the IMAP connection (to a Gmail based server) when transferred
-to the Sent folder.</li>
-<li>Removes automatic account setup entries that were broken or not
-testable. Adds minor fixes to a few of the remaining entries. Makes
-improvements to warning dialogs used for a few special cases.	</li>
-<li>Changes default mail checking interval to every 15 minutes (instead
-of defaulting to "never").</li>
-<li>Fixes password-quoting bugs in IMAP, so that users can include
-special characters in passwords (e.g. spaces).</li>
-<li>Fixes various errors in auto and manual account setup	</li>
-<li>Improves reporting for various connection errors, making it easier
-for the user to diagnose failed account setups.</li>
-<li>Fixes new-mail notifications for POP3 accounts.</li>
-<li>Ensures proper auto-checking of accounts marked as "never
-check".</li>
-<li>Now displays date and time using user preference (e.g. 24 hr vs.
-AM/PM).</li>
-<li>Now shows cc: in message view.</li>
-<li>Improves recovery from POP3 connection failures.</li>
-<li>POP3 parser rules loosened, so the application can work with
-non-compliant email servers.</li>
-</ul>
-
-<h2 id="features">New Features</h2>
-
-<ul>
-<li>Maps: Adds details and reviews when a user does a search on Maps and
-clicks on a business to view its details.</li>
-<li>Dialer: In-call screen timeout default is now longer when using the
-speakerphone.</li>
-<li>Dialer: Adds a "Show dialpad" / "Hide dialpad" item to the in-call
-menu, to make it easier to discover the DTMF dialpad. </li>
-<li>Adds support for saving attachments from MMS</li>
-<li>Adds support for marquee in layouts.</li>
-</ul>
-
-<h2 id="api-changes">API Changes</h2>
-
-<h3>Overview</strong></h3>
-
-<ul>
-<li>Adds annotations for test systems, no actual (non-test) API
-changes.</li>
-<li>Adds a method to allow a process to easily determine its UID.
-<li>Adds support for marquee in layouts.</li>
-<li>Adds new methods for determining padding in views. Useful if you are
-writing your own
-subclasses of {@link android.view.View View}.</li>
-<li>Adds new permissions that allow an application to broadcast an SMS
-or WAP Push message. </li>
-<li>API cleanup: removes protected constructor from
-SDK-bound system images. </li>
-</ul>
-
-<h3>API Change Details</h3>
-
-<table>
-<tr>
-<th>Module or Feature</th><th>Change Description</th>
-</tr>
-<tr><td rowspan="4">Annotations for test systems</td></tr>
-    <tr><td>Added {@link android.test.suitebuilder.annotation.LargeTest LargeTest} annotation.</td></tr>
-    <tr><td>Added {@link android.test.suitebuilder.annotation.MediumTest MediumTest} annotation.</td></tr>
-    <tr><td>Added {@link android.test.suitebuilder.annotation.SmallTest SmallTest} annotation.</td></tr>
-
-<tr><td rowspan="2">Allow a process to easily know its UID.</td></tr>
-    <tr><td>Added public method {@link android.os.Process#myUid} to class {@link android.os.Process android.os.Process}</td></tr>
-
-<tr><td rowspan="6">Padding in views</td></tr>
-    <tr><td>Added public method {@link android.view.View#getBottomPaddingOffset} to class {@link android.view.View android.view.View}.</td></tr>
-    <tr><td>Added public method {@link android.view.View#getLeftPaddingOffset} to class {@link android.view.View android.view.View}.</td></tr>
-    <tr><td>Added public method {@link android.view.View#getRightPaddingOffset} to class {@link android.view.View android.view.View}.</td></tr>
-    <tr><td>Added public method {@link android.view.View#getTopPaddingOffset} to class {@link android.view.View android.view.View}.</td></tr>
-    <tr><td>Added public method {@link android.view.View#isPaddingOffsetRequired} to class {@link android.view.View android.view.View}.</td></tr>
-
-<tr><td rowspan="3">Marquee support</td></tr>
-    <tr><td>Added public method {@link android.widget.TextView#setMarqueeRepeatLimit} to class {@link android.widget.TextView}</td></tr>
-    <tr><td>Added public field {@link android.R.attr#marqueeRepeatLimit android.R.attr.marqueeRepeatLimit}</td></tr>
-
-<tr><td rowspan="3">New permissions</td></tr>
-    <tr><td>Added public field {@link android.Manifest.permission#BROADCAST_SMS android.Manifest.permission.BROADCAST_SMS}</td></tr>
-    <tr><td>Added public field {@link android.Manifest.permission#BROADCAST_WAP_PUSH android.Manifest.permission.BROADCAST_WAP_PUSH}</td></tr>
-
-<tr><td rowspan="2">API cleanup</td></tr>
-    <tr><td>Removed protected constructor java.net.ServerSocket.ServerSocket(java.net.SocketImpl).</td></tr>
-
-</table>
+<p>Please see <a href="{@docRoot}sdk/preview/index.html">Download the Android 1.5 Early Look SDK</a> for more information. </p>
 
 
 
diff --git a/docs/html/sdk/terms.jd b/docs/html/sdk/terms.jd
index 46388504..b3c5ea2 100644
--- a/docs/html/sdk/terms.jd
+++ b/docs/html/sdk/terms.jd
@@ -8,7 +8,8 @@
 	1. Introduction
 </h2>
 <p>
-	1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and specifically including the Android system files and packaged APIs) is licensed to you subject to the terms of this License Agreement. This License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.
+	1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google Services add-ons) is licensed to you subject to the terms of this License Agreement. This License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.
+
 </p>
 <p>
 	1.2 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
@@ -41,10 +42,11 @@
 	3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop applications to run on the Android platform.
 </p>
 <p>
-	3.2 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. The Android Open Source Project
+	3.2 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you. 
+
 </p>
 <p>
-	3.3 Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK. Except to the extent required by applicable third party licenses, you may not load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK.
+	3.3. Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK. Except to the extent required by applicable third party licenses, you may not load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK. 
 </p>
 <p>
 	3.4 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not this License Agreement.
@@ -62,7 +64,7 @@
 	4. Use of the SDK by You
 </h2>
 <p>
-	4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under this License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights which subsist in those applications.
+	4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under this License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights that subsist in those applications. 
 </p>
 <p>
 	4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this License Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
@@ -110,25 +112,14 @@
 	8. Using Android APIs
 </h2>
 <p>
-	8.1 Android Maps API
+	8.1 Google Data APIs
 </p>
 <p>
-	8.1.1 If you use the Android Maps API (described in the SDK by the Package names "com.google.android.maps" and "com.android.location.Geocoder"), the terms of your binding legal agreement with Google include this License Agreement, the <a href="http://www.google.com/apis/maps/terms.html">Google Maps API Terms of Service</a> and the <a href="http://www.google.com/intl/en_ALL/help/terms_local.html">Google Maps Terms of Service</a>. You must read and agree to those Terms of Service before you use the Android Maps API.
+	8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
 </p>
 <p>
-	8.1.2 If you use the Android Maps API to retrieve map or satellite image data from Google, you must include the following copyright notice in your application or service in a manner that is reasonably available to users:
-</p>
-<p>
-	"Copyright Notice: Data: (c)2007 TeleAtlas, AND, Europa Technologies, Kingway, Map Data Sciences Pty Ltd, PSMA, ZENRIN, Geocentre, MapLink/TeleAtlas; Imagery: (c)2007 DigitalGlobe, EarthSat, Sanborn, NYGIS, Scankort, TerraMetrics, MassGIS Commonwealth of Massachusetts, Digital Earth Technology."
-</p>
-<p>
-	8.2 Google Data APIs
-</p>
-<p>
-	8.2.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by those who provide that data (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless you have been specifically given permission to do so by the owners of that data.
-</p>
-<p>
-	8.2.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
+	8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so. 
+
 </p>
 <h2>
 	9. Terminating this License Agreement
@@ -185,10 +176,7 @@
 	13. Changes to the License Agreement
 </h2>
 <p>
-	13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available and with the SDK downloadable.
-</p>
-<p>
-	13.2 You agree that your use of a specific version of the SDK is governed by the License Agreement included with that version of the SDK.
+	13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available.
 </p>
 <h2>
 	14. General Legal Terms
@@ -215,5 +203,5 @@
 	14.7 This License Agreement, and your relationship with Google under this License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from this License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
 </p>
 <p>
-	<em>August 18, 2008</em>
+	<em>April 10, 2009</em>
 </p>
diff --git a/docs/html/sdk/terms_body.html b/docs/html/sdk/terms_body.html
index e8fdc3c..a73801f 100644
--- a/docs/html/sdk/terms_body.html
+++ b/docs/html/sdk/terms_body.html
@@ -5,7 +5,8 @@
 	1. Introduction
 </h2>
 <p>
-	1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and specifically including the Android system files and packaged APIs) is licensed to you subject to the terms of this License Agreement. This License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.
+	1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google Services add-ons) is licensed to you subject to the terms of this License Agreement. This License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.
+
 </p>
 <p>
 	1.2 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
@@ -38,10 +39,11 @@
 	3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop applications to run on the Android platform.
 </p>
 <p>
-	3.2 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. The Android Open Source Project
+	3.2 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you. 
+
 </p>
 <p>
-	3.3 Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK. Except to the extent required by applicable third party licenses, you may not load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK.
+	3.3. Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK. Except to the extent required by applicable third party licenses, you may not load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK. 
 </p>
 <p>
 	3.4 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not this License Agreement.
@@ -59,7 +61,7 @@
 	4. Use of the SDK by You
 </h2>
 <p>
-	4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under this License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights which subsist in those applications.
+	4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under this License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights that subsist in those applications. 
 </p>
 <p>
 	4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this License Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
@@ -107,25 +109,14 @@
 	8. Using Android APIs
 </h2>
 <p>
-	8.1 Android Maps API
+	8.1 Google Data APIs
 </p>
 <p>
-	8.1.1 If you use the Android Maps API (described in the SDK by the Package names "com.google.android.maps" and "com.android.location.Geocoder"), the terms of your binding legal agreement with Google include this License Agreement, the <a href="http://www.google.com/apis/maps/terms.html">Google Maps API Terms of Service</a> and the <a href="http://www.google.com/intl/en_ALL/help/terms_local.html">Google Maps Terms of Service</a>. You must read and agree to those Terms of Service before you use the Android Maps API.
+	8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
 </p>
 <p>
-	8.1.2 If you use the Android Maps API to retrieve map or satellite image data from Google, you must include the following copyright notice in your application or service in a manner that is reasonably available to users:
-</p>
-<p>
-	"Copyright Notice: Data: (c)2007 TeleAtlas, AND, Europa Technologies, Kingway, Map Data Sciences Pty Ltd, PSMA, ZENRIN, Geocentre, MapLink/TeleAtlas; Imagery: (c)2007 DigitalGlobe, EarthSat, Sanborn, NYGIS, Scankort, TerraMetrics, MassGIS Commonwealth of Massachusetts, Digital Earth Technology."
-</p>
-<p>
-	8.2 Google Data APIs
-</p>
-<p>
-	8.2.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by those who provide that data (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless you have been specifically given permission to do so by the owners of that data.
-</p>
-<p>
-	8.2.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
+	8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so. 
+
 </p>
 <h2>
 	9. Terminating this License Agreement
@@ -182,10 +173,7 @@
 	13. Changes to the License Agreement
 </h2>
 <p>
-	13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available and with the SDK downloadable.
-</p>
-<p>
-	13.2 You agree that your use of a specific version of the SDK is governed by the License Agreement included with that version of the SDK.
+	13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available.
 </p>
 <h2>
 	14. General Legal Terms
@@ -212,5 +200,5 @@
 	14.7 This License Agreement, and your relationship with Google under this License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from this License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
 </p>
 <p>
-	<em>August 18, 2008</em>
-</p>
+	<em>April 10, 2009</em>
+</p>
\ No newline at end of file
diff --git a/include/ui/KeycodeLabels.h b/include/ui/KeycodeLabels.h
index efa6d2b..571e47b 100644
--- a/include/ui/KeycodeLabels.h
+++ b/include/ui/KeycodeLabels.h
@@ -107,12 +107,12 @@
     { "MENU", 82 },
     { "NOTIFICATION", 83 },
     { "SEARCH", 84 },
-    { "PLAYPAUSE", 85 },
-    { "STOP", 86 },
-    { "NEXTSONG", 87 },
-    { "PREVIOUSSONG", 88 },
-    { "REWIND", 89 },
-    { "FORWARD", 90 },
+    { "MEDIA_PLAY_PAUSE", 85 },
+    { "MEDIA_STOP", 86 },
+    { "MEDIA_NEXT", 87 },
+    { "MEDIA_PREVIOUS", 88 },
+    { "MEDIA_REWIND", 89 },
+    { "MEDIA_FAST_FORWARD", 90 },
     { "MUTE", 91 },
 
     // NOTE: If you add a new keycode here you must also add it to:
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index 2f0007f..8f05cec 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -272,7 +272,6 @@
      * manager is returning.
      * 
      * @return The stream type.
-     * @hide Pending API Council approval
      */
     public int inferStreamType() {
         switch (mType) {
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java
index 7fb8585..ccb27cc 100644
--- a/opengl/java/android/opengl/GLSurfaceView.java
+++ b/opengl/java/android/opengl/GLSurfaceView.java
@@ -16,7 +16,6 @@
 
 package android.opengl;
 
-import java.io.IOException;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.concurrent.Semaphore;
@@ -38,32 +37,163 @@
 
 /**
  * An implementation of SurfaceView that uses the dedicated surface for
- * displaying an OpenGL animation.  This allows the animation to run in a
- * separate thread, without requiring that it be driven by the update mechanism
- * of the view hierarchy.
+ * displaying OpenGL rendering.
+ * <p>
+ * A GLSurfaceView provides the following features:
+ * <p>
+ * <ul>
+ * <li>Manages a surface, which is a special piece of memory that can be
+ * composited into the Android view system.
+ * <li>Manages an EGL display, which enables OpenGL to render into a surface.
+ * <li>Accepts a user-provided Renderer object that does the actual rendering.
+ * <li>Renders on a dedicated thread to decouple rendering performance from the
+ * UI thread.
+ * <li>Supports both on-demand and continuous rendering.
+ * <li>Optionally wraps, traces, and/or error-checks the renderer's OpenGL calls.
+ * </ul>
  *
- * The application-specific rendering code is delegated to a GLView.Renderer
- * instance.
+ * <h3>Using GLSurfaceView</h3>
+ * <p>
+ * Typically you use GLSurfaceView by subclassing it and overriding one or more of the
+ * View system input event methods. If your application does not need to override event
+ * methods then GLSurfaceView can be used as-is. For the most part
+ * GLSurfaceView behavior is customized by calling "set" methods rather than by subclassing.
+ * For example, unlike a regular View, drawing is delegated to a separate Renderer object which
+ * is registered with the GLSurfaceView
+ * using the {@link #setRenderer(Renderer)} call.
+ * <p>
+ * <h3>Initializing GLSurfaceView</h3>
+ * All you have to do to initialize a GLSurfaceView is call {@link #setRenderer(Renderer)}.
+ * However, if desired, you can modify the default behavior of GLSurfaceView by calling one or
+ * more of these methods before calling setRenderer:
+ * <ul>
+ * <li>{@link #setDebugFlags(int)}
+ * <li>{@link #setEGLConfigChooser(boolean)}
+ * <li>{@link #setEGLConfigChooser(EGLConfigChooser)}
+ * <li>{@link #setEGLConfigChooser(int, int, int, int, int, int)}
+ * <li>{@link #setGLWrapper(GLWrapper)}
+ * </ul>
+ * <p>
+ * <h4>Choosing an EGL Configuration</h4>
+ * A given Android device may support multiple possible types of drawing surfaces.
+ * The available surfaces may differ in how may channels of data are present, as
+ * well as how many bits are allocated to each channel. Therefore, the first thing
+ * GLSurfaceView has to do when starting to render is choose what type of surface to use.
+ * <p>
+ * By default GLSurfaceView chooses an available surface that's closest to a 16-bit R5G6B5 surface
+ * with a 16-bit depth buffer and no stencil. If you would prefer a different surface (for example,
+ * if you do not need a depth buffer) you can override the default behavior by calling one of the
+ * setEGLConfigChooser methods.
+ * <p>
+ * <h4>Debug Behavior</h4>
+ * You can optionally modify the behavior of GLSurfaceView by calling
+ * one or more of the debugging methods {@link #setDebugFlags(int)},
+ * and {@link #setGLWrapper}. These methods may be called before and/or after setRenderer, but
+ * typically they are called before setRenderer so that they take effect immediately.
+ * <p>
+ * <h4>Setting a Renderer</h4>
+ * Finally, you must call {@link #setRenderer} to register a {@link Renderer}.
+ * The renderer is
+ * responsible for doing the actual OpenGL rendering.
+ * <p>
+ * <h3>Rendering Mode</h3>
+ * Once the renderer is set, you can control whether the renderer draws
+ * continuously or on-demand by calling
+ * {@link #setRenderMode}. The default is continuous rendering.
+ * <p>
+ * <h3>Activity Life-cycle</h3>
+ * A GLSurfaceView must be notified when the activity is paused and resumed. GLSurfaceView clients
+ * are required to call {@link #onPause()} when the activity pauses and
+ * {@link #onResume()} when the activity resumes. These calls allow GLSurfaceView to
+ * pause and resume the rendering thread, and also allow GLSurfaceView to release and recreate
+ * the OpenGL display.
+ * <p>
+ * <h3>Handling events</h3>
+ * <p>
+ * To handle an event you will typically subclass GLSurfaceView and override the
+ * appropriate method, just as you would with any other View. However, when handling
+ * the event, you may need to communicate with the Renderer object
+ * that's running in the rendering thread. You can do this using any
+ * standard Java cross-thread communication mechanism. In addition,
+ * one relatively easy way to communicate with your renderer is
+ * to call
+ * {@link #queueEvent(Runnable)}. For example:
+ * <pre class="prettyprint">
+ * class MyGLSurfaceView extends GLSurfaceView {
+ *
+ *     private MyRenderer mMyRenderer;
+ *
+ *     public void start() {
+ *         mMyRenderer = ...;
+ *         setRenderer(mMyRenderer);
+ *     }
+ *
+ *     public boolean onKeyDown(int keyCode, KeyEvent event) {
+ *         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
+ *             queueEvent(new Runnable() {
+ *                 // This method will be called on the rendering
+ *                 // thread:
+ *                 public void run() {
+ *                     mMyRenderer.handleDpadCenter();
+ *                 }});
+ *             return true;
+ *         }
+ *         return super.onKeyDown(keyCode, event);
+ *     }
+ * }
+ * </pre>
+ *
  */
 public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
+    /**
+     * The renderer only renders
+     * when the surface is created, or when {@link #requestRender} is called.
+     *
+     * @see #getRenderMode()
+     * @see #setRenderMode(int)
+     */
     public final static int RENDERMODE_WHEN_DIRTY = 0;
-    public final static int RENDERMODE_CONTUOUSLY = 1;
+    /**
+     * The renderer is called
+     * continuously to re-render the scene.
+     *
+     * @see #getRenderMode()
+     * @see #setRenderMode(int)
+     * @see #requestRender()
+     */
+    public final static int RENDERMODE_CONTINUOUSLY = 1;
 
     /**
-     * Check glError() after every GL call.
+     * Check glError() after every GL call and throw an exception if glError indicates
+     * that an error has occurred. This can be used to help track down which OpenGL ES call
+     * is causing an error.
+     *
+     * @see #getDebugFlags
+     * @see #setDebugFlags
      */
     public final static int DEBUG_CHECK_GL_ERROR = 1;
 
     /**
      * Log GL calls to the system log at "verbose" level with tag "GLSurfaceView".
+     *
+     * @see #getDebugFlags
+     * @see #setDebugFlags
      */
     public final static int DEBUG_LOG_GL_CALLS = 2;
 
+    /**
+     * Standard View constructor. In order to render something, you
+     * must call {@link #setRenderer} to register a renderer.
+     */
     public GLSurfaceView(Context context) {
         super(context);
         init();
     }
 
+    /**
+     * Standard View constructor. In order to render something, you
+     * must call {@link #setRenderer} to register a renderer.
+     */
     public GLSurfaceView(Context context, AttributeSet attrs) {
         super(context, attrs);
         init();
@@ -78,8 +208,16 @@
     }
 
     /**
-     * Set the glWrapper to a new value. The current glWrapper is used
-     * whenever a surface is created. The default value is null.
+     * Set the glWrapper. If the glWrapper is not null, its
+     * {@link GLWrapper#wrap(GL)} method is called
+     * whenever a surface is created. A GLWrapper can be used to wrap
+     * the GL object that's passed to the renderer. Wrapping a GL
+     * object enables examining and modifying the behavior of the
+     * GL calls made by the renderer.
+     * <p>
+     * Wrapping is typically used for debugging purposes.
+     * <p>
+     * The default value is null.
      * @param glWrapper the new GLWrapper
      */
     public void setGLWrapper(GLWrapper glWrapper) {
@@ -87,7 +225,9 @@
     }
 
     /**
-     * Set the debug flags to a new value. The debug flags take effect
+     * Set the debug flags to a new value. The value is
+     * constructed by OR-together zero or more
+     * of the DEBUG_CHECK_* constants. The debug flags take effect
      * whenever a surface is created. The default value is zero.
      * @param debugFlags the new debug flags
      * @see #DEBUG_CHECK_GL_ERROR
@@ -97,13 +237,39 @@
         mDebugFlags = debugFlags;
     }
 
+    /**
+     * Get the current value of the debug flags.
+     * @return the current value of the debug flags.
+     */
     public int getDebugFlags() {
         return mDebugFlags;
     }
 
     /**
-     * Set the renderer associated with this view. Can only be called once.
-     * @param renderer
+     * Set the renderer associated with this view. Also starts the thread that
+     * will call the renderer, which in turn causes the rendering to start.
+     * <p>This method should be called once and only once in the life-cycle of
+     * a GLSurfaceView.
+     * <p>The following GLSurfaceView methods can only be called <em>before</em>
+     * setRenderer is called:
+     * <ul>
+     * <li>{@link #setEGLConfigChooser(boolean)}
+     * <li>{@link #setEGLConfigChooser(EGLConfigChooser)}
+     * <li>{@link #setEGLConfigChooser(int, int, int, int, int, int)}
+     * </ul>
+     * <p>
+     * The following GLSurfaceView methods can only be called <em>after</em>
+     * setRenderer is called:
+     * <ul>
+     * <li>{@link #getRenderMode()}
+     * <li>{@link #onPause()}
+     * <li>{@link #onResume()}
+     * <li>{@link #queueEvent(Runnable)}
+     * <li>{@link #requestRender()}
+     * <li>{@link #setRenderMode(int)}
+     * </ul>
+     *
+     * @param renderer the renderer to use to perform OpenGL drawing.
      */
     public void setRenderer(Renderer renderer) {
         if (mGLThread != null) {
@@ -118,11 +284,14 @@
     }
 
     /**
-     * Set the EGLConfigChooser associated with this view. If this method is
-     * called at all, it must be called before {@link #setRenderer(Renderer)}
+     * Install a custom EGLConfigChooser.
+     * <p>If this method is
+     * called, it must be called before {@link #setRenderer(Renderer)}
      * is called.
      * <p>
-     * The supplied configChooser will be used to choose a configuration.
+     * If no setEGLConfigChooser method is called, then by default the
+     * view will choose a config as close to 16-bit RGB as possible, with
+     * a depth buffer as close to 16 bits as possible.
      * @param configChooser
      */
     public void setEGLConfigChooser(EGLConfigChooser configChooser) {
@@ -134,17 +303,16 @@
     }
 
     /**
-     * Set the EGLConfigChooser associated with this view. If this method is
+     * Install a config chooser which will choose a config
+     * as close to 16-bit RGB as possible, with or without an optional depth
+     * buffer as close to 16-bits as possible.
+     * <p>If this method is
      * called, it must be called before {@link #setRenderer(Renderer)}
      * is called.
      * <p>
-     * This method installs a config chooser which will choose a config
-     * as close to 16-bit RGB as possible, with or without an optional depth
-     * buffer as close to 16-bits as possible.
-     * <p>
-     * If no setEGLConfigChooser method is called, then by default the
+      * If no setEGLConfigChooser method is called, then by default the
      * view will choose a config as close to 16-bit RGB as possible, with
-     * a depth buffer as close to 16-bits as possible.
+     * a depth buffer as close to 16 bits as possible.
      *
      * @param needDepth
      */
@@ -153,13 +321,16 @@
     }
 
     /**
-     * Set the EGLConfigChooser associated with this view. If this method is
+     * Install a config chooser which will choose a config
+     * with at least the specified component sizes, and as close
+     * to the specified component sizes as possible.
+     * <p>If this method is
      * called, it must be called before {@link #setRenderer(Renderer)}
      * is called.
      * <p>
-     * This method installs a config chooser which will choose a config
-     * with at least the specified component sizes, and as close
-     * to the specified component sizes as possible.
+     * If no setEGLConfigChooser method is called, then by default the
+     * view will choose a config as close to 16-bit RGB as possible, with
+     * a depth buffer as close to 16 bits as possible.
      *
      */
     public void setEGLConfigChooser(int redSize, int greenSize, int blueSize,
@@ -168,12 +339,20 @@
                 blueSize, alphaSize, depthSize, stencilSize));
     }
     /**
-     * Set the rendering mode. When the renderMode is
+     * Set the rendering mode. When renderMode is
      * RENDERMODE_CONTINUOUSLY, the renderer is called
-     * repeatedly to re-render the scene. When the rendermode
+     * repeatedly to re-render the scene. When renderMode
      * is RENDERMODE_WHEN_DIRTY, the renderer only rendered when the surface
-     * is created, or when requestRender is called. Defaults to RENDERMODE_CONTINUOUSLY.
+     * is created, or when {@link #requestRender} is called. Defaults to RENDERMODE_CONTINUOUSLY.
+     * <p>
+     * Using RENDERMODE_WHEN_DIRTY can improve battery life and overall system performance
+     * by allowing the GPU and CPU to idle when the view does not need to be updated.
+     * <p>
+     * This method can only be called after {@link #setRenderer(Renderer)}
+     *
      * @param renderMode one of the RENDERMODE_X constants
+     * @see #RENDERMODE_CONTINUOUSLY
+     * @see #RENDERMODE_WHEN_DIRTY
      */
     public void setRenderMode(int renderMode) {
         mGLThread.setRenderMode(renderMode);
@@ -182,38 +361,55 @@
     /**
      * Get the current rendering mode. May be called
      * from any thread. Must not be called before a renderer has been set.
-     * @return true if the renderer will render continuously.
+     * @return the current rendering mode.
+     * @see #RENDERMODE_CONTINUOUSLY
+     * @see #RENDERMODE_WHEN_DIRTY
      */
     public int getRenderMode() {
         return mGLThread.getRenderMode();
     }
 
     /**
-     * Request that the renderer render a frame. May be called
-     * from any thread. Must not be called before a renderer has been set.
+     * Request that the renderer render a frame.
      * This method is typically used when the render mode has been set to
-     * false, so that frames are only rendered on demand.
+     * {@link #RENDERMODE_WHEN_DIRTY}, so that frames are only rendered on demand.
+     * May be called
+     * from any thread. Must not be called before a renderer has been set.
      */
     public void requestRender() {
         mGLThread.requestRender();
     }
 
+    /**
+     * This method is part of the SurfaceHolder.Callback interface, and is
+     * not normally called or subclassed by clients of GLSurfaceView.
+     */
     public void surfaceCreated(SurfaceHolder holder) {
         mGLThread.surfaceCreated();
     }
 
+    /**
+     * This method is part of the SurfaceHolder.Callback interface, and is
+     * not normally called or subclassed by clients of GLSurfaceView.
+     */
     public void surfaceDestroyed(SurfaceHolder holder) {
         // Surface will be destroyed when we return
         mGLThread.surfaceDestroyed();
     }
 
+    /**
+     * This method is part of the SurfaceHolder.Callback interface, and is
+     * not normally called or subclassed by clients of GLSurfaceView.
+     */
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         mGLThread.onWindowResize(w, h);
     }
 
     /**
      * Inform the view that the activity is paused. The owner of this view must
-     * call this method when the activity is paused.
+     * call this method when the activity is paused. Calling this method will
+     * pause the rendering thread.
+     * Must not be called before a renderer has been set.
      */
     public void onPause() {
         mGLThread.onPause();
@@ -221,20 +417,30 @@
 
     /**
      * Inform the view that the activity is resumed. The owner of this view must
-     * call this method when the activity is resumed.
+     * call this method when the activity is resumed. Calling this method will
+     * recreate the OpenGL display and resume the rendering
+     * thread.
+     * Must not be called before a renderer has been set.
      */
     public void onResume() {
         mGLThread.onResume();
     }
 
     /**
-     * Queue an "event" to be run on the GL rendering thread.
+     * Queue a runnable to be run on the GL rendering thread. This can be used
+     * to communicate with the Renderer on the rendering thread.
+     * Must not be called before a renderer has been set.
      * @param r the runnable to be run on the GL rendering thread.
      */
     public void queueEvent(Runnable r) {
         mGLThread.queueEvent(r);
     }
 
+    /**
+     * This method is used as part of the View class and is not normally
+     * called or subclassed by clients of GLSurfaceView.
+     * Must not be called before a renderer has been set.
+     */
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
@@ -243,40 +449,129 @@
 
     // ----------------------------------------------------------------------
 
+    /**
+     * An interface used to wrap a GL interface.
+     * <p>Typically
+     * used for implementing debugging and tracing on top of the default
+     * GL interface. You would typically use this by creating your own class
+     * that implemented all the GL methods by delegating to another GL instance.
+     * Then you could add your own behavior before or after calling the
+     * delegate. All the GLWrapper would do was instantiate and return the
+     * wrapper GL instance:
+     * <pre class="prettyprint">
+     * class MyGLWrapper implements GLWrapper {
+     *     GL wrap(GL gl) {
+     *         return new MyGLImplementation(gl);
+     *     }
+     *     static class MyGLImplementation implements GL,GL10,GL11,... {
+     *         ...
+     *     }
+     * }
+     * </pre>
+     * @see #setGLWrapper(GLWrapper)
+     */
     public interface GLWrapper {
-      GL wrap(GL gl);
+        /**
+         * Wraps a gl interface in another gl interface.
+         * @param gl a GL interface that is to be wrapped.
+         * @return either the input argument or another GL object that wraps the input argument.
+         */
+        GL wrap(GL gl);
     }
 
-    // ----------------------------------------------------------------------
-
     /**
      * A generic renderer interface.
+     * <p>
+     * The renderer is responsible for making OpenGL calls to render a frame.
+     * <p>
+     * GLSurfaceView clients typically create their own classes that implement
+     * this interface, and then call {@link GLSurfaceView#setRenderer} to
+     * register the renderer with the GLSurfaceView.
+     * <p>
+     * <h3>Threading</h3>
+     * The renderer will be called on a separate thread, so that rendering
+     * performance is decoupled from the UI thread. Clients typically need to
+     * communicate with the renderer from the UI thread, because that's where
+     * input events are received. Clients can communicate using any of the
+     * standard Java techniques for cross-thread communication, or they can
+     * use the {@link GLSurfaceView#queueEvent(Runnable)} convenience method.
+     * <p>
+     * <h3>EGL Context Lost</h3>
+     * There are situations where the EGL rendering context will be lost. This
+     * typically happens when device wakes up after going to sleep. When
+     * the EGL context is lost, all OpenGL resources (such as textures) that are
+     * associated with that context will be automatically deleted. In order to
+     * keep rendering correctly, a renderer must recreate any lost resources
+     * that it still needs. The {@link #onSurfaceCreated(GL10, EGLConfig)} method
+     * is a convenient place to do this.
+     *
+     *
+     * @see #setRenderer(Renderer)
      */
     public interface Renderer {
         /**
-         * Surface created.
-         * Called when the surface is created. Called when the application
-         * starts, and whenever the GPU is reinitialized. This will
-         * typically happen when the device awakes after going to sleep.
-         * Set your textures here.
+         * Called when the surface is created or recreated.
+         * <p>
+         * Called when the rendering thread
+         * starts and whenever the EGL context is lost. The context will typically
+         * be lost when the Android device awakes after going to sleep.
+         * <p>
+         * Since this method is called at the beginning of rendering, as well as
+         * every time the EGL context is lost, this method is a convenient place to put
+         * code to create resources that need to be created when the rendering
+         * starts, and that need to be recreated when the EGL context is lost.
+         * Textures are an example of a resource that you might want to create
+         * here.
+         * <p>
+         * Note that when the EGL context is lost, all OpenGL resources associated
+         * with that context will be automatically deleted. You do not need to call
+         * the corresponding "glDelete" methods such as glDeleteTextures to
+         * manually delete these lost resources.
+         * <p>
          * @param gl the GL interface. Use <code>instanceof</code> to
          * test if the interface supports GL11 or higher interfaces.
          * @param config the EGLConfig of the created surface. Can be used
          * to create matching pbuffers.
          */
         void onSurfaceCreated(GL10 gl, EGLConfig config);
+
         /**
-         * Surface changed size.
+         * Called when the surface changed size.
+         * <p>
          * Called after the surface is created and whenever
-         * the OpenGL ES surface size changes. Set your viewport here.
+         * the OpenGL ES surface size changes.
+         * <p>
+         * Typically you will set your viewport here. If your camera
+         * is fixed then you could also set your projection matrix here:
+         * <pre class="prettyprint">
+         * void onSurfaceChanged(GL10 gl, int width, int height) {
+         *     gl.glViewport(0, 0, width, height);
+         *     // for a fixed camera, set the projection too
+         *     float ratio = (float) width / height;
+         *     gl.glMatrixMode(GL10.GL_PROJECTION);
+         *     gl.glLoadIdentity();
+         *     gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
+         * }
+         * </pre>
          * @param gl the GL interface. Use <code>instanceof</code> to
          * test if the interface supports GL11 or higher interfaces.
          * @param width
          * @param height
          */
         void onSurfaceChanged(GL10 gl, int width, int height);
+
         /**
-         * Draw the current frame.
+         * Called to draw the current frame.
+         * <p>
+         * This method is responsible for drawing the current frame.
+         * <p>
+         * The implementation of this method typically looks like this:
+         * <pre class="prettyprint">
+         * void onDrawFrame(GL10 gl) {
+         *     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
+         *     //... other gl calls to render the scene ...
+         * }
+         * </pre>
          * @param gl the GL interface. Use <code>instanceof</code> to
          * test if the interface supports GL11 or higher interfaces.
          */
@@ -284,15 +579,18 @@
     }
 
     /**
-     * An interface for choosing a configuration from a list of
+     * An interface for choosing an EGLConfig configuration from a list of
      * potential configurations.
-     *
+     * <p>
+     * This interface must be implemented by clients wishing to call
+     * {@link GLSurfaceView#setEGLConfigChooser(EGLConfigChooser)}
      */
     public interface EGLConfigChooser {
         /**
          * Choose a configuration from the list. Implementors typically
          * implement this method by calling
-         * {@link EGL10#eglChooseConfig} and iterating through the results.
+         * {@link EGL10#eglChooseConfig} and iterating through the results. Please consult the
+         * EGL specification available from The Khronos Group to learn how to call eglChooseConfig.
          * @param egl the EGL10 for the current display.
          * @param display the current display.
          * @return the chosen configuration.
@@ -565,7 +863,7 @@
             mWidth = 0;
             mHeight = 0;
             mRequestRender = true;
-            mRenderMode = RENDERMODE_CONTUOUSLY;
+            mRenderMode = RENDERMODE_CONTINUOUSLY;
             mRenderer = renderer;
             setName("GLThread");
         }
@@ -679,7 +977,7 @@
                 return true;
             }
 
-            if ((mWidth > 0) && (mHeight > 0) && (mRequestRender || (mRenderMode == RENDERMODE_CONTUOUSLY))) {
+            if ((mWidth > 0) && (mHeight > 0) && (mRequestRender || (mRenderMode == RENDERMODE_CONTINUOUSLY))) {
                 return false;
             }
 
@@ -687,12 +985,12 @@
         }
 
         public void setRenderMode(int renderMode) {
-            if ( !((RENDERMODE_WHEN_DIRTY <= renderMode) && (renderMode <= RENDERMODE_CONTUOUSLY)) ) {
+            if ( !((RENDERMODE_WHEN_DIRTY <= renderMode) && (renderMode <= RENDERMODE_CONTINUOUSLY)) ) {
                 throw new IllegalArgumentException("renderMode");
             }
             synchronized(this) {
                 mRenderMode = renderMode;
-                if (renderMode == RENDERMODE_CONTUOUSLY) {
+                if (renderMode == RENDERMODE_CONTINUOUSLY) {
                     notify();
                 }
             }
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 15eafcf..90d8c9d 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -247,6 +247,20 @@
                 logOutlier = true;
             }
             
+            // Separate broadcast is sent for power connected / not connected
+            // since the standard intent will not wake any applications and some
+            // applications may want to have smart behavior based on this.
+            if (mPlugType != 0 && mLastPlugType == 0) {
+                Intent intent = new Intent(Intent.ACTION_POWER_CONNECTED);
+                intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+                mContext.sendBroadcast(intent);
+            }
+            else if (mPlugType == 0 && mLastPlugType != 0) {
+                Intent intent = new Intent(Intent.ACTION_POWER_DISCONNECTED);
+                intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+                mContext.sendBroadcast(intent);
+            }
+            
             mLastBatteryStatus = mBatteryStatus;
             mLastBatteryHealth = mBatteryHealth;
             mLastBatteryPresent = mBatteryPresent;
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 0b1ddc8..b0fcb1c 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -77,7 +77,6 @@
 import android.os.SystemProperties;
 import android.os.TokenWatcher;
 import android.provider.Settings;
-import android.util.Config;
 import android.util.EventLog;
 import android.util.Log;
 import android.util.SparseIntArray;
@@ -137,7 +136,7 @@
     
     static final boolean PROFILE_ORIENTATION = false;
     static final boolean BLUR = true;
-    static final boolean localLOGV = DEBUG ? Config.LOGD : Config.LOGV;
+    static final boolean localLOGV = DEBUG;
     
     static final int LOG_WM_NO_SURFACE_MEMORY = 31000;
     
@@ -2023,7 +2022,7 @@
             wtoken.appFullscreen = fullscreen;
             wtoken.requestedOrientation = requestedOrientation;
             mAppTokens.add(addPos, wtoken);
-            if (Config.LOGV) Log.v(TAG, "Adding new app token: " + wtoken);
+            if (localLOGV) Log.v(TAG, "Adding new app token: " + wtoken);
             mTokenMap.put(token.asBinder(), wtoken);
             mTokenList.add(wtoken);
             
@@ -4801,14 +4800,11 @@
                     mPaused = true;
                 } else {
                     if (mLastWin == null) {
-                        if (Config.LOGI) Log.i(
-                            TAG, "Key dispatching not paused: no last window.");
+                        Log.i(TAG, "Key dispatching not paused: no last window.");
                     } else if (mFinished) {
-                        if (Config.LOGI) Log.i(
-                            TAG, "Key dispatching not paused: finished last key.");
+                        Log.i(TAG, "Key dispatching not paused: finished last key.");
                     } else {
-                        if (Config.LOGI) Log.i(
-                            TAG, "Key dispatching not paused: window in higher layer.");
+                        Log.i(TAG, "Key dispatching not paused: window in higher layer.");
                     }
                 }
                 */
@@ -7423,7 +7419,7 @@
     private boolean mInLayout = false;
     private final void performLayoutAndPlaceSurfacesLocked() {
         if (mInLayout) {
-            if (Config.DEBUG) {
+            if (DEBUG) {
                 throw new RuntimeException("Recursive call!");
             }
             Log.w(TAG, "performLayoutAndPlaceSurfacesLocked called while in layout");
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 921ce77..559542a 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -104,8 +104,6 @@
      * @see #EXTRA_STATE
      * @see #EXTRA_INCOMING_NUMBER
      * @see #getCallState
-     * 
-     * @hide pending API Council approval
      */
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_PHONE_STATE_CHANGED =
@@ -122,32 +120,24 @@
      * <p class="note">
      * Retrieve with
      * {@link android.content.Intent#getStringExtra(String)}.
-     * 
-     * @hide pending API Council approval
      */
     public static final String EXTRA_STATE = Phone.STATE_KEY;
 
     /**
      * Value used with {@link #EXTRA_STATE} corresponding to
      * {@link #CALL_STATE_IDLE}.
-     * 
-     * @hide pending API Council approval
      */
     public static final String EXTRA_STATE_IDLE = Phone.State.IDLE.toString();
 
     /**
      * Value used with {@link #EXTRA_STATE} corresponding to
      * {@link #CALL_STATE_RINGING}.
-     * 
-     * @hide pending API Council approval
      */
     public static final String EXTRA_STATE_RINGING = Phone.State.RINGING.toString();
 
     /**
      * Value used with {@link #EXTRA_STATE} corresponding to
      * {@link #CALL_STATE_OFFHOOK}.
-     * 
-     * @hide pending API Council approval
      */
     public static final String EXTRA_STATE_OFFHOOK = Phone.State.OFFHOOK.toString();
 
@@ -159,8 +149,6 @@
      * <p class="note">
      * Retrieve with
      * {@link android.content.Intent#getStringExtra(String)}.
-     * 
-     * @hide pending API Council approval
      */
     public static final String EXTRA_INCOMING_NUMBER = "incoming_number";
 
diff --git a/test-runner/android/test/ProviderTestCase2.java b/test-runner/android/test/ProviderTestCase2.java
index 714b77b..ac17ebf 100644
--- a/test-runner/android/test/ProviderTestCase2.java
+++ b/test-runner/android/test/ProviderTestCase2.java
@@ -8,10 +8,15 @@
 import android.database.DatabaseUtils;
 
 /**
- * If you would like to test a single content provider with an
- * {@link android.test.InstrumentationTestCase}, this provides some of the boiler plate in
- * {@link #setUp} and {@link #tearDown}.
- * @hide pending API council approval
+ * This TestCase class provides a framework for isolated testing of a single
+ * ContentProvider.  It uses a {@link android.test.mock.MockContentResolver} to
+ * access the provider, restricts the provider to an isolated area of the
+ * filesystem (for safely creating & modifying databases & files), and injects
+ * {@link android.test.IsolatedContext} to isolate the ContentProvider from the
+ * rest of the running system.
+ *
+ * <p>This environment is created automatically by {@link #setUp} and {@link
+ * #tearDown}.
  */
 public abstract class ProviderTestCase2<T extends ContentProvider> extends AndroidTestCase {
 
@@ -79,4 +84,4 @@
 
         return resolver;
     }
-}
\ No newline at end of file
+}
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index d6277fa..3bee3b6 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -265,7 +265,6 @@
             wepKeys[i] = null;
     }
 
-    /** {@hide pending API Council approval} */
     public String toString() {
         StringBuffer sbuf = new StringBuffer();
         if (this.status == WifiConfiguration.Status.CURRENT) {