Merge "Fix for Media Server memory leak" into honeycomb-mr1
diff --git a/api/12.xml b/api/12.xml
index 37a81fc..b8b11fe 100644
--- a/api/12.xml
+++ b/api/12.xml
@@ -7913,6 +7913,17 @@
  visibility="public"
 >
 </field>
+<field name="resizeMode"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843619"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="resizeable"
  type="int"
  transient="false"
@@ -9926,6 +9937,17 @@
  visibility="public"
 >
 </field>
+<field name="textCursorDrawable"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843618"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="textEditNoPasteWindowLayout"
  type="int"
  transient="false"
@@ -21131,6 +21153,17 @@
 <parameter name="listener" type="android.animation.ValueAnimator.AnimatorUpdateListener">
 </parameter>
 </method>
+<method name="getAnimatedFraction"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getAnimatedValue"
  return="java.lang.Object"
  abstract="false"
@@ -22680,6 +22713,19 @@
 <parameter name="id" type="int">
 </parameter>
 </method>
+<method name="dispatchGenericMotionEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="ev" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="dispatchKeyEvent"
  return="boolean"
  abstract="false"
@@ -23510,6 +23556,19 @@
  visibility="public"
 >
 </method>
+<method name="onGenericMotionEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="onKeyDown"
  return="boolean"
  abstract="false"
@@ -25027,6 +25086,17 @@
 <parameter name="packageName" type="java.lang.String">
 </parameter>
 </method>
+<field name="MOVE_TASK_NO_USER_ACTION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="MOVE_TASK_WITH_HOME"
  type="int"
  transient="false"
@@ -25458,6 +25528,16 @@
  visibility="public"
 >
 </field>
+<field name="persistentId"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="ActivityManager.RunningAppProcessInfo"
  extends="java.lang.Object"
@@ -27506,6 +27586,19 @@
  visibility="public"
 >
 </method>
+<method name="dispatchGenericMotionEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="ev" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="dispatchKeyEvent"
  return="boolean"
  abstract="false"
@@ -27861,6 +27954,19 @@
  visibility="public"
 >
 </method>
+<method name="onGenericMotionEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="onKeyDown"
  return="boolean"
  abstract="false"
@@ -28537,6 +28643,17 @@
  visibility="public"
 >
 </method>
+<method name="dismissAllowingStateLoss"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getDialog"
  return="android.app.Dialog"
  abstract="false"
@@ -28744,6 +28861,31 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="addCompletedDownload"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="title" type="java.lang.String">
+</parameter>
+<parameter name="description" type="java.lang.String">
+</parameter>
+<parameter name="isMediaScannerScannable" type="boolean">
+</parameter>
+<parameter name="mimeType" type="java.lang.String">
+</parameter>
+<parameter name="path" type="java.lang.String">
+</parameter>
+<parameter name="length" type="long">
+</parameter>
+<parameter name="showNotification" type="boolean">
+</parameter>
+</method>
 <method name="enqueue"
  return="long"
  abstract="false"
@@ -29147,6 +29289,17 @@
  visibility="public"
 >
 </field>
+<field name="INTENT_EXTRAS_SORT_BY_SIZE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.app.DownloadManager.extra_sortBySize&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="PAUSED_QUEUED_FOR_WIFI"
  type="int"
  transient="false"
@@ -29538,6 +29691,17 @@
  visibility="public"
 >
 </field>
+<field name="VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="ExpandableListActivity"
  extends="android.app.Activity"
@@ -30233,9 +30397,26 @@
  synchronized="false"
  static="false"
  final="false"
+ deprecated="deprecated"
+ visibility="public"
+>
+<parameter name="attrs" type="android.util.AttributeSet">
+</parameter>
+<parameter name="savedInstanceState" type="android.os.Bundle">
+</parameter>
+</method>
+<method name="onInflate"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
  deprecated="not deprecated"
  visibility="public"
 >
+<parameter name="activity" type="android.app.Activity">
+</parameter>
 <parameter name="attrs" type="android.util.AttributeSet">
 </parameter>
 <parameter name="savedInstanceState" type="android.os.Bundle">
@@ -30582,6 +30763,19 @@
 <parameter name="visibleCrumbs" type="int">
 </parameter>
 </method>
+<method name="setOnBreadCrumbClickListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener">
+</parameter>
+</method>
 <method name="setParentTitle"
  return="void"
  abstract="false"
@@ -30615,6 +30809,29 @@
 </parameter>
 </method>
 </class>
+<interface name="FragmentBreadCrumbs.OnBreadCrumbClickListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onBreadCrumbClick"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="backStack" type="android.app.FragmentManager.BackStackEntry">
+</parameter>
+<parameter name="flags" type="int">
+</parameter>
+</method>
+</interface>
 <class name="FragmentManager"
  extends="java.lang.Object"
  abstract="true"
@@ -35162,6 +35379,17 @@
  visibility="public"
 >
 </field>
+<field name="EXTRA_NEW_SEARCH"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;new_search&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="EXTRA_SELECT_QUERY"
  type="java.lang.String"
  transient="false"
@@ -39602,6 +39830,50 @@
  visibility="public"
 >
 </field>
+<field name="RESIZE_BOTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="RESIZE_HORIZONTAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="RESIZE_NONE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="RESIZE_VERTICAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="autoAdvanceViewId"
  type="int"
  transient="false"
@@ -39692,6 +39964,16 @@
  visibility="public"
 >
 </field>
+<field name="resizeMode"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="updatePeriodMillis"
  type="int"
  transient="false"
@@ -49100,6 +49382,17 @@
  visibility="public"
 >
 </field>
+<field name="USB_SERVICE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;usb&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="VIBRATOR_SERVICE"
  type="java.lang.String"
  transient="false"
@@ -52954,6 +53247,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_MY_PACKAGE_REPLACED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.MY_PACKAGE_REPLACED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_NEW_OUTGOING_CALL"
  type="java.lang.String"
  transient="false"
@@ -52998,6 +53302,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_PACKAGE_FIRST_LAUNCH"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.PACKAGE_FIRST_LAUNCH&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_PACKAGE_INSTALL"
  type="java.lang.String"
  transient="false"
@@ -54273,6 +54588,17 @@
  visibility="public"
 >
 </field>
+<field name="FLAG_EXCLUDE_STOPPED_PACKAGES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="FLAG_FROM_BACKGROUND"
  type="int"
  transient="false"
@@ -54306,6 +54632,17 @@
  visibility="public"
 >
 </field>
+<field name="FLAG_INCLUDE_STOPPED_PACKAGES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="FLAG_RECEIVER_REGISTERED_ONLY"
  type="int"
  transient="false"
@@ -58121,6 +58458,17 @@
  visibility="public"
 >
 </field>
+<field name="FLAG_STOPPED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2097152"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="FLAG_SUPPORTS_LARGE_SCREENS"
  type="int"
  transient="false"
@@ -60936,6 +61284,28 @@
  visibility="public"
 >
 </field>
+<field name="FEATURE_USB_ACCESSORY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.hardware.usb.accessory&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FEATURE_USB_HOST"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.hardware.usb.host&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="FEATURE_WIFI"
  type="java.lang.String"
  transient="false"
@@ -72295,6 +72665,33 @@
 <parameter name="message" type="java.lang.String">
 </parameter>
 </constructor>
+<constructor name="DrmErrorEvent"
+ type="android.drm.DrmErrorEvent"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uniqueId" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="message" type="java.lang.String">
+</parameter>
+<parameter name="attributes" type="java.util.HashMap&lt;java.lang.String, java.lang.Object&gt;">
+</parameter>
+</constructor>
+<field name="TYPE_ACQUIRE_DRM_INFO_FAILED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2008"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="TYPE_NOT_SUPPORTED"
  type="int"
  transient="false"
@@ -72394,7 +72791,36 @@
 </parameter>
 <parameter name="message" type="java.lang.String">
 </parameter>
+<parameter name="attributes" type="java.util.HashMap&lt;java.lang.String, java.lang.Object&gt;">
+</parameter>
 </constructor>
+<constructor name="DrmEvent"
+ type="android.drm.DrmEvent"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="uniqueId" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="message" type="java.lang.String">
+</parameter>
+</constructor>
+<method name="getAttribute"
+ return="java.lang.Object"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="java.lang.String">
+</parameter>
+</method>
 <method name="getMessage"
  return="java.lang.String"
  abstract="false"
@@ -72428,6 +72854,17 @@
  visibility="public"
 >
 </method>
+<field name="DRM_INFO_OBJECT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;drm_info_object&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="DRM_INFO_STATUS_OBJECT"
  type="java.lang.String"
  transient="false"
@@ -72604,6 +73041,22 @@
 <parameter name="message" type="java.lang.String">
 </parameter>
 </constructor>
+<constructor name="DrmInfoEvent"
+ type="android.drm.DrmInfoEvent"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uniqueId" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="message" type="java.lang.String">
+</parameter>
+<parameter name="attributes" type="java.util.HashMap&lt;java.lang.String, java.lang.Object&gt;">
+</parameter>
+</constructor>
 <field name="TYPE_ACCOUNT_ALREADY_REGISTERED"
  type="int"
  transient="false"
@@ -72648,6 +73101,17 @@
  visibility="public"
 >
 </field>
+<field name="TYPE_RIGHTS_REMOVED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="TYPE_WAIT_FOR_RIGHTS"
  type="int"
  transient="false"
@@ -76248,6 +76712,17 @@
 <parameter name="offsetXY" type="int[]">
 </parameter>
 </method>
+<method name="getByteCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getConfig"
  return="android.graphics.Bitmap.Config"
  abstract="false"
@@ -76270,6 +76745,17 @@
  visibility="public"
 >
 </method>
+<method name="getGenerationId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getHeight"
  return="int"
  abstract="false"
@@ -76487,6 +76973,19 @@
  visibility="public"
 >
 </method>
+<method name="sameAs"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="other" type="android.graphics.Bitmap">
+</parameter>
+</method>
 <method name="setDensity"
  return="void"
  abstract="false"
@@ -76500,6 +76999,19 @@
 <parameter name="density" type="int">
 </parameter>
 </method>
+<method name="setHasAlpha"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="hasAlpha" type="boolean">
+</parameter>
+</method>
 <method name="setPixel"
  return="void"
  abstract="false"
@@ -77335,6 +77847,23 @@
  visibility="public"
 >
 </method>
+<method name="rotate"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="float">
+</parameter>
+<parameter name="y" type="float">
+</parameter>
+<parameter name="z" type="float">
+</parameter>
+</method>
 <method name="rotateX"
  return="void"
  abstract="false"
@@ -77385,6 +77914,23 @@
  visibility="public"
 >
 </method>
+<method name="setLocation"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="float">
+</parameter>
+<parameter name="y" type="float">
+</parameter>
+<parameter name="z" type="float">
+</parameter>
+</method>
 <method name="translate"
  return="void"
  abstract="false"
@@ -90485,7 +91031,7 @@
 <method name="addCallbackBuffer"
  return="void"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="true"
@@ -93949,6 +94495,1334 @@
 </field>
 </class>
 </package>
+<package name="android.hardware.usb"
+>
+<class name="UsbAccessory"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.os.Parcelable">
+</implements>
+<method name="describeContents"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDescription"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getManufacturer"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getModel"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSerial"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getUri"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getVersion"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="writeToParcel"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="parcel" type="android.os.Parcel">
+</parameter>
+<parameter name="flags" type="int">
+</parameter>
+</method>
+<field name="CREATOR"
+ type="android.os.Parcelable.Creator"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="UsbConstants"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="UsbConstants"
+ type="android.hardware.usb.UsbConstants"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<field name="USB_CLASS_APP_SPEC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="254"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_AUDIO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_CDC_DATA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_COMM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_CONTENT_SEC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="13"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_CSCID"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="11"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_HID"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_HUB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_MASS_STORAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_MISC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="239"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_PER_INTERFACE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_PHYSICA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_PRINTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_STILL_IMAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_VENDOR_SPEC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="255"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_VIDEO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_CLASS_WIRELESS_CONTROLLER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="224"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_DIR_IN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="128"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_DIR_OUT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_ENDPOINT_DIR_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="128"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_ENDPOINT_NUMBER_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="15"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_ENDPOINT_XFERTYPE_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_ENDPOINT_XFER_BULK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_ENDPOINT_XFER_CONTROL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_ENDPOINT_XFER_INT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_ENDPOINT_XFER_ISOC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_INTERFACE_SUBCLASS_BOOT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_SUBCLASS_VENDOR_SPEC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="255"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_TYPE_CLASS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_TYPE_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="96"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_TYPE_RESERVED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="96"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_TYPE_STANDARD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="USB_TYPE_VENDOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="64"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="UsbDevice"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.os.Parcelable">
+</implements>
+<method name="describeContents"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceClass"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="name" type="java.lang.String">
+</parameter>
+</method>
+<method name="getDeviceName"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceName"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="id" type="int">
+</parameter>
+</method>
+<method name="getDeviceProtocol"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceSubclass"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getInterface"
+ return="android.hardware.usb.UsbInterface"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="index" type="int">
+</parameter>
+</method>
+<method name="getInterfaceCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getProductId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getVendorId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="writeToParcel"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="parcel" type="android.os.Parcel">
+</parameter>
+<parameter name="flags" type="int">
+</parameter>
+</method>
+<field name="CREATOR"
+ type="android.os.Parcelable.Creator"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="UsbDeviceConnection"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="bulkTransfer"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="endpoint" type="android.hardware.usb.UsbEndpoint">
+</parameter>
+<parameter name="buffer" type="byte[]">
+</parameter>
+<parameter name="length" type="int">
+</parameter>
+<parameter name="timeout" type="int">
+</parameter>
+</method>
+<method name="claimInterface"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="intf" type="android.hardware.usb.UsbInterface">
+</parameter>
+<parameter name="force" type="boolean">
+</parameter>
+</method>
+<method name="close"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="controlTransfer"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="requestType" type="int">
+</parameter>
+<parameter name="request" type="int">
+</parameter>
+<parameter name="value" type="int">
+</parameter>
+<parameter name="index" type="int">
+</parameter>
+<parameter name="buffer" type="byte[]">
+</parameter>
+<parameter name="length" type="int">
+</parameter>
+<parameter name="timeout" type="int">
+</parameter>
+</method>
+<method name="getFileDescriptor"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSerial"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="releaseInterface"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="intf" type="android.hardware.usb.UsbInterface">
+</parameter>
+</method>
+<method name="requestWait"
+ return="android.hardware.usb.UsbRequest"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
+<class name="UsbEndpoint"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.os.Parcelable">
+</implements>
+<method name="describeContents"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getAddress"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getAttributes"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDirection"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getEndpointNumber"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getInterval"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMaxPacketSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="writeToParcel"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="parcel" type="android.os.Parcel">
+</parameter>
+<parameter name="flags" type="int">
+</parameter>
+</method>
+<field name="CREATOR"
+ type="android.os.Parcelable.Creator"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="UsbInterface"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.os.Parcelable">
+</implements>
+<method name="describeContents"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getEndpoint"
+ return="android.hardware.usb.UsbEndpoint"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="index" type="int">
+</parameter>
+</method>
+<method name="getEndpointCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getInterfaceClass"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getInterfaceProtocol"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getInterfaceSubclass"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="writeToParcel"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="parcel" type="android.os.Parcel">
+</parameter>
+<parameter name="flags" type="int">
+</parameter>
+</method>
+<field name="CREATOR"
+ type="android.os.Parcelable.Creator"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="UsbManager"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getAccessoryList"
+ return="android.hardware.usb.UsbAccessory[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceList"
+ return="java.util.HashMap&lt;java.lang.String, android.hardware.usb.UsbDevice&gt;"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="hasPermission"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="device" type="android.hardware.usb.UsbDevice">
+</parameter>
+</method>
+<method name="hasPermission"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="accessory" type="android.hardware.usb.UsbAccessory">
+</parameter>
+</method>
+<method name="openAccessory"
+ return="android.os.ParcelFileDescriptor"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="accessory" type="android.hardware.usb.UsbAccessory">
+</parameter>
+</method>
+<method name="openDevice"
+ return="android.hardware.usb.UsbDeviceConnection"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="device" type="android.hardware.usb.UsbDevice">
+</parameter>
+</method>
+<method name="requestPermission"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="device" type="android.hardware.usb.UsbDevice">
+</parameter>
+<parameter name="pi" type="android.app.PendingIntent">
+</parameter>
+</method>
+<method name="requestPermission"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="accessory" type="android.hardware.usb.UsbAccessory">
+</parameter>
+<parameter name="pi" type="android.app.PendingIntent">
+</parameter>
+</method>
+<field name="ACTION_USB_ACCESSORY_ATTACHED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.hardware.usb.action.USB_ACCESSORY_ATTACHED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ACTION_USB_ACCESSORY_DETACHED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.hardware.usb.action.USB_ACCESSORY_DETACHED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ACTION_USB_DEVICE_ATTACHED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.hardware.usb.action.USB_DEVICE_ATTACHED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ACTION_USB_DEVICE_DETACHED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.hardware.usb.action.USB_DEVICE_DETACHED&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_ACCESSORY"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;accessory&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_DEVICE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;device&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_PERMISSION_GRANTED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;permission&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="UsbRequest"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="UsbRequest"
+ type="android.hardware.usb.UsbRequest"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="cancel"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="close"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getClientData"
+ return="java.lang.Object"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getEndpoint"
+ return="android.hardware.usb.UsbEndpoint"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="initialize"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="connection" type="android.hardware.usb.UsbDeviceConnection">
+</parameter>
+<parameter name="endpoint" type="android.hardware.usb.UsbEndpoint">
+</parameter>
+</method>
+<method name="queue"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="buffer" type="java.nio.ByteBuffer">
+</parameter>
+<parameter name="length" type="int">
+</parameter>
+</method>
+<method name="setClientData"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="java.lang.Object">
+</parameter>
+</method>
+</class>
+</package>
 <package name="android.inputmethodservice"
 >
 <class name="AbstractInputMethodService"
@@ -110687,6 +112561,1268 @@
 </method>
 </interface>
 </package>
+<package name="android.mtp"
+>
+<class name="MtpConstants"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="MtpConstants"
+ type="android.mtp.MtpConstants"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="isAbstractObject"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="format" type="int">
+</parameter>
+</method>
+<field name="ASSOCIATION_TYPE_GENERIC_FOLDER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_3GP_CONTAINER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47492"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_AAC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47363"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_AUDIO_ALBUM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47619"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_AUDIO_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47625"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_AV_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47621"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_DOCUMENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47745"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_IMAGE_ALBUM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47618"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_MEDIACAST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47627"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_MULTIMEDIA_ALBUM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47617"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_VIDEO_ALBUM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47620"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ABSTRACT_VIDEO_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47626"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_AIFF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12295"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ASF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12300"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ASSOCIATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12289"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_ASX_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47635"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_AUDIBLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47364"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_AVI"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12298"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_BMP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14340"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_DPOF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12294"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_EXECUTABLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12291"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_EXIF_JPEG"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14337"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_FLAC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47366"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_GIF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14343"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_HTML"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12293"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_JFIF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14344"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_JP2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14351"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_JPX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14352"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_M3U_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47633"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MP2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47491"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MP3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12297"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MP4_CONTAINER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47490"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MPEG"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12299"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MPL_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47634"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MS_EXCEL_SPREADSHEET"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47749"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MS_POWERPOINT_PRESENTATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47750"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_MS_WORD_DOCUMENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47747"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_OGG"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47362"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_PICT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14346"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_PLS_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47636"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_PNG"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14347"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_SCRIPT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12290"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_TEXT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12292"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_TIFF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14349"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_TIFF_EP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14338"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_UNDEFINED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12288"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_UNDEFINED_AUDIO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47360"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_UNDEFINED_COLLECTION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47616"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_UNDEFINED_DOCUMENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47744"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_UNDEFINED_FIRMWARE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47106"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_UNDEFINED_VIDEO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47488"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_WAV"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12296"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_WINDOWS_IMAGE_FORMAT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47233"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_WMA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47361"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_WMV"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47489"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_WPL_PLAYLIST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47632"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FORMAT_XML_DOCUMENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47746"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTECTION_STATUS_NONE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTECTION_STATUS_NON_TRANSFERABLE_DATA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32771"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTECTION_STATUS_READ_ONLY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32769"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PROTECTION_STATUS_READ_ONLY_DATA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32770"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="MtpDevice"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="MtpDevice"
+ type="android.mtp.MtpDevice"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="device" type="android.hardware.usb.UsbDevice">
+</parameter>
+</constructor>
+<method name="close"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="deleteObject"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="objectHandle" type="int">
+</parameter>
+</method>
+<method name="getDeviceId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceInfo"
+ return="android.mtp.MtpDeviceInfo"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDeviceName"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getObject"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="objectHandle" type="int">
+</parameter>
+<parameter name="objectSize" type="int">
+</parameter>
+</method>
+<method name="getObjectHandles"
+ return="int[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="storageId" type="int">
+</parameter>
+<parameter name="format" type="int">
+</parameter>
+<parameter name="objectHandle" type="int">
+</parameter>
+</method>
+<method name="getObjectInfo"
+ return="android.mtp.MtpObjectInfo"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="objectHandle" type="int">
+</parameter>
+</method>
+<method name="getParent"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="objectHandle" type="int">
+</parameter>
+</method>
+<method name="getStorageId"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="objectHandle" type="int">
+</parameter>
+</method>
+<method name="getStorageIds"
+ return="int[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getStorageInfo"
+ return="android.mtp.MtpStorageInfo"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="storageId" type="int">
+</parameter>
+</method>
+<method name="getThumbnail"
+ return="byte[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="objectHandle" type="int">
+</parameter>
+</method>
+<method name="importFile"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="objectHandle" type="int">
+</parameter>
+<parameter name="destPath" type="java.lang.String">
+</parameter>
+</method>
+<method name="open"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="connection" type="android.hardware.usb.UsbDeviceConnection">
+</parameter>
+</method>
+</class>
+<class name="MtpDeviceInfo"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getManufacturer"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getModel"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSerialNumber"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getVersion"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
+<class name="MtpObjectInfo"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getAssociationDesc"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getAssociationType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getCompressedSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDateCreated"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDateModified"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getFormat"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getImagePixDepth"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getImagePixHeight"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getImagePixWidth"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getKeywords"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getName"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getObjectHandle"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getParent"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getProtectionStatus"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getSequenceNumber"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getStorageId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getThumbCompressedSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getThumbFormat"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getThumbPixHeight"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getThumbPixWidth"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
+<class name="MtpStorageInfo"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getDescription"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getFreeSpace"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMaxCapacity"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getStorageId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getVolumeIdentifier"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
+</package>
 <package name="android.net"
 >
 <class name="ConnectivityManager"
@@ -112468,6 +115604,71 @@
 <parameter name="uid" type="int">
 </parameter>
 </method>
+<method name="getUidRxPackets"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidTcpRxBytes"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidTcpRxSegments"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidTcpTxBytes"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidTcpTxSegments"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
 <method name="getUidTxBytes"
  return="long"
  abstract="false"
@@ -112481,6 +115682,71 @@
 <parameter name="uid" type="int">
 </parameter>
 </method>
+<method name="getUidTxPackets"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidUdpRxBytes"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidUdpRxPackets"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidUdpTxBytes"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
+<method name="getUidUdpTxPackets"
+ return="long"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uid" type="int">
+</parameter>
+</method>
 <field name="UNSUPPORTED"
  type="int"
  transient="false"
@@ -114289,7 +117555,7 @@
  type="android.net.http.SslCertificate"
  static="false"
  final="false"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 <parameter name="issuedTo" type="java.lang.String">
@@ -114604,6 +117870,497 @@
 </field>
 </class>
 </package>
+<package name="android.net.rtp"
+>
+<class name="AudioCodec"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getCodec"
+ return="android.net.rtp.AudioCodec"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="rtpmap" type="java.lang.String">
+</parameter>
+<parameter name="fmtp" type="java.lang.String">
+</parameter>
+</method>
+<method name="getCodecs"
+ return="android.net.rtp.AudioCodec[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<field name="AMR"
+ type="android.net.rtp.AudioCodec"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GSM"
+ type="android.net.rtp.AudioCodec"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GSM_EFR"
+ type="android.net.rtp.AudioCodec"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PCMA"
+ type="android.net.rtp.AudioCodec"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="PCMU"
+ type="android.net.rtp.AudioCodec"
+ transient="false"
+ volatile="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="fmtp"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="rtpmap"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="type"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="AudioGroup"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="AudioGroup"
+ type="android.net.rtp.AudioGroup"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="clear"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMode"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getStreams"
+ return="android.net.rtp.AudioStream[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="sendDtmf"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="int">
+</parameter>
+</method>
+<method name="setMode"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<field name="MODE_ECHO_SUPPRESSION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MODE_MUTED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MODE_NORMAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MODE_ON_HOLD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="AudioStream"
+ extends="android.net.rtp.RtpStream"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="AudioStream"
+ type="android.net.rtp.AudioStream"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="address" type="java.net.InetAddress">
+</parameter>
+<exception name="SocketException" type="java.net.SocketException">
+</exception>
+</constructor>
+<method name="getCodec"
+ return="android.net.rtp.AudioCodec"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getDtmfType"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getGroup"
+ return="android.net.rtp.AudioGroup"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="isBusy"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="join"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="group" type="android.net.rtp.AudioGroup">
+</parameter>
+</method>
+<method name="setCodec"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="codec" type="android.net.rtp.AudioCodec">
+</parameter>
+</method>
+<method name="setDtmfType"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+</method>
+</class>
+<class name="RtpStream"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="associate"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="address" type="java.net.InetAddress">
+</parameter>
+<parameter name="port" type="int">
+</parameter>
+</method>
+<method name="getLocalAddress"
+ return="java.net.InetAddress"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getLocalPort"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getMode"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getRemoteAddress"
+ return="java.net.InetAddress"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getRemotePort"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="isBusy"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="release"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setMode"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<field name="MODE_NORMAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MODE_RECEIVE_ONLY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MODE_SEND_ONLY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+</package>
 <package name="android.net.sip"
 >
 <class name="SipAudioCall"
@@ -115627,6 +119384,17 @@
  visibility="public"
 >
 </method>
+<method name="getAuthUserName"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getAutoRegistration"
  return="boolean"
  abstract="false"
@@ -115829,6 +119597,19 @@
  visibility="public"
 >
 </method>
+<method name="setAuthUserName"
+ return="android.net.sip.SipProfile.Builder"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="name" type="java.lang.String">
+</parameter>
+</method>
 <method name="setAutoRegistration"
  return="android.net.sip.SipProfile.Builder"
  abstract="false"
@@ -117869,6 +121650,17 @@
  visibility="public"
 >
 </field>
+<field name="WIFI_MODE_FULL_HIGH_PERF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="WIFI_MODE_SCAN_ONLY"
  type="int"
  transient="false"
@@ -140062,6 +143854,17 @@
  visibility="public"
 >
 </field>
+<field name="HONEYCOMB_MR1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 </class>
 <class name="Bundle"
  extends="java.lang.Object"
@@ -140321,6 +144124,21 @@
 <parameter name="key" type="java.lang.String">
 </parameter>
 </method>
+<method name="getCharSequence"
+ return="java.lang.CharSequence"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="java.lang.String">
+</parameter>
+<parameter name="defaultValue" type="java.lang.CharSequence">
+</parameter>
+</method>
 <method name="getCharSequenceArray"
  return="java.lang.CharSequence[]"
  abstract="false"
@@ -140654,6 +144472,21 @@
 <parameter name="key" type="java.lang.String">
 </parameter>
 </method>
+<method name="getString"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="java.lang.String">
+</parameter>
+<parameter name="defaultValue" type="java.lang.String">
+</parameter>
+</method>
 <method name="getStringArray"
  return="java.lang.String[]"
  abstract="false"
@@ -146206,6 +150039,17 @@
  visibility="public"
 >
 </method>
+<method name="detachFd"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="fromSocket"
  return="android.os.ParcelFileDescriptor"
  abstract="false"
@@ -146219,6 +150063,17 @@
 <parameter name="socket" type="java.net.Socket">
 </parameter>
 </method>
+<method name="getFd"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getFileDescriptor"
  return="java.io.FileDescriptor"
  abstract="false"
@@ -152703,6 +156558,17 @@
  visibility="public"
 >
 </field>
+<field name="EXTRA_CREATE_NEW_TAB"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;create_new_tab&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="EXTRA_HEADERS"
  type="java.lang.String"
  transient="false"
@@ -161659,6 +165525,19 @@
  visibility="public"
 >
 </method>
+<method name="getVersion"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+</method>
 <field name="ACTION_IMAGE_CAPTURE"
  type="java.lang.String"
  transient="false"
@@ -191322,7 +195201,7 @@
  synchronized="false"
  static="false"
  final="false"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 <parameter name="contextStart" type="int">
@@ -194263,10 +198142,10 @@
  synchronized="false"
  static="true"
  final="false"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
-<parameter name="addr" type="int">
+<parameter name="ipv4Address" type="int">
 </parameter>
 </method>
 <method name="formatShortFileSize"
@@ -195280,6 +199159,23 @@
 <parameter name="buffer" type="android.text.Spannable">
 </parameter>
 </method>
+<method name="onGenericMotionEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="widget" type="android.widget.TextView">
+</parameter>
+<parameter name="text" type="android.text.Spannable">
+</parameter>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="onKeyDown"
  return="boolean"
  abstract="false"
@@ -196353,6 +200249,23 @@
 <parameter name="text" type="android.text.Spannable">
 </parameter>
 </method>
+<method name="onGenericMotionEvent"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="widget" type="android.widget.TextView">
+</parameter>
+<parameter name="text" type="android.text.Spannable">
+</parameter>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="onKeyDown"
  return="boolean"
  abstract="true"
@@ -203017,6 +206930,223 @@
 </parameter>
 </method>
 </class>
+<class name="LruCache"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="LruCache"
+ type="android.util.LruCache"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="maxSize" type="int">
+</parameter>
+</constructor>
+<method name="create"
+ return="V"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="key" type="K">
+</parameter>
+</method>
+<method name="createCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="entryRemoved"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="evicted" type="boolean">
+</parameter>
+<parameter name="key" type="K">
+</parameter>
+<parameter name="oldValue" type="V">
+</parameter>
+<parameter name="newValue" type="V">
+</parameter>
+</method>
+<method name="evictAll"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="evictionCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="get"
+ return="V"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="K">
+</parameter>
+</method>
+<method name="hitCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="maxSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="missCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="put"
+ return="V"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="K">
+</parameter>
+<parameter name="value" type="V">
+</parameter>
+</method>
+<method name="putCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="remove"
+ return="V"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="K">
+</parameter>
+</method>
+<method name="size"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="sizeOf"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="key" type="K">
+</parameter>
+<parameter name="value" type="V">
+</parameter>
+</method>
+<method name="snapshot"
+ return="java.util.Map&lt;K, V&gt;"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="toString"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
 <class name="MalformedJsonException"
  extends="java.io.IOException"
  abstract="false"
@@ -206984,9 +211114,35 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="rangeType" type="int">
+<parameter name="axis" type="int">
 </parameter>
 </method>
+<method name="getMotionRange"
+ return="android.view.InputDevice.MotionRange"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+<parameter name="source" type="int">
+</parameter>
+</method>
+<method name="getMotionRanges"
+ return="java.util.List&lt;android.view.InputDevice.MotionRange&gt;"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getName"
  return="java.lang.String"
  abstract="false"
@@ -207074,7 +211230,7 @@
  value="8"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207085,7 +211241,7 @@
  value="2"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207096,7 +211252,7 @@
  value="3"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207107,7 +211263,7 @@
  value="6"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207118,7 +211274,7 @@
  value="7"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207129,7 +211285,7 @@
  value="4"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207140,7 +211296,7 @@
  value="5"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207151,7 +211307,7 @@
  value="0"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207162,7 +211318,7 @@
  value="1"
  static="true"
  final="true"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </field>
@@ -207188,6 +211344,17 @@
  visibility="public"
 >
 </field>
+<field name="SOURCE_CLASS_JOYSTICK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="SOURCE_CLASS_MASK"
  type="int"
  transient="false"
@@ -207243,6 +211410,28 @@
  visibility="public"
 >
 </field>
+<field name="SOURCE_GAMEPAD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1025"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SOURCE_JOYSTICK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16777232"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="SOURCE_KEYBOARD"
  type="int"
  transient="false"
@@ -207318,6 +211507,17 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="getAxis"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getFlat"
  return="float"
  abstract="false"
@@ -207373,6 +211573,17 @@
  visibility="public"
 >
 </method>
+<method name="getSource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 </class>
 <class name="InputEvent"
  extends="java.lang.Object"
@@ -208213,6 +212424,17 @@
 <parameter name="c" type="int">
 </parameter>
 </method>
+<method name="getDeviceId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getDisplayLabel"
  return="char"
  abstract="false"
@@ -208386,6 +212608,17 @@
  visibility="public"
 >
 </method>
+<method name="getSource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getUnicodeChar"
  return="int"
  abstract="false"
@@ -208489,6 +212722,19 @@
  visibility="public"
 >
 </method>
+<method name="isGamepadButton"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyCode" type="int">
+</parameter>
+</method>
 <method name="isLongPress"
  return="boolean"
  abstract="false"
@@ -208601,6 +212847,32 @@
  visibility="public"
 >
 </method>
+<method name="keyCodeFromString"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="symbolicName" type="java.lang.String">
+</parameter>
+</method>
+<method name="keyCodeToString"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyCode" type="int">
+</parameter>
+</method>
 <method name="metaStateHasModifiers"
  return="boolean"
  abstract="false"
@@ -208642,6 +212914,19 @@
 <parameter name="metaState" type="int">
 </parameter>
 </method>
+<method name="setSource"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="source" type="int">
+</parameter>
+</method>
 <method name="startTracking"
  return="void"
  abstract="false"
@@ -209085,6 +213370,182 @@
  visibility="public"
 >
 </field>
+<field name="KEYCODE_BUTTON_1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="188"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_10"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="197"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_11"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="198"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_12"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="199"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_13"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="200"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_14"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="201"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_15"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="202"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_16"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="203"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="189"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="190"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="191"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_5"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="192"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_6"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="193"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_7"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="194"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_8"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="195"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEYCODE_BUTTON_9"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="196"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="KEYCODE_BUTTON_A"
  type="int"
  transient="false"
@@ -212676,6 +217137,32 @@
 <parameter name="metaState" type="int">
 </parameter>
 </method>
+<method name="axisFromString"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="symbolicName" type="java.lang.String">
+</parameter>
+</method>
+<method name="axisToString"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+</method>
 <method name="findPointerIndex"
  return="int"
  abstract="false"
@@ -212722,6 +217209,45 @@
  visibility="public"
 >
 </method>
+<method name="getAxisValue"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+</method>
+<method name="getAxisValue"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+<parameter name="pointerIndex" type="int">
+</parameter>
+</method>
+<method name="getDeviceId"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getDownTime"
  return="long"
  abstract="false"
@@ -212766,6 +217292,38 @@
  visibility="public"
 >
 </method>
+<method name="getHistoricalAxisValue"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+<parameter name="pos" type="int">
+</parameter>
+</method>
+<method name="getHistoricalAxisValue"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+<parameter name="pointerIndex" type="int">
+</parameter>
+<parameter name="pos" type="int">
+</parameter>
+</method>
 <method name="getHistoricalEventTime"
  return="long"
  abstract="false"
@@ -213203,6 +217761,17 @@
 <parameter name="pointerIndex" type="int">
 </parameter>
 </method>
+<method name="getSource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getToolMajor"
  return="float"
  abstract="false"
@@ -213511,7 +218080,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="o" type="android.view.MotionEvent">
+<parameter name="other" type="android.view.MotionEvent">
 </parameter>
 </method>
 <method name="obtainNoHistory"
@@ -213524,7 +218093,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="o" type="android.view.MotionEvent">
+<parameter name="other" type="android.view.MotionEvent">
 </parameter>
 </method>
 <method name="offsetLocation"
@@ -213594,6 +218163,19 @@
 <parameter name="y" type="float">
 </parameter>
 </method>
+<method name="setSource"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="source" type="int">
+</parameter>
+</method>
 <method name="transform"
  return="void"
  abstract="false"
@@ -213644,6 +218226,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_HOVER_MOVE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_MASK"
  type="int"
  transient="false"
@@ -213809,6 +218402,17 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_SCROLL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_UP"
  type="int"
  transient="false"
@@ -213820,6 +218424,446 @@
  visibility="public"
 >
 </field>
+<field name="AXIS_BRAKE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="23"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GAS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="22"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_10"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="41"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_11"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="42"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_12"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="43"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_13"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="44"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_14"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="45"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_15"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="46"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_16"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="47"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_5"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_6"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="37"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_7"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="38"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_8"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="39"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_GENERIC_9"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="40"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_HAT_X"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="15"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_HAT_Y"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_HSCROLL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_LTRIGGER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="17"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_ORIENTATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_PRESSURE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_RTRIGGER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="18"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_RUDDER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="20"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_RX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_RY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="13"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_RZ"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="14"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_THROTTLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="19"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_TOOL_MAJOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_TOOL_MINOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_TOUCH_MAJOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_TOUCH_MINOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_VSCROLL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_WHEEL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="21"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_X"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_Y"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="AXIS_Z"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="11"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="CREATOR"
  type="android.os.Parcelable.Creator"
  transient="false"
@@ -213902,6 +218946,68 @@
  visibility="public"
 >
 </constructor>
+<constructor name="MotionEvent.PointerCoords"
+ type="android.view.MotionEvent.PointerCoords"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="other" type="android.view.MotionEvent.PointerCoords">
+</parameter>
+</constructor>
+<method name="clear"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="copyFrom"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="other" type="android.view.MotionEvent.PointerCoords">
+</parameter>
+</method>
+<method name="getAxisValue"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+</method>
+<method name="setAxisValue"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="axis" type="int">
+</parameter>
+<parameter name="value" type="float">
+</parameter>
+</method>
 <field name="orientation"
  type="float"
  transient="false"
@@ -215888,6 +220994,19 @@
 <parameter name="focusableMode" type="int">
 </parameter>
 </method>
+<method name="addOnAttachStateChangeListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.view.View.OnAttachStateChangeListener">
+</parameter>
+</method>
 <method name="addOnLayoutChangeListener"
  return="void"
  abstract="false"
@@ -215914,6 +221033,17 @@
 <parameter name="views" type="java.util.ArrayList&lt;android.view.View&gt;">
 </parameter>
 </method>
+<method name="animate"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="awakenScrollBars"
  return="boolean"
  abstract="false"
@@ -215988,6 +221118,17 @@
 <parameter name="autoScale" type="boolean">
 </parameter>
 </method>
+<method name="buildLayer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="cancelLongPress"
  return="void"
  abstract="false"
@@ -216202,6 +221343,19 @@
 <parameter name="canvas" type="android.graphics.Canvas">
 </parameter>
 </method>
+<method name="dispatchGenericMotionEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="dispatchKeyEvent"
  return="boolean"
  abstract="false"
@@ -218357,6 +223511,19 @@
 <parameter name="previouslyFocusedRect" type="android.graphics.Rect">
 </parameter>
 </method>
+<method name="onGenericMotionEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="onKeyDown"
  return="boolean"
  abstract="false"
@@ -218865,6 +224032,19 @@
 <parameter name="action" type="java.lang.Runnable">
 </parameter>
 </method>
+<method name="removeOnAttachStateChangeListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.view.View.OnAttachStateChangeListener">
+</parameter>
+</method>
 <method name="removeOnLayoutChangeListener"
  return="void"
  abstract="false"
@@ -219189,6 +224369,19 @@
 <parameter name="bottom" type="int">
 </parameter>
 </method>
+<method name="setCameraDistance"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="distance" type="float">
+</parameter>
+</method>
 <method name="setClickable"
  return="void"
  abstract="false"
@@ -219609,6 +224802,19 @@
 <parameter name="l" type="android.view.View.OnFocusChangeListener">
 </parameter>
 </method>
+<method name="setOnGenericMotionListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="l" type="android.view.View.OnGenericMotionListener">
+</parameter>
+</method>
 <method name="setOnKeyListener"
  return="void"
  abstract="false"
@@ -221186,6 +226392,40 @@
 >
 </field>
 </class>
+<interface name="View.OnAttachStateChangeListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onViewAttachedToWindow"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="v" type="android.view.View">
+</parameter>
+</method>
+<method name="onViewDetachedFromWindow"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="v" type="android.view.View">
+</parameter>
+</method>
+</interface>
 <interface name="View.OnClickListener"
  abstract="true"
  static="true"
@@ -221278,6 +226518,29 @@
 </parameter>
 </method>
 </interface>
+<interface name="View.OnGenericMotionListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onGenericMotion"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="v" type="android.view.View">
+</parameter>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
+</interface>
 <interface name="View.OnKeyListener"
  abstract="true"
  static="true"
@@ -221489,6 +226752,28 @@
  visibility="public"
 >
 </method>
+<method name="getKeyRepeatDelay"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getKeyRepeatTimeout"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getLongPressTimeout"
  return="int"
  abstract="false"
@@ -224079,6 +229364,314 @@
 </parameter>
 </method>
 </interface>
+<class name="ViewPropertyAnimator"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="alpha"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="alphaBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="rotation"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="rotationBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="rotationX"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="rotationXBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="rotationY"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="rotationYBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="scaleX"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="scaleXBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="scaleY"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="scaleYBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="setDuration"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="duration" type="long">
+</parameter>
+</method>
+<method name="setInterpolator"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="interpolator" type="android.animation.TimeInterpolator">
+</parameter>
+</method>
+<method name="setListener"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.animation.Animator.AnimatorListener">
+</parameter>
+</method>
+<method name="translationX"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="translationXBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="translationY"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="translationYBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="x"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="xBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="y"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+<method name="yBy"
+ return="android.view.ViewPropertyAnimator"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+</method>
+</class>
 <class name="ViewStub"
  extends="android.view.View"
  abstract="false"
@@ -225371,6 +230964,19 @@
 <parameter name="hardwareAccelerated" type="boolean">
 </parameter>
 </method>
+<method name="superDispatchGenericMotionEvent"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="superDispatchKeyEvent"
  return="boolean"
  abstract="true"
@@ -225716,6 +231322,19 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="dispatchGenericMotionEvent"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.MotionEvent">
+</parameter>
+</method>
 <method name="dispatchKeyEvent"
  return="boolean"
  abstract="true"
@@ -228295,6 +233914,17 @@
  visibility="protected"
 >
 </method>
+<method name="getBackgroundColor"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getDetachWallpaper"
  return="boolean"
  abstract="false"
@@ -228580,6 +234210,19 @@
 <parameter name="listener" type="android.view.animation.Animation.AnimationListener">
 </parameter>
 </method>
+<method name="setBackgroundColor"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="bg" type="int">
+</parameter>
+</method>
 <method name="setDetachWallpaper"
  return="void"
  abstract="false"
@@ -233738,6 +239381,19 @@
 >
 <implements name="android.os.Parcelable">
 </implements>
+<method name="containsExtraValueKey"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="java.lang.String">
+</parameter>
+</method>
 <method name="describeContents"
  return="int"
  abstract="false"
@@ -233760,6 +239416,19 @@
  visibility="public"
 >
 </method>
+<method name="getExtraValueOf"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="key" type="java.lang.String">
+</parameter>
+</method>
 <method name="getIconResId"
  return="int"
  abstract="false"
@@ -234231,6 +239900,17 @@
  visibility="public"
 >
 </method>
+<method name="allowFileSchemeCookies"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getCookie"
  return="java.lang.String"
  abstract="false"
@@ -234312,6 +239992,19 @@
 <parameter name="accept" type="boolean">
 </parameter>
 </method>
+<method name="setAcceptFileSchemeCookies"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="accept" type="boolean">
+</parameter>
+</method>
 <method name="setCookie"
  return="void"
  abstract="false"
@@ -237982,7 +243675,7 @@
  synchronized="false"
  static="false"
  final="false"
- deprecated="not deprecated"
+ deprecated="deprecated"
  visibility="public"
 >
 </method>
@@ -238996,6 +244689,25 @@
 <parameter name="realm" type="java.lang.String">
 </parameter>
 </method>
+<method name="onReceivedLoginRequest"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="view" type="android.webkit.WebView">
+</parameter>
+<parameter name="realm" type="java.lang.String">
+</parameter>
+<parameter name="account" type="java.lang.String">
+</parameter>
+<parameter name="args" type="java.lang.String">
+</parameter>
+</method>
 <method name="onReceivedSslError"
  return="void"
  abstract="false"
@@ -245009,6 +250721,17 @@
 <parameter name="defStyle" type="int">
 </parameter>
 </constructor>
+<method name="getCalendarView"
+ return="android.widget.CalendarView"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getCalendarViewShown"
  return="boolean"
  abstract="false"
@@ -253384,6 +259107,21 @@
 <parameter name="started" type="boolean">
 </parameter>
 </method>
+<method name="setDisplayedChild"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="viewId" type="int">
+</parameter>
+<parameter name="childIndex" type="int">
+</parameter>
+</method>
 <method name="setDouble"
  return="void"
  abstract="false"
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index fc07478..80bed0d 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1442,7 +1442,7 @@
      * {@link Intent#resolveActivity} finds an activity if a class has not
      * been explicitly specified.
      *
-     * <p><em>Note: if using an implicit Intent (without an explicit ComponentName
+     * <p><em>Note:</em> if using an implicit Intent (without an explicit ComponentName
      * specified), be sure to consider whether to set the {@link #MATCH_DEFAULT_ONLY}
      * only flag.  You need to do so to resolve the activity in the same way
      * that {@link android.content.Context#startActivity(Intent)} and
diff --git a/core/java/android/webkit/HTML5VideoFullScreen.java b/core/java/android/webkit/HTML5VideoFullScreen.java
index f52fa66..0510f8b 100644
--- a/core/java/android/webkit/HTML5VideoFullScreen.java
+++ b/core/java/android/webkit/HTML5VideoFullScreen.java
@@ -114,6 +114,13 @@
         return mVideoSurfaceView;
     }
 
+    @Override
+    public void start() {
+        if (getAutostart()) {
+            super.start();
+        }
+    }
+
     HTML5VideoFullScreen(Context context, int videoLayerId, int position,
             boolean autoStart) {
         mVideoSurfaceView = new VideoSurfaceView(context);
diff --git a/core/java/android/webkit/HTML5VideoInline.java b/core/java/android/webkit/HTML5VideoInline.java
index 4f042a6..25921bc 100644
--- a/core/java/android/webkit/HTML5VideoInline.java
+++ b/core/java/android/webkit/HTML5VideoInline.java
@@ -20,7 +20,9 @@
     // Video control FUNCTIONS:
     @Override
     public void start() {
-        super.start();
+        if (!getPauseDuringPreparing()) {
+            super.start();
+        }
     }
 
     HTML5VideoInline(int videoLayerId, int position,
diff --git a/core/java/android/webkit/HTML5VideoView.java b/core/java/android/webkit/HTML5VideoView.java
index cd2264c..8ea73b5 100644
--- a/core/java/android/webkit/HTML5VideoView.java
+++ b/core/java/android/webkit/HTML5VideoView.java
@@ -65,6 +65,7 @@
     // The spec says the timer should fire every 250 ms or less.
     private static final int TIMEUPDATE_PERIOD = 250;  // ms
 
+    protected boolean mPauseDuringPreparing;
     // common Video control FUNCTIONS:
     public void start() {
         if (mCurrentState == STATE_PREPARED) {
@@ -83,8 +84,9 @@
     public void pause() {
         if (mCurrentState == STATE_PREPARED && mPlayer.isPlaying()) {
             mPlayer.pause();
+        } else if (mCurrentState == STATE_NOTPREPARED) {
+            mPauseDuringPreparing = true;
         }
-
         // Delete the Timer to stop it since there is no stop call.
         if (mTimer != null) {
             mTimer.purge();
@@ -133,6 +135,10 @@
         return mAutostart;
     }
 
+    public boolean getPauseDuringPreparing() {
+        return mPauseDuringPreparing;
+    }
+
     // Every time we start a new Video, we create a VideoView and a MediaPlayer
     public void init(int videoLayerId, int position, boolean autoStart) {
         mPlayer = new MediaPlayer();
@@ -142,6 +148,7 @@
         mSaveSeekTime = position;
         mAutostart = autoStart;
         mTimer = null;
+        mPauseDuringPreparing = false;
     }
 
     protected HTML5VideoView() {
@@ -242,15 +249,17 @@
         if (mProxy != null) {
             mProxy.onPrepared(mp);
         }
+        if (mPauseDuringPreparing) {
+            pauseAndDispatch(mProxy);
+            mPauseDuringPreparing = false;
+        }
     }
 
     // Pause the play and update the play/pause button
     public void pauseAndDispatch(HTML5VideoViewProxy proxy) {
-        if (isPlaying()) {
-            pause();
-            if (proxy != null) {
-                proxy.dispatchOnPaused();
-            }
+        pause();
+        if (proxy != null) {
+            proxy.dispatchOnPaused();
         }
     }
 
diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java
index d12b965..094566f 100644
--- a/core/java/android/webkit/HTML5VideoViewProxy.java
+++ b/core/java/android/webkit/HTML5VideoViewProxy.java
@@ -224,10 +224,8 @@
         }
 
         public static void onPrepared() {
-            if (!mHTML5VideoView.isFullScreenMode() ||
-                    mHTML5VideoView.isFullScreenMode() &&
-                    mHTML5VideoView.getAutostart() )
-                mHTML5VideoView.start();
+            // The VideoView will decide whether to really kick off to play.
+            mHTML5VideoView.start();
             if (mBaseLayer != 0) {
                 setBaseLayer(mBaseLayer);
             }
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 25e66b4..d8c64f0 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -987,7 +987,7 @@
     <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> od <xliff:g id="TOTAL">%d</xliff:g>"</item>
   </plurals>
     <string name="action_mode_done" msgid="7217581640461922289">"Gotovo"</string>
-    <string name="progress_unmounting" product="nosdcard" msgid="535863554318797377">"Isključivanje memorije USB..."</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="535863554318797377">"Isključivanje USB memorije..."</string>
     <string name="progress_unmounting" product="default" msgid="5556813978958789471">"Isključivanje SD kartice..."</string>
     <string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Brisanje memorije USB..."</string>
     <string name="progress_erasing" product="default" msgid="2115214724367534095">"Brisanje SD kartice..."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 10a2898..1c4ff09 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -825,7 +825,7 @@
     <string name="anr_application_process" msgid="4185842666452210193">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> (в процессе <xliff:g id="PROCESS">%2$s</xliff:g>) не отвечает."</string>
     <string name="anr_process" msgid="1246866008169975783">"Процесс <xliff:g id="PROCESS">%1$s</xliff:g> не отвечает."</string>
     <string name="force_close" msgid="3653416315450806396">"Закрыть"</string>
-    <string name="report" msgid="4060218260984795706">"Отчет"</string>
+    <string name="report" msgid="4060218260984795706">"Отзыв"</string>
     <string name="wait" msgid="7147118217226317732">"Подождать"</string>
     <string name="launch_warning_title" msgid="8323761616052121936">"Приложение перенаправлено"</string>
     <string name="launch_warning_replace" msgid="6202498949970281412">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> выполняется."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 58b681e..ad4eee7 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -896,7 +896,7 @@
     <string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USB depolama birimini açarsanız, kullanmakta olduğunuz bazı uygulamalar durur ve USB depolama birimi kapatılıncaya kadar kullanılamayabilir."</string>
     <string name="dlg_error_title" msgid="8048999973837339174">"USB işlemi başarısız oldu"</string>
     <string name="dlg_ok" msgid="7376953167039865701">"Tamam"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USB dep br biçimlndr"</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USB\'yi biçimlendir"</string>
     <string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD kartı biçimlendir"</string>
     <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"USB depolama birimi biçimlendirilsin mi? Depolama biriminde saklanan tüm dosyalar silinir. İşlem geri alınamaz!"</string>
     <string name="extmedia_format_message" product="default" msgid="3621369962433523619">"SD kartı biçimlendirmek istediğinizden emin misiniz? Kartınızdaki tüm veriler yok olacak."</string>
diff --git a/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java b/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java
index 5dedd4a..7f13791 100644
--- a/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java
+++ b/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java
@@ -60,6 +60,7 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        mTestUtils.disable(adapter);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("enable iteration " + (i + 1) + " of " + iterations);
@@ -78,7 +79,9 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
+        mTestUtils.undiscoverable(adapter);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("discoverable iteration " + (i + 1) + " of " + iterations);
@@ -99,7 +102,9 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
+        mTestUtils.stopScan(adapter);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("scan iteration " + (i + 1) + " of " + iterations);
@@ -116,7 +121,9 @@
     public void testEnablePan() {
         int iterations = BluetoothTestRunner.sEnablePanIterations;
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
+        mTestUtils.disablePan(adapter);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("testEnablePan iteration " + (i + 1) + " of "
@@ -141,13 +148,15 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sPairAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
+        mTestUtils.unpair(adapter, device);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("pair iteration " + (i + 1) + " of " + iterations);
-            mTestUtils.pair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                    BluetoothTestRunner.sPairPin);
+            mTestUtils.pair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                    BluetoothTestRunner.sDevicePairPin);
             mTestUtils.unpair(adapter, device);
         }
         mTestUtils.disable(adapter);
@@ -162,13 +171,15 @@
     public void testAcceptPair() {
         int iterations = BluetoothTestRunner.sPairIterations;
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sPairAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
+        mTestUtils.unpair(adapter, device);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("acceptPair iteration " + (i + 1) + " of " + iterations);
-            mTestUtils.acceptPair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                    BluetoothTestRunner.sPairPin);
+            mTestUtils.acceptPair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                    BluetoothTestRunner.sDevicePairPin);
             mTestUtils.unpair(adapter, device);
         }
         mTestUtils.disable(adapter);
@@ -187,15 +198,20 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sA2dpAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
-        mTestUtils.pair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                BluetoothTestRunner.sPairPin);
+        mTestUtils.unpair(adapter, device);
+        mTestUtils.pair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                BluetoothTestRunner.sDevicePairPin);
+        mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.A2DP, null);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("connectA2dp iteration " + (i + 1) + " of " + iterations);
-            mTestUtils.connectProfile(adapter, device, BluetoothProfile.A2DP);
-            mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.A2DP);
+            mTestUtils.connectProfile(adapter, device, BluetoothProfile.A2DP,
+                    String.format("connectA2dp(device=%s)", device));
+            mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.A2DP,
+                    String.format("disconnectA2dp(device=%s)", device));
         }
 
         mTestUtils.unpair(adapter, device);
@@ -215,15 +231,20 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sHeadsetAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
-        mTestUtils.pair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                BluetoothTestRunner.sPairPin);
+        mTestUtils.unpair(adapter, device);
+        mTestUtils.pair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                BluetoothTestRunner.sDevicePairPin);
+        mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.HEADSET, null);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("connectHeadset iteration " + (i + 1) + " of " + iterations);
-            mTestUtils.connectProfile(adapter, device, BluetoothProfile.HEADSET);
-            mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.HEADSET);
+            mTestUtils.connectProfile(adapter, device, BluetoothProfile.HEADSET,
+                    String.format("connectHeadset(device=%s)", device));
+            mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.HEADSET,
+                    String.format("disconnectHeadset(device=%s)", device));
         }
 
         mTestUtils.unpair(adapter, device);
@@ -243,15 +264,20 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sInputAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
-        mTestUtils.pair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                BluetoothTestRunner.sPairPin);
+        mTestUtils.unpair(adapter, device);
+        mTestUtils.pair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                BluetoothTestRunner.sDevicePairPin);
+        mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.INPUT_DEVICE, null);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("connectInput iteration " + (i + 1) + " of " + iterations);
-            mTestUtils.connectProfile(adapter, device, BluetoothProfile.INPUT_DEVICE);
-            mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.INPUT_DEVICE);
+            mTestUtils.connectProfile(adapter, device, BluetoothProfile.INPUT_DEVICE,
+                    String.format("connectInput(device=%s)", device));
+            mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.INPUT_DEVICE,
+                    String.format("disconnectInput(device=%s)", device));
         }
 
         mTestUtils.unpair(adapter, device);
@@ -271,10 +297,12 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sPanAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
-        mTestUtils.pair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                BluetoothTestRunner.sPairPin);
+        mTestUtils.unpair(adapter, device);
+        mTestUtils.pair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                BluetoothTestRunner.sDevicePairPin);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("connectPan iteration " + (i + 1) + " of " + iterations);
@@ -299,11 +327,14 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sPanAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
+        mTestUtils.disablePan(adapter);
         mTestUtils.enablePan(adapter);
-        mTestUtils.acceptPair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                BluetoothTestRunner.sPairPin);
+        mTestUtils.unpair(adapter, device);
+        mTestUtils.acceptPair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                BluetoothTestRunner.sDevicePairPin);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("incomingPanConnection iteration " + (i + 1) + " of "
@@ -330,11 +361,15 @@
         }
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sHeadsetAddress);
+        BluetoothDevice device = adapter.getRemoteDevice(BluetoothTestRunner.sDeviceAddress);
+        mTestUtils.disable(adapter);
         mTestUtils.enable(adapter);
-        mTestUtils.pair(adapter, device, BluetoothTestRunner.sPairPasskey,
-                BluetoothTestRunner.sPairPin);
-        mTestUtils.connectProfile(adapter, device, BluetoothProfile.HEADSET);
+        mTestUtils.unpair(adapter, device);
+        mTestUtils.pair(adapter, device, BluetoothTestRunner.sDevicePairPasskey,
+                BluetoothTestRunner.sDevicePairPin);
+        mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.HEADSET, null);
+        mTestUtils.connectProfile(adapter, device, BluetoothProfile.HEADSET, null);
+        mTestUtils.stopSco(adapter, device);
 
         for (int i = 0; i < iterations; i++) {
             mTestUtils.writeOutput("startStopSco iteration " + (i + 1) + " of " + iterations);
@@ -342,7 +377,7 @@
             mTestUtils.stopSco(adapter, device);
         }
 
-        mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.HEADSET);
+        mTestUtils.disconnectProfile(adapter, device, BluetoothProfile.HEADSET, null);
         mTestUtils.unpair(adapter, device);
         mTestUtils.disable(adapter);
     }
diff --git a/core/tests/coretests/src/android/bluetooth/BluetoothTestRunner.java b/core/tests/coretests/src/android/bluetooth/BluetoothTestRunner.java
index 1febc5c..64d2c12 100644
--- a/core/tests/coretests/src/android/bluetooth/BluetoothTestRunner.java
+++ b/core/tests/coretests/src/android/bluetooth/BluetoothTestRunner.java
@@ -65,14 +65,9 @@
     public static int sConnectPanIterations = 100;
     public static int sStartStopScoIterations = 100;
 
-    public static String sPairAddress = "";
-    public static String sHeadsetAddress = "";
-    public static String sA2dpAddress = "";
-    public static String sInputAddress = "";
-    public static String sPanAddress = "";
-
-    public static byte[] sPairPin = {'1', '2', '3', '4'};
-    public static int sPairPasskey = 123456;
+    public static String sDeviceAddress = "";
+    public static byte[] sDevicePairPin = {'1', '2', '3', '4'};
+    public static int sDevicePairPasskey = 123456;
 
     @Override
     public TestSuite getAllTests() {
@@ -177,40 +172,24 @@
                 // Invalid argument, fall back to default value
             }
         }
-        val = arguments.getString("pair_address");
+
+        val = arguments.getString("device_address");
         if (val != null) {
-            sPairAddress = val;
+            sDeviceAddress = val;
         }
 
-        val = arguments.getString("headset_address");
+        val = arguments.getString("device_pair_pin");
         if (val != null) {
-            sHeadsetAddress = val;
+            byte[] pin = BluetoothDevice.convertPinToBytes(val);
+            if (pin != null) {
+                sDevicePairPin = pin;
+            }
         }
 
-        val = arguments.getString("a2dp_address");
-        if (val != null) {
-            sA2dpAddress = val;
-        }
-
-        val = arguments.getString("input_address");
-        if (val != null) {
-            sInputAddress = val;
-        }
-
-        val = arguments.getString("pan_address");
-        if (val != null) {
-            sPanAddress = val;
-        }
-
-        val = arguments.getString("pair_pin");
-        if (val != null) {
-            sPairPin = BluetoothDevice.convertPinToBytes(val);
-        }
-
-        val = arguments.getString("pair_passkey");
+        val = arguments.getString("device_pair_passkey");
         if (val != null) {
             try {
-                sPairPasskey = Integer.parseInt(val);
+                sDevicePairPasskey = Integer.parseInt(val);
             } catch (NumberFormatException e) {
                 // Invalid argument, fall back to default value
             }
@@ -225,13 +204,9 @@
         Log.i(TAG, String.format("connect_input_iterations=%d", sConnectInputIterations));
         Log.i(TAG, String.format("connect_pan_iterations=%d", sConnectPanIterations));
         Log.i(TAG, String.format("start_stop_sco_iterations=%d", sStartStopScoIterations));
-        Log.i(TAG, String.format("pair_address=%s", sPairAddress));
-        Log.i(TAG, String.format("a2dp_address=%s", sA2dpAddress));
-        Log.i(TAG, String.format("headset_address=%s", sHeadsetAddress));
-        Log.i(TAG, String.format("input_address=%s", sInputAddress));
-        Log.i(TAG, String.format("pan_address=%s", sPanAddress));
-        Log.i(TAG, String.format("pair_pin=%s", new String(sPairPin)));
-        Log.i(TAG, String.format("pair_passkey=%d", sPairPasskey));
+        Log.i(TAG, String.format("device_address=%s", sDeviceAddress));
+        Log.i(TAG, String.format("device_pair_pin=%s", new String(sDevicePairPin)));
+        Log.i(TAG, String.format("device_pair_passkey=%d", sDevicePairPasskey));
 
         // Call onCreate last since we want to set the static variables first.
         super.onCreate(arguments);
diff --git a/core/tests/coretests/src/android/bluetooth/BluetoothTestUtils.java b/core/tests/coretests/src/android/bluetooth/BluetoothTestUtils.java
index 1741119..f1dd8fe 100644
--- a/core/tests/coretests/src/android/bluetooth/BluetoothTestUtils.java
+++ b/core/tests/coretests/src/android/bluetooth/BluetoothTestUtils.java
@@ -37,44 +37,21 @@
 
 public class BluetoothTestUtils extends Assert {
 
-    /**
-     * Timeout for enable/disable in ms.
-     */
+    /** Timeout for enable/disable in ms. */
     private static final int ENABLE_DISABLE_TIMEOUT = 20000;
-
-    /**
-     * Timeout for discoverable/undiscoverable in ms.
-     */
+    /** Timeout for discoverable/undiscoverable in ms. */
     private static final int DISCOVERABLE_UNDISCOVERABLE_TIMEOUT = 5000;
-
-    /**
-     * Timeout for starting/stopping a scan in ms.
-     */
+    /** Timeout for starting/stopping a scan in ms. */
     private static final int START_STOP_SCAN_TIMEOUT = 5000;
-
-    /**
-     * Timeout for pair/unpair in ms.
-     */
+    /** Timeout for pair/unpair in ms. */
     private static final int PAIR_UNPAIR_TIMEOUT = 20000;
-
-    /**
-     * Timeout for connecting/disconnecting a profile in ms.
-     */
+    /** Timeout for connecting/disconnecting a profile in ms. */
     private static final int CONNECT_DISCONNECT_PROFILE_TIMEOUT = 20000;
-
-    /**
-     * Timeout to connect a profile proxy in ms.
-     */
-    private static final int CONNECT_PROXY_TIMEOUT = 5000;
-
-    /**
-     * Timeout to start or stop a SCO channel in ms.
-     */
+    /** Timeout to start or stop a SCO channel in ms. */
     private static final int START_STOP_SCO_TIMEOUT = 10000;
-
-    /**
-     * Time between polls in ms.
-     */
+    /** Timeout to connect a profile proxy in ms. */
+    private static final int CONNECT_PROXY_TIMEOUT = 5000;
+    /** Time between polls in ms. */
     private static final int POLL_TIME = 100;
 
     private abstract class FlagReceiver extends BroadcastReceiver {
@@ -249,6 +226,9 @@
                 case BluetoothProfile.INPUT_DEVICE:
                     mConnectionAction = BluetoothInputDevice.ACTION_CONNECTION_STATE_CHANGED;
                     break;
+                case BluetoothProfile.PAN:
+                    mConnectionAction = BluetoothPan.ACTION_CONNECTION_STATE_CHANGED;
+                    break;
                 default:
                     mConnectionAction = null;
             }
@@ -281,47 +261,22 @@
         }
     }
 
-    private class ConnectPanReceiver extends FlagReceiver {
-        private static final int STATE_DISCONNECTED_FLAG = 1;
-        private static final int STATE_CONNECTING_FLAG = 1 << 1;
-        private static final int STATE_CONNECTED_FLAG = 1 << 2;
-        private static final int STATE_DISCONNECTING_FLAG = 1 << 3;
-
-        private BluetoothDevice mDevice;
+    private class ConnectPanReceiver extends ConnectProfileReceiver {
         private int mRole;
 
         public ConnectPanReceiver(BluetoothDevice device, int role, int expectedFlags) {
-            super (expectedFlags);
+            super(device, BluetoothProfile.PAN, expectedFlags);
 
-            mDevice = device;
             mRole = role;
         }
 
         @Override
         public void onReceive(Context context, Intent intent) {
-            if (!mDevice.equals(intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE))
-                    || mRole != intent.getIntExtra(BluetoothPan.EXTRA_LOCAL_ROLE, -1)) {
+            if (mRole != intent.getIntExtra(BluetoothPan.EXTRA_LOCAL_ROLE, -1)) {
                 return;
             }
 
-            if (BluetoothPan.ACTION_CONNECTION_STATE_CHANGED.equals(intent.getAction())) {
-                int state = intent.getIntExtra(BluetoothPan.EXTRA_STATE, -1);
-                assertNotSame(-1, state);
-                switch (state) {
-                    case BluetoothPan.STATE_DISCONNECTED:
-                        setFiredFlag(STATE_DISCONNECTED_FLAG);
-                        break;
-                    case BluetoothPan.STATE_CONNECTING:
-                        setFiredFlag(STATE_CONNECTING_FLAG);
-                        break;
-                    case BluetoothPan.STATE_CONNECTED:
-                        setFiredFlag(STATE_CONNECTED_FLAG);
-                        break;
-                    case BluetoothPan.STATE_DISCONNECTING:
-                        setFiredFlag(STATE_DISCONNECTING_FLAG);
-                        break;
-                }
-            }
+            super.onReceive(context, intent);
         }
     }
 
@@ -353,6 +308,7 @@
 
     private BluetoothProfile.ServiceListener mServiceListener =
             new BluetoothProfile.ServiceListener() {
+        @Override
         public void onServiceConnected(int profile, BluetoothProfile proxy) {
             synchronized (this) {
                 switch (profile) {
@@ -372,6 +328,7 @@
             }
         }
 
+        @Override
         public void onServiceDisconnected(int profile) {
             synchronized (this) {
                 switch (profile) {
@@ -399,10 +356,10 @@
     private String mOutputFile;
 
     private Context mContext;
-    private BluetoothA2dp mA2dp;
-    private BluetoothHeadset mHeadset;
-    private BluetoothInputDevice mInput;
-    private BluetoothPan mPan;
+    private BluetoothA2dp mA2dp = null;
+    private BluetoothHeadset mHeadset = null;
+    private BluetoothInputDevice mInput = null;
+    private BluetoothPan mPan = null;
 
     /**
      * Creates a utility instance for testing Bluetooth.
@@ -818,10 +775,15 @@
             byte[] pin, boolean shouldPair) {
         int mask = PairReceiver.STATE_BONDING_FLAG | PairReceiver.STATE_BONDED_FLAG;
         long start = -1;
-        String methodName = shouldPair ? "pair()" : "acceptPair()";
+        String methodName;
+        if (shouldPair) {
+            methodName = String.format("pair(device=%s)", device);
+        } else {
+            methodName = String.format("acceptPair(device=%s)", device);
+        }
 
         if (!adapter.isEnabled()) {
-            fail(methodName + " bluetooth not enabled");
+            fail(String.format("%s bluetooth not enabled", methodName));
         }
 
         PairReceiver receiver = getPairReceiver(device, passkey, pin, mask);
@@ -843,8 +805,7 @@
                 return;
             default:
                 removeReceiver(receiver);
-                fail(String.format("%s invalid state: device=%s, state=%d", methodName, device,
-                        state));
+                fail(String.format("%s invalid state: state=%d", methodName, state));
         }
 
         long s = System.currentTimeMillis();
@@ -854,10 +815,10 @@
                 assertTrue(adapter.getBondedDevices().contains(device));
                 long finish = receiver.getCompletedTime();
                 if (start != -1 && finish != -1) {
-                    writeOutput(String.format("%s completed in %d ms: device=%s", methodName,
-                            (finish - start), device));
+                    writeOutput(String.format("%s completed in %d ms", methodName,
+                            (finish - start)));
                 } else {
-                    writeOutput(String.format("%s completed: device=%s", methodName, device));
+                    writeOutput(String.format("%s completed", methodName));
                 }
                 removeReceiver(receiver);
                 return;
@@ -867,9 +828,8 @@
 
         int firedFlags = receiver.getFiredFlags();
         removeReceiver(receiver);
-        fail(String.format("%s timeout: device=%s, state=%d (expected %d), "
-                + "flags=0x%x (expected 0x%x)", methodName, device, state,
-                BluetoothDevice.BOND_BONDED, firedFlags, mask));
+        fail(String.format("%s timeout: state=%d (expected %d), flags=0x%x (expected 0x%x)",
+                methodName, state, BluetoothDevice.BOND_BONDED, firedFlags, mask));
     }
 
     /**
@@ -882,9 +842,10 @@
     public void unpair(BluetoothAdapter adapter, BluetoothDevice device) {
         int mask = PairReceiver.STATE_NONE_FLAG;
         long start = -1;
+        String methodName = String.format("unpair(device=%s)", device);
 
         if (!adapter.isEnabled()) {
-            fail("unpair() bluetooth not enabled");
+            fail(String.format("%s bluetooth not enabled", methodName));
         }
 
         PairReceiver receiver = getPairReceiver(device, 0, null, mask);
@@ -906,7 +867,7 @@
                 break;
             default:
                 removeReceiver(receiver);
-                fail(String.format("unpair() invalid state: device=%s, state=%d", device, state));
+                fail(String.format("%s invalid state: state=%d", methodName, state));
         }
 
         long s = System.currentTimeMillis();
@@ -916,10 +877,10 @@
                 assertFalse(adapter.getBondedDevices().contains(device));
                 long finish = receiver.getCompletedTime();
                 if (start != -1 && finish != -1) {
-                    writeOutput(String.format("unpair() completed in %d ms: device=%s",
-                            (finish - start), device));
+                    writeOutput(String.format("%s completed in %d ms", methodName,
+                            (finish - start)));
                 } else {
-                    writeOutput(String.format("unpair() completed: device=%s", device));
+                    writeOutput(String.format("%s completed", methodName));
                 }
                 removeReceiver(receiver);
                 return;
@@ -928,9 +889,8 @@
 
         int firedFlags = receiver.getFiredFlags();
         removeReceiver(receiver);
-        fail(String.format("unpair() timeout: device=%s, state=%d (expected %d), "
-                + "flags=0x%x (expected 0x%x)", device, state, BluetoothDevice.BOND_BONDED,
-                firedFlags, mask));
+        fail(String.format("%s timeout: state=%d (expected %d), flags=0x%x (expected 0x%x)",
+                methodName, state, BluetoothDevice.BOND_BONDED, firedFlags, mask));
     }
 
     /**
@@ -939,29 +899,30 @@
      *
      * @param adapter The BT adapter.
      * @param device The remote device.
-     * @param profile The profile to connect. One of {@link BluetoothProfile#A2DP} or
-     *        {@link BluetoothProfile#HEADSET}.
+     * @param profile The profile to connect. One of {@link BluetoothProfile#A2DP},
+     * {@link BluetoothProfile#HEADSET}, or {@link BluetoothProfile#INPUT_DEVICE}.
+     * @param methodName The method name to printed in the logs.  If null, will be
+     * "connectProfile(profile=&lt;profile&gt;, device=&lt;device&gt;)"
      */
-    public void connectProfile(BluetoothAdapter adapter, BluetoothDevice device, int profile) {
+    public void connectProfile(BluetoothAdapter adapter, BluetoothDevice device, int profile,
+            String methodName) {
+        if (methodName == null) {
+            methodName = String.format("connectProfile(profile=%d, device=%s)", profile, device);
+        }
         int mask = (ConnectProfileReceiver.STATE_CONNECTING_FLAG
                 | ConnectProfileReceiver.STATE_CONNECTED_FLAG);
         long start = -1;
 
         if (!adapter.isEnabled()) {
-            fail(String.format("connectProfile() bluetooth not enabled: device=%s, profile=%d",
-                    device, profile));
+            fail(String.format("%s bluetooth not enabled", methodName));
         }
 
         if (!adapter.getBondedDevices().contains(device)) {
-            fail(String.format("connectProfile() device not paired: device=%s, profile=%d",
-                    device, profile));
+            fail(String.format("%s device not paired", methodName));
         }
 
         BluetoothProfile proxy = connectProxy(adapter, profile);
-        if (proxy == null) {
-            fail(String.format("connectProfile() unknown profile: device=%s, profile=%d",
-                    device, profile));
-        }
+        assertNotNull(proxy);
 
         ConnectProfileReceiver receiver = getConnectProfileReceiver(device, profile, mask);
 
@@ -980,8 +941,7 @@
                 break;
             default:
                 removeReceiver(receiver);
-                fail(String.format("connectProfile() invalid state: device=%s, profile=%d, "
-                        + "state=%d", device, profile, state));
+                fail(String.format("%s invalid state: state=%d", methodName, state));
         }
 
         long s = System.currentTimeMillis();
@@ -991,11 +951,10 @@
                     && (receiver.getFiredFlags() & mask) == mask) {
                 long finish = receiver.getCompletedTime();
                 if (start != -1 && finish != -1) {
-                    writeOutput(String.format("connectProfile() completed in %d ms: "
-                            + "device=%s, profile=%d", (finish - start), device, profile));
+                    writeOutput(String.format("%s completed in %d ms", methodName,
+                            (finish - start)));
                 } else {
-                    writeOutput(String.format("connectProfile() completed: device=%s, "
-                            + "profile=%d", device, profile));
+                    writeOutput(String.format("%s completed", methodName));
                 }
                 removeReceiver(receiver);
                 return;
@@ -1005,9 +964,8 @@
 
         int firedFlags = receiver.getFiredFlags();
         removeReceiver(receiver);
-        fail(String.format("connectProfile() timeout: device=%s, profile=%s, "
-                + "state=%d (expected %d), flags=0x%x (expected 0x%x)", device, profile, state,
-                BluetoothProfile.STATE_CONNECTED, firedFlags, mask));
+        fail(String.format("%s timeout: state=%d (expected %d), flags=0x%x (expected 0x%x)",
+                methodName, state, BluetoothProfile.STATE_CONNECTED, firedFlags, mask));
     }
 
     /**
@@ -1016,29 +974,30 @@
      *
      * @param adapter The BT adapter.
      * @param device The remote device.
-     * @param profile The profile to disconnect. One of {@link BluetoothProfile#A2DP} or
-     *        {@link BluetoothProfile#HEADSET}.
+     * @param profile The profile to disconnect. One of {@link BluetoothProfile#A2DP},
+     * {@link BluetoothProfile#HEADSET}, or {@link BluetoothProfile#INPUT_DEVICE}.
+     * @param methodName The method name to printed in the logs.  If null, will be
+     * "connectProfile(profile=&lt;profile&gt;, device=&lt;device&gt;)"
      */
-    public void disconnectProfile(BluetoothAdapter adapter, BluetoothDevice device, int profile) {
+    public void disconnectProfile(BluetoothAdapter adapter, BluetoothDevice device, int profile,
+            String methodName) {
+        if (methodName == null) {
+            methodName = String.format("disconnectProfile(profile=%d, device=%s)", profile, device);
+        }
         int mask = (ConnectProfileReceiver.STATE_DISCONNECTING_FLAG
                 | ConnectProfileReceiver.STATE_DISCONNECTED_FLAG);
         long start = -1;
 
         if (!adapter.isEnabled()) {
-            fail(String.format("disconnectProfile() bluetooth not enabled: device=%s, profile=%d",
-                    device, profile));
+            fail(String.format("%s bluetooth not enabled", methodName));
         }
 
         if (!adapter.getBondedDevices().contains(device)) {
-            fail(String.format("disconnectProfile() device not paired: device=%s, profile=%d",
-                    device, profile));
+            fail(String.format("%s device not paired", methodName));
         }
 
         BluetoothProfile proxy = connectProxy(adapter, profile);
-        if (proxy == null) {
-            fail(String.format("disconnectProfile() unknown profile: device=%s, profile=%d",
-                    device, profile));
-        }
+        assertNotNull(proxy);
 
         ConnectProfileReceiver receiver = getConnectProfileReceiver(device, profile, mask);
 
@@ -1057,8 +1016,7 @@
                 break;
             default:
                 removeReceiver(receiver);
-                fail(String.format("disconnectProfile() invalid state: device=%s, profile=%d, "
-                        + "state=%d", device, profile, state));
+                fail(String.format("%s invalid state: state=%d", methodName, state));
         }
 
         long s = System.currentTimeMillis();
@@ -1068,11 +1026,10 @@
                     && (receiver.getFiredFlags() & mask) == mask) {
                 long finish = receiver.getCompletedTime();
                 if (start != -1 && finish != -1) {
-                    writeOutput(String.format("disconnectProfile() completed in %d ms: "
-                            + "device=%s, profile=%d", (finish - start), device, profile));
+                    writeOutput(String.format("%s completed in %d ms", methodName,
+                            (finish - start)));
                 } else {
-                    writeOutput(String.format("disconnectProfile() completed: device=%s, "
-                            + "profile=%d", device, profile));
+                    writeOutput(String.format("%s completed", methodName));
                 }
                 removeReceiver(receiver);
                 return;
@@ -1082,9 +1039,8 @@
 
         int firedFlags = receiver.getFiredFlags();
         removeReceiver(receiver);
-        fail(String.format("disconnectProfile() timeout: device=%s, profile=%s, "
-                + "state=%d (expected %d), flags=0x%x (expected 0x%x)", device, profile, state,
-                BluetoothProfile.STATE_DISCONNECTED, firedFlags, mask));
+        fail(String.format("%s timeout: state=%d (expected %d), flags=0x%x (expected 0x%x)",
+                methodName, state, BluetoothProfile.STATE_DISCONNECTED, firedFlags, mask));
     }
 
     /**
@@ -1125,25 +1081,25 @@
         String methodName;
 
         if (connect) {
-            methodName = "connectPan()";
-            mask = (ConnectPanReceiver.STATE_CONNECTED_FLAG |
-                    ConnectPanReceiver.STATE_CONNECTING_FLAG);
+            methodName = String.format("connectPan(device=%s)", device);
+            mask = (ConnectProfileReceiver.STATE_CONNECTED_FLAG |
+                    ConnectProfileReceiver.STATE_CONNECTING_FLAG);
             role = BluetoothPan.LOCAL_PANU_ROLE;
         } else {
-            methodName = "incomingPanConnection()";
-            mask = ConnectPanReceiver.STATE_CONNECTED_FLAG;
+            methodName = String.format("incomingPanConnection(device=%s)", device);
+            mask = ConnectProfileReceiver.STATE_CONNECTED_FLAG;
             role = BluetoothPan.LOCAL_NAP_ROLE;
         }
 
         if (!adapter.isEnabled()) {
-            fail(String.format("%s bluetooth not enabled: device=%s", methodName, device));
+            fail(String.format("%s bluetooth not enabled", methodName));
         }
 
         if (!adapter.getBondedDevices().contains(device)) {
-            fail(String.format("%s device not paired: device=%s", methodName, device));
+            fail(String.format("%s device not paired", methodName));
         }
 
-        if (mPan == null) mPan = (BluetoothPan) connectProxy(adapter, BluetoothProfile.PAN);
+        mPan = (BluetoothPan) connectProxy(adapter, BluetoothProfile.PAN);
         assertNotNull(mPan);
         ConnectPanReceiver receiver = getConnectPanReceiver(device, role, mask);
 
@@ -1165,8 +1121,7 @@
                 break;
             default:
                 removeReceiver(receiver);
-                fail(String.format("%s invalid state: device=%s, state=%d", methodName, device,
-                        state));
+                fail(String.format("%s invalid state: state=%d", methodName, state));
         }
 
         long s = System.currentTimeMillis();
@@ -1176,10 +1131,10 @@
                     && (receiver.getFiredFlags() & mask) == mask) {
                 long finish = receiver.getCompletedTime();
                 if (start != -1 && finish != -1) {
-                    writeOutput(String.format("%s completed in %d ms: device=%s", methodName,
-                            (finish - start), device));
+                    writeOutput(String.format("%s completed in %d ms", methodName,
+                            (finish - start)));
                 } else {
-                    writeOutput(String.format("%s completed: device=%s", methodName, device));
+                    writeOutput(String.format("%s completed", methodName));
                 }
                 removeReceiver(receiver);
                 return;
@@ -1189,9 +1144,8 @@
 
         int firedFlags = receiver.getFiredFlags();
         removeReceiver(receiver);
-        fail(String.format("%s timeout: device=%s, state=%d (expected %d), "
-                + "flags=0x%x (expected 0x%s)", methodName, device, state,
-                BluetoothPan.STATE_CONNECTED, firedFlags, mask));
+        fail(String.format("%s timeout: state=%d (expected %d), flags=0x%x (expected 0x%s)",
+                methodName, state, BluetoothPan.STATE_CONNECTED, firedFlags, mask));
     }
 
     /**
@@ -1232,25 +1186,25 @@
         String methodName;
 
         if (disconnect) {
-            methodName = "disconnectPan()";
-            mask = (ConnectPanReceiver.STATE_DISCONNECTED_FLAG |
-                    ConnectPanReceiver.STATE_DISCONNECTING_FLAG);
+            methodName = String.format("disconnectPan(device=%s)", device);
+            mask = (ConnectProfileReceiver.STATE_DISCONNECTED_FLAG |
+                    ConnectProfileReceiver.STATE_DISCONNECTING_FLAG);
             role = BluetoothPan.LOCAL_PANU_ROLE;
         } else {
-            methodName = "incomingPanDisconnection()";
-            mask = ConnectPanReceiver.STATE_DISCONNECTED_FLAG;
+            methodName = String.format("incomingPanDisconnection(device=%s)", device);
+            mask = ConnectProfileReceiver.STATE_DISCONNECTED_FLAG;
             role = BluetoothPan.LOCAL_NAP_ROLE;
         }
 
         if (!adapter.isEnabled()) {
-            fail(String.format("%s bluetooth not enabled: device=%s", methodName, device));
+            fail(String.format("%s bluetooth not enabled", methodName));
         }
 
         if (!adapter.getBondedDevices().contains(device)) {
-            fail(String.format("%s device not paired: device=%s", methodName, device));
+            fail(String.format("%s device not paired", methodName));
         }
 
-        if (mPan == null) mPan = (BluetoothPan) connectProxy(adapter, BluetoothProfile.PAN);
+        mPan = (BluetoothPan) connectProxy(adapter, BluetoothProfile.PAN);
         assertNotNull(mPan);
         ConnectPanReceiver receiver = getConnectPanReceiver(device, role, mask);
 
@@ -1271,8 +1225,7 @@
                 break;
             default:
                 removeReceiver(receiver);
-                fail(String.format("%s invalid state: device=%s, state=%d", methodName, device,
-                        state));
+                fail(String.format("%s invalid state: state=%d", methodName, state));
         }
 
         long s = System.currentTimeMillis();
@@ -1282,10 +1235,10 @@
                     && (receiver.getFiredFlags() & mask) == mask) {
                 long finish = receiver.getCompletedTime();
                 if (start != -1 && finish != -1) {
-                    writeOutput(String.format("%s completed in %d ms: device=%s", methodName,
-                            (finish - start), device));
+                    writeOutput(String.format("%s completed in %d ms", methodName,
+                            (finish - start)));
                 } else {
-                    writeOutput(String.format("%s completed: device=%s", methodName, device));
+                    writeOutput(String.format("%s completed", methodName));
                 }
                 removeReceiver(receiver);
                 return;
@@ -1295,9 +1248,8 @@
 
         int firedFlags = receiver.getFiredFlags();
         removeReceiver(receiver);
-        fail(String.format("%s timeout: device=%s, state=%d (expected %d), "
-                + "flags=0x%x (expected 0x%s)", methodName, device, state,
-                BluetoothInputDevice.STATE_DISCONNECTED, firedFlags, mask));
+        fail(String.format("%s timeout: state=%d (expected %d), flags=0x%x (expected 0x%s)",
+                methodName, state, BluetoothInputDevice.STATE_DISCONNECTED, firedFlags, mask));
     }
 
     /**
@@ -1335,29 +1287,26 @@
         String methodName;
 
         if (isStart) {
-            methodName = "startSco()";
+            methodName = String.format("startSco(device=%s)", device);
             mask = StartStopScoReceiver.STATE_CONNECTED_FLAG;
         } else {
-            methodName = "stopSco()";
+            methodName = String.format("stopSco(device=%s)", device);
             mask = StartStopScoReceiver.STATE_DISCONNECTED_FLAG;
         }
 
         if (!adapter.isEnabled()) {
-            fail(String.format("%s bluetooth not enabled: device=%s, start=%b", methodName, device,
-                    isStart));
+            fail(String.format("%s bluetooth not enabled", methodName));
         }
 
         if (!adapter.getBondedDevices().contains(device)) {
-            fail(String.format("%s device not paired: device=%s, start=%b", methodName, device,
-                    isStart));
+            fail(String.format("%s device not paired", methodName));
         }
 
         AudioManager manager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
         assertNotNull(manager);
 
         if (!manager.isBluetoothScoAvailableOffCall()) {
-            fail(String.format("%s device does not support SCO: device=%s, start=%b", methodName,
-                    device, isStart));
+            fail(String.format("%s device does not support SCO", methodName));
         }
 
         boolean isScoOn = manager.isBluetoothScoOn();
@@ -1376,8 +1325,7 @@
         long s = System.currentTimeMillis();
         while (System.currentTimeMillis() - s < START_STOP_SCO_TIMEOUT) {
             isScoOn = manager.isBluetoothScoOn();
-            if ((isStart == isScoOn) &&
-                    (receiver.getFiredFlags() & mask) == mask) {
+            if (isStart == isScoOn && (receiver.getFiredFlags() & mask) == mask) {
                 long finish = receiver.getCompletedTime();
                 if (start != -1 && finish != -1) {
                     writeOutput(String.format("%s completed in %d ms", methodName,
@@ -1393,7 +1341,7 @@
 
         int firedFlags = receiver.getFiredFlags();
         removeReceiver(receiver);
-        fail(String.format("%s timeout: start=%b (expected %b), flags=0x%x (expected 0x%x)",
+        fail(String.format("%s timeout: on=%b (expected %b), flags=0x%x (expected 0x%x)",
                 methodName, isScoOn, isStart, firedFlags, mask));
     }
 
@@ -1478,6 +1426,30 @@
     }
 
     private BluetoothProfile connectProxy(BluetoothAdapter adapter, int profile) {
+        switch (profile) {
+            case BluetoothProfile.A2DP:
+                if (mA2dp != null) {
+                    return mA2dp;
+                }
+                break;
+            case BluetoothProfile.HEADSET:
+                if (mHeadset != null) {
+                    return mHeadset;
+                }
+                break;
+            case BluetoothProfile.INPUT_DEVICE:
+                if (mInput != null) {
+                    return mInput;
+                }
+                break;
+            case BluetoothProfile.PAN:
+                if (mPan != null) {
+                    return mPan;
+                }
+                break;
+            default:
+                return null;
+        }
         adapter.getProfileProxy(mContext, mServiceListener, profile);
         long s = System.currentTimeMillis();
         switch (profile) {
diff --git a/docs/html/images/drm_arch.png b/docs/html/images/drm_arch.png
new file mode 100755
index 0000000..1696a97
--- /dev/null
+++ b/docs/html/images/drm_arch.png
Binary files differ
diff --git a/docs/html/sdk/oem-usb.jd b/docs/html/sdk/oem-usb.jd
index e64c8d2..882a433 100644
--- a/docs/html/sdk/oem-usb.jd
+++ b/docs/html/sdk/oem-usb.jd
@@ -33,14 +33,17 @@
     <th>OEM</th>
     <th>Driver URL</th></tr>
 <tr><td>Acer</td>	<td><a
-href="http://www.acer.com/worldwide/support/mobile.html">http://www.acer.com/worldwide/support/
-mobile.html</a>
+href="http://www.acer.com/worldwide/support/mobile.html">http://www.acer.com/worldwide/support/mobile.html</a>
     </td></tr>
-
-<tr><td>Dell</td>	<td>
+  <tr>
+    <td>Asus</td>
+    <td><a href="http://support.asus.com/download/">http://support.asus.com/download/</a></td>
+  </tr>
+  <tr><td>
+       Dell
+    </td>	<td>
       <a
-href="http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml">http://
-support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml</a>  </td></tr>
+href="http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml">http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml</a>  </td></tr>
 
 <tr><td>Foxconn</td>	<td><a
 href="http://drivers.cmcs.com.tw/">http://drivers.cmcs.com.tw/</a></td>
@@ -56,17 +59,14 @@
   <tr><td>
        Garmin-Asus
     </td>	<td><a
-href="https://www.garminasus.com/en_US/support/pcsync/">https://www.garminasus.com/en_US/support/
-pcsync/</a></td>
+href="https://www.garminasus.com/en_US/support/pcsync/">https://www.garminasus.com/en_US/support/pcsync/</a></td>
 </tr><tr><td>HTC</td>	<td><a href="http://www.htc.com">http://www.htc.com </a> <br>Click on the
 support tab to select your products/device.  Different regions will have different links.</td>
 </tr>
 <tr><td>Huawei</td>	<td><a
-href="http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&flay=software&directoryId=20&treeId=0">http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&flay=software&
-directoryId=20&treeId=0</a></td>
+href="http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&flay=software&directoryId=20&treeId=0">http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&flay=software&directoryId=20&treeId=0</a></td>
 </tr><tr><td>KT Tech</td>	<td><a
-href="http://www.kttech.co.kr/cscenter/download05.asp">http://www.kttech.co.kr/cscenter/download05.
-asp</a> for EV-S100(Take)</td>
+href="http://www.kttech.co.kr/cscenter/download05.asp">http://www.kttech.co.kr/cscenter/download05.asp</a> for EV-S100(Take)</td>
 </tr>
   <tr>
     <td>
@@ -76,26 +76,19 @@
     </td>
   </tr>
   <tr><td>LGE</td>	<td><a
-href="http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp">http://
-www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp</a></td>
+href="http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp">http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp</a></td>
 </tr><tr><td>Motorola</td>	<td><a
-href="http://developer.motorola.com/docstools/USB_Drivers/">http://developer.motorola.com/docstools/
-USB_Drivers/</a></td>
+href="http://developer.motorola.com/docstools/USB_Drivers/">http://developer.motorola.com/docstools/USB_Drivers/</a></td>
 </tr><tr><td>Pantech</td>	<td><a
-href="http://www.isky.co.kr/cs/software/software.sky?fromUrl=index">http://www.isky.co.kr/cs/
-software/software.sky?fromUrl=index</a></td>
+href="http://www.isky.co.kr/cs/software/software.sky?fromUrl=index">http://www.isky.co.kr/cs/software/software.sky?fromUrl=index</a></td>
 </tr><tr><td>Samsung</td>	<td><a
-href="http://www.samsung.com/us/support/downloads">http://www.samsung.com/us/support/downloads</a></
-td>
+href="http://www.samsung.com/us/support/downloads">http://www.samsung.com/us/support/downloads</a></td>
 </tr><tr><td>Sharp</td>	<td><a
 href="http://k-tai.sharp.co.jp/support/">http://k-tai.sharp.co.jp/support/</a></td>
 </tr><tr><td>SK Telesys</td>	<td><a
-href="http://www.sk-w.com/service/wDownload/wDownload.jsp">http://www.sk-w.com/service/wDownload/
-wDownload.jsp</a></td></tr><tr>
+href="http://www.sk-w.com/service/wDownload/wDownload.jsp">http://www.sk-w.com/service/wDownload/wDownload.jsp</a></td></tr><tr>
 <td>Sony Ericsson</td>	<td><a
-href="http://developer.sonyericsson.com/wportal/devworld/search-downloads/android">http://developer.
-sonyericsson.com/wportal/devworld/search-downloads/android</a></td></tr><tr>
+href="http://developer.sonyericsson.com/wportal/devworld/search-downloads/android">http://developer.sonyericsson.com/wportal/devworld/search-downloads/android</a></td></tr><tr>
 <td>ZTE</td>	<td><a
-href="http://www.zte.com.cn/cn/products/mobile/services_support/index.jsp">http://www.zte.com.cn/cn/
-products/mobile/services_support/index.jsp</a></td></tr>
+href="http://www.zte.com.cn/cn/products/mobile/services_support/index.jsp">http://www.zte.com.cn/cn/products/mobile/services_support/index.jsp</a></td></tr>
 </table>
diff --git a/drm/java/android/drm/DrmConvertedStatus.java b/drm/java/android/drm/DrmConvertedStatus.java
old mode 100644
new mode 100755
index f200552..cecb135
--- a/drm/java/android/drm/DrmConvertedStatus.java
+++ b/drm/java/android/drm/DrmConvertedStatus.java
@@ -17,13 +17,11 @@
 package android.drm;
 
 /**
- * This is an entity class which wraps the status of the conversion, the converted
- * data/checksum data and the offset. Offset is going to be used in the case of close
- * session where the agent will inform where the header and body signature should be added
- *
- * As a result of {@link DrmManagerClient#convertData(int, byte [])} and
- * {@link DrmManagerClient#closeConvertSession(int)} an instance of DrmConvertedStatus
- * would be returned.
+ * An entity class that wraps converted data, conversion status, and the
+ * offset for appending the header and body signature to the converted data. An instance of this
+ * class is returned by the {@link DrmManagerClient#convertData convertData()} and
+ * {@link DrmManagerClient#closeConvertSession closeConvertSession()} methods. The offset is provided only when a
+ * conversion session is closed by calling {@link DrmManagerClient#closeConvertSession closeConvertSession()}.
  *
  */
 public class DrmConvertedStatus {
@@ -32,16 +30,19 @@
     public static final int STATUS_INPUTDATA_ERROR = 2;
     public static final int STATUS_ERROR = 3;
 
+    /** Status code for the conversion.*/
     public final int statusCode;
+    /** Converted data.*/
     public final byte[] convertedData;
+    /** Offset value for the body and header signature.*/
     public final int offset;
 
     /**
-     * constructor to create DrmConvertedStatus object with given parameters
+     * Creates a <code>DrmConvertedStatus</code> object with the specified parameters.
      *
-     * @param _statusCode Status of the conversion
-     * @param _convertedData Converted data/checksum data
-     * @param _offset Offset value
+     * @param _statusCode Conversion status.
+     * @param _convertedData Converted data.
+     * @param _offset Offset value for appending the header and body signature.
      */
     public DrmConvertedStatus(int _statusCode, byte[] _convertedData, int _offset) {
         statusCode = _statusCode;
diff --git a/drm/java/android/drm/DrmErrorEvent.java b/drm/java/android/drm/DrmErrorEvent.java
old mode 100644
new mode 100755
index 7cc9a87..2cb82e6
--- a/drm/java/android/drm/DrmErrorEvent.java
+++ b/drm/java/android/drm/DrmErrorEvent.java
@@ -19,70 +19,69 @@
 import java.util.HashMap;
 
 /**
- * This is an entity class which would be passed to caller in
- * {@link DrmManagerClient.OnErrorListener#onError(DrmManagerClient, DrmErrorEvent)}
+ * An entity class that is passed to the
+ * {@link DrmManagerClient.OnErrorListener#onError onError()} callback.
  *
  */
 public class DrmErrorEvent extends DrmEvent {
     /**
-     * TYPE_RIGHTS_NOT_INSTALLED, when something went wrong installing the rights.
+     * Something went wrong installing the rights.
      */
     public static final int TYPE_RIGHTS_NOT_INSTALLED = 2001;
     /**
-     * TYPE_RIGHTS_RENEWAL_NOT_ALLOWED, when the server rejects renewal of rights.
+     * The server rejected the renewal of rights.
      */
     public static final int TYPE_RIGHTS_RENEWAL_NOT_ALLOWED = 2002;
     /**
-     * TYPE_NOT_SUPPORTED, when answer from server can not be handled by the native agent.
+     * Response from the server cannot be handled by the DRM plug-in (agent).
      */
     public static final int TYPE_NOT_SUPPORTED = 2003;
     /**
-     * TYPE_OUT_OF_MEMORY, when memory allocation fail during renewal.
-     * Can in the future perhaps be used to trigger garbage collector.
+     * Memory allocation failed during renewal. Can in the future perhaps be used to trigger 
+     * garbage collector.
      */
     public static final int TYPE_OUT_OF_MEMORY = 2004;
     /**
-     * TYPE_NO_INTERNET_CONNECTION, when the Internet connection is missing and no attempt
-     * can be made to renew rights.
+     * An Internet connection is not available and no attempt can be made to renew rights.
      */
     public static final int TYPE_NO_INTERNET_CONNECTION = 2005;
     /**
-     * TYPE_PROCESS_DRM_INFO_FAILED, when failed to process DrmInfo.
+     * Failed to process {@link DrmInfo}. This error event is sent when a
+     * {@link DrmManagerClient#processDrmInfo processDrmInfo()} call fails.
      */
     public static final int TYPE_PROCESS_DRM_INFO_FAILED = 2006;
     /**
-     * TYPE_REMOVE_ALL_RIGHTS_FAILED, when failed to remove all the rights objects
-     * associated with all DRM schemes.
+     * Failed to remove all the rights objects associated with all DRM schemes.
      */
     public static final int TYPE_REMOVE_ALL_RIGHTS_FAILED = 2007;
     /**
-     * TYPE_ACQUIRE_DRM_INFO_FAILED, when failed to acquire DrmInfo.
+     * Failed to acquire {@link DrmInfo}. This error event is sent when an
+     * {@link DrmManagerClient#acquireDrmInfo acquireDrmInfo()} call fails.
      */
     public static final int TYPE_ACQUIRE_DRM_INFO_FAILED = 2008;
 
     /**
-     * constructor to create DrmErrorEvent object with given parameters
+     * Creates a <code>DrmErrorEvent</code> object with the specified parameters.
      *
-     * @param uniqueId Unique session identifier
-     * @param type Type of the event. It could be one of the types defined above
-     * @param message Message description
+     * @param uniqueId Unique session identifier.
+     * @param type Type of the event. Could be any of the event types defined above.
+     * @param message Message description.
      */
     public DrmErrorEvent(int uniqueId, int type, String message) {
         super(uniqueId, type, message);
     }
 
     /**
-     * constructor to create DrmErrorEvent object with given parameters
+     * Creates a <code>DrmErrorEvent</code> object with the specified parameters.
      *
-     * @param uniqueId Unique session identifier
-     * @param type Type of the event. It could be one of the types defined above
-     * @param message Message description
+     * @param uniqueId Unique session identifier.
+     * @param type Type of the event. Could be any of the event types defined above.
+     * @param message Message description.
      * @param attributes Attributes for extensible information. Could be any
-     * information provided by the plugin
+     * information provided by the plug-in.
      */
     public DrmErrorEvent(int uniqueId, int type, String message,
                             HashMap<String, Object> attributes) {
         super(uniqueId, type, message, attributes);
     }
 }
-
diff --git a/drm/java/android/drm/DrmEvent.java b/drm/java/android/drm/DrmEvent.java
old mode 100644
new mode 100755
index eba458b..4053eb3
--- a/drm/java/android/drm/DrmEvent.java
+++ b/drm/java/android/drm/DrmEvent.java
@@ -19,22 +19,26 @@
 import java.util.HashMap;
 
 /**
- * This is the base class which would be used to notify the caller
- * about any event occurred in DRM framework.
+ * A base class that is used to send asynchronous event information from the DRM framework.
  *
  */
 public class DrmEvent {
     /**
-     * Constant field signifies that all the rights information associated with
-     * all DRM schemes are removed successfully
+     * All of the rights information associated with all DRM schemes have been successfully removed.
      */
     public static final int TYPE_ALL_RIGHTS_REMOVED = 1001;
     /**
-     * Constant field signifies that given information is processed successfully
+     * The given DRM information has been successfully processed.
      */
     public static final int TYPE_DRM_INFO_PROCESSED = 1002;
-
+    /**
+     * The key that is used in the <code>attributes</code> HashMap to pass the return status.
+     */
     public static final String DRM_INFO_STATUS_OBJECT = "drm_info_status_object";
+    /**
+     * The key that is used in the <code>attributes</code> HashMap to pass the
+     * {@link DrmInfo} object.
+     */
     public static final String DRM_INFO_OBJECT = "drm_info_object";
 
     private final int mUniqueId;
@@ -44,12 +48,12 @@
     private HashMap<String, Object> mAttributes = new HashMap<String, Object>();
 
     /**
-     * constructor for DrmEvent class
+     * Creates a <code>DrmEvent</code> object with the specified parameters.
      *
-     * @param uniqueId Unique session identifier
-     * @param type Type of information
-     * @param message Message description
-     * @param attributes Attributes for extensible information
+     * @param uniqueId Unique session identifier.
+     * @param type Type of information.
+     * @param message Message description.
+     * @param attributes Attributes for extensible information.
      */
     protected DrmEvent(int uniqueId, int type, String message,
                             HashMap<String, Object> attributes) {
@@ -66,11 +70,11 @@
     }
 
     /**
-     * constructor for DrmEvent class
+     * Creates a <code>DrmEvent</code> object with the specified parameters.
      *
-     * @param uniqueId Unique session identifier
-     * @param type Type of information
-     * @param message Message description
+     * @param uniqueId Unique session identifier.
+     * @param type Type of information.
+     * @param message Message description.
      */
     protected DrmEvent(int uniqueId, int type, String message) {
         mUniqueId = uniqueId;
@@ -82,40 +86,39 @@
     }
 
     /**
-     * Returns the Unique Id associated with this object
+     * Retrieves the unique session identifier associated with this object.
      *
-     * @return Unique Id
+     * @return The unique session identifier.
      */
     public int getUniqueId() {
         return mUniqueId;
     }
 
     /**
-     * Returns the Type of information associated with this object
+     * Retrieves the type of information that is associated with this object.
      *
-     * @return Type of information
+     * @return The type of information.
      */
     public int getType() {
         return mType;
     }
 
     /**
-     * Returns the message description associated with this object
+     * Retrieves the message description associated with this object.
      *
-     * @return message description
+     * @return The message description.
      */
     public String getMessage() {
         return mMessage;
     }
 
     /**
-     * Returns the attribute corresponding to the specified key
+     * Retrieves the attribute associated with the specified key.
      *
-     * @return one of the attributes or null if no mapping for
-     * the key is found
+     * @return One of the attributes or null if no mapping for
+     * the key is found.
      */
     public Object getAttribute(String key) {
         return mAttributes.get(key);
     }
 }
-
diff --git a/drm/java/android/drm/DrmInfo.java b/drm/java/android/drm/DrmInfo.java
old mode 100644
new mode 100755
index 7d3fbf1..8812bfe
--- a/drm/java/android/drm/DrmInfo.java
+++ b/drm/java/android/drm/DrmInfo.java
@@ -21,14 +21,13 @@
 import java.util.Iterator;
 
 /**
- * This is an entity class in which necessary information required to transact
- * between device and online DRM server is described. DRM Framework achieves
- * server registration, license acquisition and any other server related transaction
- * by passing an instance of this class to {@link DrmManagerClient#processDrmInfo(DrmInfo)}.
- *
- * Caller can retrieve the {@link DrmInfo} instance by using
- * {@link DrmManagerClient#acquireDrmInfo(DrmInfoRequest)}
- * by passing {@link DrmInfoRequest} instance.
+ * An entity class that describes the information required to send transactions
+ * between a device and an online DRM server. The DRM framework achieves
+ * server registration, license acquisition, and any other server-related transactions
+ * by passing an instance of this class to {@link DrmManagerClient#processDrmInfo}.
+ *<p>
+ * The caller can retrieve the {@link DrmInfo} instance by passing a {@link DrmInfoRequest}
+ * instance to {@link DrmManagerClient#acquireDrmInfo}.
  *
  */
 public class DrmInfo {
@@ -40,11 +39,11 @@
     private final HashMap<String, Object> mAttributes = new HashMap<String, Object>();
 
     /**
-     * constructor to create DrmInfo object with given parameters
+     * Creates a <code>DrmInfo</code> object with the given parameters.
      *
-     * @param infoType Type of information
-     * @param data Trigger data
-     * @param mimeType MIME type
+     * @param infoType The type of information.
+     * @param data The trigger data.
+     * @param mimeType The MIME type.
      */
     public DrmInfo(int infoType, byte[] data, String mimeType) {
         mInfoType = infoType;
@@ -53,11 +52,11 @@
     }
 
     /**
-     * constructor to create DrmInfo object with given parameters
+     * Creates a <code>DrmInfo</code> object with the given parameters.
      *
-     * @param infoType Type of information
-     * @param path Trigger data
-     * @param mimeType MIME type
+     * @param infoType The type of information.
+     * @param path The trigger data.
+     * @param mimeType The MIME type.
      */
     public DrmInfo(int infoType, String path, String mimeType) {
         mInfoType = infoType;
@@ -73,67 +72,70 @@
     }
 
     /**
-     * Adds optional information as <key, value> pair to this object
+     * Adds optional information as key-value pairs to this object. To add a custom object
+     * to the <code>DrmInfo</code> object, you must override the {@link #toString} implementation.
      *
-     * @param key Key to add
-     * @param value Value to add
-     *     To put custom object into DrmInfo, custom object has to
-     *     override toString() implementation.
+     * @param key Key to add.
+     * @param value Value to add.
+     *
      */
     public void put(String key, Object value) {
         mAttributes.put(key, value);
     }
 
     /**
-     * Retrieves the value of given key, if not found returns null
+     * Retrieves the value of a given key.
      *
-     * @param key Key whose value to be retrieved
-     * @return The value or null
+     * @param key The key whose value is being retrieved.
+     *
+     * @return The value of the key being retrieved. Returns null if the key cannot be found.
      */
     public Object get(String key) {
         return mAttributes.get(key);
     }
 
     /**
-     * Returns Iterator object to walk through the keys associated with this instance
+     * Retrieves an iterator object that you can use to iterate over the keys associated with
+     * this <code>DrmInfo</code> object.
      *
-     * @return Iterator object
+     * @return The iterator object.
      */
     public Iterator<String> keyIterator() {
         return mAttributes.keySet().iterator();
     }
 
     /**
-     * Returns Iterator object to walk through the values associated with this instance
+     * Retrieves an iterator object that you can use to iterate over the values associated with
+     * this <code>DrmInfo</code> object.
      *
-     * @return Iterator object
+     * @return The iterator object.
      */
     public Iterator<Object> iterator() {
         return mAttributes.values().iterator();
     }
 
     /**
-     * Returns the trigger data associated with this object
+     * Retrieves the trigger data associated with this object.
      *
-     * @return Trigger data
+     * @return The trigger data.
      */
     public byte[] getData() {
         return mData;
     }
 
     /**
-     * Returns the mimetype associated with this object
+     * Retrieves the MIME type associated with this object.
      *
-     * @return MIME type
+     * @return The MIME type.
      */
     public String getMimeType() {
         return mMimeType;
     }
 
     /**
-     * Returns information type associated with this instance
+     * Retrieves the information type associated with this object.
      *
-     * @return Information type
+     * @return The information type.
      */
     public int getInfoType() {
         return mInfoType;
diff --git a/drm/java/android/drm/DrmInfoEvent.java b/drm/java/android/drm/DrmInfoEvent.java
old mode 100644
new mode 100755
index 190199a..67aa0a9
--- a/drm/java/android/drm/DrmInfoEvent.java
+++ b/drm/java/android/drm/DrmInfoEvent.java
@@ -19,58 +19,56 @@
 import java.util.HashMap;
 
 /**
- * This is an entity class which would be passed to caller in
- * {@link DrmManagerClient.OnInfoListener#onInfo(DrmManagerClient, DrmInfoEvent)}
+ * An entity class that is passed to the 
+ * {@link DrmManagerClient.OnInfoListener#onInfo onInfo()} callback.
  *
  */
 public class DrmInfoEvent extends DrmEvent {
     /**
-     * TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT, when registration has been already done
-     * by another account ID.
+     * The registration has already been done by another account ID.
      */
     public static final int TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT = 1;
     /**
-     * TYPE_REMOVE_RIGHTS, when the rights needs to be removed completely.
+     * The rights need to be removed completely.
      */
     public static final int TYPE_REMOVE_RIGHTS = 2;
     /**
-     * TYPE_RIGHTS_INSTALLED, when the rights are downloaded and installed ok.
+     * The rights have been successfully downloaded and installed.
      */
     public static final int TYPE_RIGHTS_INSTALLED = 3;
     /**
-     * TYPE_WAIT_FOR_RIGHTS, rights object is on it's way to phone,
-     * wait before calling checkRights again.
+     * The rights object is being delivered to the device. You must wait before
+     * calling {@link DrmManagerClient#acquireRights acquireRights()} again.
      */
     public static final int TYPE_WAIT_FOR_RIGHTS = 4;
     /**
-     * TYPE_ACCOUNT_ALREADY_REGISTERED, when registration has been
-     * already done for the given account.
+     * The registration has already been done for the given account.
      */
     public static final int TYPE_ACCOUNT_ALREADY_REGISTERED = 5;
     /**
-     * TYPE_RIGHTS_REMOVED, when the rights has been removed.
+     * The rights have been removed.
      */
     public static final int TYPE_RIGHTS_REMOVED = 6;
 
     /**
-     * constructor to create DrmInfoEvent object with given parameters
+     * Creates a <code>DrmInfoEvent</code> object with the specified parameters.
      *
-     * @param uniqueId Unique session identifier
-     * @param type Type of the event. It could be one of the types defined above
-     * @param message Message description
+     * @param uniqueId Unique session identifier.
+     * @param type Type of the event. Could be any of the event types defined above.
+     * @param message Message description.
      */
     public DrmInfoEvent(int uniqueId, int type, String message) {
         super(uniqueId, type, message);
     }
 
     /**
-     * constructor to create DrmInfoEvent object with given parameters
+     * Creates a <code>DrmInfoEvent</code> object with the specified parameters.
      *
-     * @param uniqueId Unique session identifier
-     * @param type Type of the event. It could be one of the types defined above
-     * @param message Message description
+     * @param uniqueId Unique session identifier.
+     * @param type Type of the event. Could be any of the event types defined above.
+     * @param message Message description.
      * @param attributes Attributes for extensible information. Could be any
-     * information provided by the plugin
+     * information provided by the plug-in.
      */
     public DrmInfoEvent(int uniqueId, int type, String message,
                             HashMap<String, Object> attributes) {
diff --git a/drm/java/android/drm/DrmInfoRequest.java b/drm/java/android/drm/DrmInfoRequest.java
old mode 100644
new mode 100755
index a5a799c..9f86f5f
--- a/drm/java/android/drm/DrmInfoRequest.java
+++ b/drm/java/android/drm/DrmInfoRequest.java
@@ -20,30 +20,37 @@
 import java.util.Iterator;
 
 /**
- * This is an entity class used to pass required parameters to get
- * the necessary information to communicate with online DRM server
- *
- * An instance of this class is passed to {@link DrmManagerClient#acquireDrmInfo(DrmInfoRequest)}
- * to get the instance of {@link DrmInfo}
+ * An entity class that is used to pass information to an online DRM server. An instance of this
+ * class is passed to the {@link DrmManagerClient#acquireDrmInfo acquireDrmInfo()} method to get an
+ * instance of a {@link DrmInfo}.
  *
  */
 public class DrmInfoRequest {
     // Changes in following constants should be in sync with DrmInfoRequest.cpp
     /**
-     * Constants defines the type of {@link DrmInfoRequest}
+     * Acquires DRM server registration information.
      */
     public static final int TYPE_REGISTRATION_INFO = 1;
+    /**
+    * Acquires information for unregistering the DRM server.
+    */
     public static final int TYPE_UNREGISTRATION_INFO = 2;
+    /**
+    * Acquires rights information.
+    */
     public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3;
+    /**
+    * Acquires the progress of the rights acquisition.
+    */
     public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4;
 
     /**
-     * Key to pass the unique id for the account or the user
+     * Key that is used to pass the unique session ID for the account or the user.
      */
     public static final String ACCOUNT_ID = "account_id";
 
     /**
-     * Key to pass the unique id used for subscription
+     * Key that is used to pass the unique session ID for the subscription.
      */
     public static final String SUBSCRIPTION_ID = "subscription_id";
 
@@ -52,10 +59,10 @@
     private final HashMap<String, Object> mRequestInformation = new HashMap<String, Object>();
 
     /**
-     * constructor to create DrmInfoRequest object with type and mimetype
+     * Creates a <code>DrmInfoRequest</code> object with type and MIME type.
      *
-     * @param infoType Type of information
-     * @param mimeType MIME type
+     * @param infoType Type of information.
+     * @param mimeType MIME type.
      */
     public DrmInfoRequest(int infoType, String mimeType) {
         mInfoType = infoType;
@@ -63,56 +70,60 @@
     }
 
     /**
-     * Returns the mimetype associated with this object
+     * Retrieves the MIME type associated with this object.
      *
-     * @return MIME type
+     * @return The MIME type.
      */
     public String getMimeType() {
         return mMimeType;
     }
 
     /**
-     * Returns Information type associated with this instance
+     * Retrieves the information type associated with this object.
      *
-     * @return Information type
+     * @return The information type.
      */
     public int getInfoType() {
         return mInfoType;
     }
 
     /**
-     * Adds optional information as <key, value> pair to this object.
+     * Adds optional information as key-value pairs to this object.
      *
-     * @param key Key to add
-     * @param value Value to add
+     * @param key The key to add.
+     * @param value The value to add.
      */
     public void put(String key, Object value) {
         mRequestInformation.put(key, value);
     }
 
     /**
-     * Retrieves the value of given key, if not found returns null
+     * Retrieves the value of a given key.
      *
-     * @param key Key whose value to be retrieved
-     * @return The value or null
+     * @param key The key whose value is being retrieved.
+     *
+     * @return The value of the key that is being retrieved. Returns null if the key cannot be
+     * found.
      */
     public Object get(String key) {
         return mRequestInformation.get(key);
     }
 
     /**
-     * Returns Iterator object to walk through the keys associated with this instance
+     * Retrieves an iterator object that you can use to iterate over the keys associated with
+     * this <code>DrmInfoRequest</code> object.
      *
-     * @return Iterator object
+     * @return The iterator object.
      */
     public Iterator<String> keyIterator() {
         return mRequestInformation.keySet().iterator();
     }
 
     /**
-     * Returns Iterator object to walk through the values associated with this instance
+     * Retrieves an iterator object that you can use to iterate over the values associated with
+     * this <code>DrmInfoRequest</code> object.
      *
-     * @return Iterator object
+     * @return The iterator object.
      */
     public Iterator<Object> iterator() {
         return mRequestInformation.values().iterator();
diff --git a/drm/java/android/drm/DrmInfoStatus.java b/drm/java/android/drm/DrmInfoStatus.java
old mode 100644
new mode 100755
index b37ea51..b04694b
--- a/drm/java/android/drm/DrmInfoStatus.java
+++ b/drm/java/android/drm/DrmInfoStatus.java
@@ -17,12 +17,12 @@
 package android.drm;
 
 /**
- * This is an entity class which wraps the result of communication between device
- * and online DRM server.
- *
- * As a result of {@link DrmManagerClient#processDrmInfo(DrmInfo)} an instance of DrmInfoStatus
- * would be returned. This class holds {@link ProcessedData}, which could be used to instantiate
- * {@link DrmRights#DrmRights(ProcessedData, String)} in license acquisition.
+ * An entity class that wraps the result of communication between a device and an online DRM
+ * server. Specifically, when the {@link DrmManagerClient#processDrmInfo processDrmInfo()} method
+ * is called, an instance of <code>DrmInfoStatus</code> is returned.
+ *<p>
+ * This class contains the {@link ProcessedData} object, which can be used to instantiate a
+ * {@link DrmRights} object during license acquisition.
  *
  */
 public class DrmInfoStatus {
@@ -30,18 +30,30 @@
     public static final int STATUS_OK = 1;
     public static final int STATUS_ERROR = 2;
 
+    /**
+    * The status of the communication.
+    */
     public final int statusCode;
+    /**
+    * The type of DRM information processed.
+    */
     public final int infoType;
+    /**
+    * The MIME type of the content.
+    */
     public final String mimeType;
+    /**
+    * The processed data.
+    */
     public final ProcessedData data;
 
     /**
-     * constructor to create DrmInfoStatus object with given parameters
+     * Creates a <code>DrmInfoStatus</code> object with the specified parameters.
      *
-     * @param _statusCode Status of the communication
-     * @param _infoType Type of the DRM information processed
-     * @param _data The processed data
-     * @param _mimeType MIME type
+     * @param _statusCode The status of the communication.
+     * @param _infoType The type of the DRM information processed.
+     * @param _data The processed data.
+     * @param _mimeType The MIME type.
      */
     public DrmInfoStatus(int _statusCode, int _infoType, ProcessedData _data, String _mimeType) {
         statusCode = _statusCode;
diff --git a/drm/java/android/drm/DrmManagerClient.java b/drm/java/android/drm/DrmManagerClient.java
old mode 100644
new mode 100755
index f7479b5..f3a0343
--- a/drm/java/android/drm/DrmManagerClient.java
+++ b/drm/java/android/drm/DrmManagerClient.java
@@ -35,18 +35,17 @@
 import java.util.HashMap;
 
 /**
- * Interface of DRM Framework.
- * Java application will instantiate this class
- * to access DRM agent through DRM Framework.
+ * The main programming interface for the DRM framework. An application must instantiate this class
+ * to access DRM agents through the DRM framework.
  *
  */
 public class DrmManagerClient {
     /**
-     * Constant field signifies the success or no error occurred
+     * Indicates that a request was successful or that no error occurred.
      */
     public static final int ERROR_NONE = 0;
     /**
-     * Constant field signifies that error occurred and the reason is not known
+     * Indicates that an error occurred and the reason is not known.
      */
     public static final int ERROR_UNKNOWN = -2000;
 
@@ -58,43 +57,45 @@
     }
 
     /**
-     * Interface definition of a callback to be invoked to communicate
-     * some info and/or warning about DrmManagerClient.
+     * Interface definition for a callback that receives status messages and warnings
+     * during registration and rights acquisition.
      */
     public interface OnInfoListener {
         /**
-         * Called to indicate an info or a warning.
+         * Called when the DRM framework sends status or warning information during registration
+         * and rights acquisition.
          *
-         * @param client DrmManagerClient instance
-         * @param event instance which wraps reason and necessary information
+         * @param client The <code>DrmManagerClient</code> instance.
+         * @param event The {@link DrmInfoEvent} instance that wraps the status information or 
+         * warnings.
          */
         public void onInfo(DrmManagerClient client, DrmInfoEvent event);
     }
 
     /**
-     * Interface definition of a callback to be invoked to communicate
-     * the result of time consuming APIs asynchronously
+     * Interface definition for a callback that receives information
+     * about DRM processing events.
      */
     public interface OnEventListener {
         /**
-         * Called to indicate the result of asynchronous APIs.
+         * Called when the DRM framework sends information about a DRM processing request.
          *
-         * @param client DrmManagerClient instance
-         * @param event instance which wraps type and message
+         * @param client The <code>DrmManagerClient</code> instance.
+         * @param event The {@link DrmEvent} instance that wraps the information being
+         * conveyed, such as the information type and message.
          */
         public void onEvent(DrmManagerClient client, DrmEvent event);
     }
 
     /**
-     * Interface definition of a callback to be invoked to communicate
-     * the error occurred
+     * Interface definition for a callback that receives information about DRM framework errors.
      */
     public interface OnErrorListener {
         /**
-         * Called to indicate the error occurred.
+         * Called when the DRM framework sends error information.
          *
-         * @param client DrmManagerClient instance
-         * @param event instance which wraps error type and message
+         * @param client The <code>DrmManagerClient</code> instance.
+         * @param event The {@link DrmErrorEvent} instance that wraps the error type and message.
          */
         public void onError(DrmManagerClient client, DrmErrorEvent event);
     }
@@ -231,9 +232,9 @@
     }
 
     /**
-     * To instantiate DrmManagerClient
+     * Creates a <code>DrmManagerClient</code>.
      *
-     * @param context context of the caller
+     * @param context Context of the caller.
      */
     public DrmManagerClient(Context context) {
         mContext = context;
@@ -257,10 +258,10 @@
     }
 
     /**
-     * Register a callback to be invoked when the caller required to receive
-     * supplementary information.
+     * Registers an {@link DrmManagerClient.OnInfoListener} callback, which is invoked when the 
+     * DRM framework sends status or warning information during registration or rights acquisition.
      *
-     * @param infoListener
+     * @param infoListener Interface definition for the callback.
      */
     public synchronized void setOnInfoListener(OnInfoListener infoListener) {
         if (null != infoListener) {
@@ -269,10 +270,10 @@
     }
 
     /**
-     * Register a callback to be invoked when the caller required to receive
-     * the result of asynchronous APIs.
+     * Registers an {@link DrmManagerClient.OnEventListener} callback, which is invoked when the 
+     * DRM framework sends information about DRM processing.
      *
-     * @param eventListener
+     * @param eventListener Interface definition for the callback.
      */
     public synchronized void setOnEventListener(OnEventListener eventListener) {
         if (null != eventListener) {
@@ -281,10 +282,10 @@
     }
 
     /**
-     * Register a callback to be invoked when the caller required to receive
-     * error result of asynchronous APIs.
+     * Registers an {@link DrmManagerClient.OnErrorListener} callback, which is invoked when 
+     * the DRM framework sends error information.
      *
-     * @param errorListener
+     * @param errorListener Interface definition for the callback.
      */
     public synchronized void setOnErrorListener(OnErrorListener errorListener) {
         if (null != errorListener) {
@@ -293,9 +294,10 @@
     }
 
     /**
-     * Retrieves informations about all the plug-ins registered with DrmFramework.
+     * Retrieves information about all the DRM plug-ins (agents) that are registered with
+     * the DRM framework.
      *
-     * @return Array of DrmEngine plug-in strings
+     * @return A <code>String</code> array of DRM plug-in descriptions.
      */
     public String[] getAvailableDrmEngines() {
         DrmSupportInfo[] supportInfos = _getAllSupportInfo(mUniqueId);
@@ -310,12 +312,13 @@
     }
 
     /**
-     * Get constraints information evaluated from DRM content
+     * Retrieves constraint information for rights-protected content.
      *
-     * @param path Content path from where DRM constraints would be retrieved.
-     * @param action Actions defined in {@link DrmStore.Action}
-     * @return ContentValues instance in which constraints key-value pairs are embedded
-     *         or null in case of failure
+     * @param path Path to the content from which you are retrieving DRM constraints.
+     * @param action Action defined in {@link DrmStore.Action}.
+     *
+     * @return A {@link android.content.ContentValues} instance that contains
+     * key-value pairs representing the constraints. Null in case of failure.
      */
     public ContentValues getConstraints(String path, int action) {
         if (null == path || path.equals("") || !DrmStore.Action.isValid(action)) {
@@ -325,11 +328,12 @@
     }
 
    /**
-    * Get metadata information from DRM content
+    * Retrieves metadata information for rights-protected content.
     *
-    * @param path Content path from where DRM metadata would be retrieved.
-    * @return ContentValues instance in which metadata key-value pairs are embedded
-    *         or null in case of failure
+    * @param path Path to the content from which you are retrieving metadata information.
+    *
+    * @return A {@link android.content.ContentValues} instance that contains
+    * key-value pairs representing the metadata. Null in case of failure.
     */
     public ContentValues getMetadata(String path) {
         if (null == path || path.equals("")) {
@@ -339,12 +343,13 @@
     }
 
     /**
-     * Get constraints information evaluated from DRM content
+     * Retrieves constraint information for rights-protected content.
      *
-     * @param uri Content URI from where DRM constraints would be retrieved.
-     * @param action Actions defined in {@link DrmStore.Action}
-     * @return ContentValues instance in which constraints key-value pairs are embedded
-     *         or null in case of failure
+     * @param uri URI for the content from which you are retrieving DRM constraints.
+     * @param action Action defined in {@link DrmStore.Action}.
+     *
+     * @return A {@link android.content.ContentValues} instance that contains
+     * key-value pairs representing the constraints. Null in case of failure.
      */
     public ContentValues getConstraints(Uri uri, int action) {
         if (null == uri || Uri.EMPTY == uri) {
@@ -354,11 +359,12 @@
     }
 
    /**
-    * Get metadata information from DRM content
+    * Retrieves metadata information for rights-protected content.
     *
-    * @param uri Content URI from where DRM metadata would be retrieved.
-    * @return ContentValues instance in which metadata key-value pairs are embedded
-    *         or null in case of failure
+    * @param uri URI for the content from which you are retrieving metadata information.
+    *
+    * @return A {@link android.content.ContentValues} instance that contains
+    * key-value pairs representing the constraints. Null in case of failure.
     */
     public ContentValues getMetadata(Uri uri) {
         if (null == uri || Uri.EMPTY == uri) {
@@ -368,18 +374,19 @@
     }
 
     /**
-     * Save DRM rights to specified rights path
-     * and make association with content path.
+     * Saves rights to a specified path and associates that path with the content path.
+     * 
+     * <p class="note"><strong>Note:</strong> For OMA or WM-DRM, <code>rightsPath</code> and
+     * <code>contentPath</code> can be null.</p>
      *
-     * <p class="note">In case of OMA or WM-DRM, rightsPath and contentPath could be null.</p>
+     * @param drmRights The {@link DrmRights} to be saved.
+     * @param rightsPath File path where rights will be saved.
+     * @param contentPath File path where content is saved.
      *
-     * @param drmRights DrmRights to be saved
-     * @param rightsPath File path where rights to be saved
-     * @param contentPath File path where content was saved
-     * @return
-     *     ERROR_NONE for success
-     *     ERROR_UNKNOWN for failure
-     * @throws IOException if failed to save rights information in the given path
+     * @return ERROR_NONE for success; ERROR_UNKNOWN for failure.
+     *
+     * @throws IOException If the call failed to save rights information at the given
+     * <code>rightsPath</code>.
      */
     public int saveRights(
             DrmRights drmRights, String rightsPath, String contentPath) throws IOException {
@@ -393,9 +400,10 @@
     }
 
     /**
-     * Install new DRM Engine Plug-in at the runtime
+     * Installs a new DRM plug-in (agent) at runtime.
      *
-     * @param engineFilePath Path of the plug-in file to be installed
+     * @param engineFilePath File path to the plug-in file to be installed.
+     *
      * {@hide}
      */
     public void installDrmEngine(String engineFilePath) {
@@ -407,13 +415,12 @@
     }
 
     /**
-     * Check whether the given mimetype or path can be handled.
+     * Checks whether the given MIME type or path can be handled.
      *
-     * @param path Path of the content to be handled
-     * @param mimeType Mimetype of the object to be handled
-     * @return
-     *        true - if the given mimeType or path can be handled
-     *        false - cannot be handled.
+     * @param path Path of the content to be handled.
+     * @param mimeType MIME type of the object to be handled.
+     *
+     * @return True if the given MIME type or path can be handled; false if they cannot be handled.
      */
     public boolean canHandle(String path, String mimeType) {
         if ((null == path || path.equals("")) && (null == mimeType || mimeType.equals(""))) {
@@ -423,13 +430,12 @@
     }
 
     /**
-     * Check whether the given mimetype or uri can be handled.
+     * Checks whether the given MIME type or URI can be handled.
      *
-     * @param uri Content URI of the data to be handled.
-     * @param mimeType Mimetype of the object to be handled
-     * @return
-     *        true - if the given mimeType or path can be handled
-     *        false - cannot be handled.
+     * @param uri URI for the content to be handled.
+     * @param mimeType MIME type of the object to be handled
+     *
+     * @return True if the given MIME type or URI can be handled; false if they cannot be handled.
      */
     public boolean canHandle(Uri uri, String mimeType) {
         if ((null == uri || Uri.EMPTY == uri) && (null == mimeType || mimeType.equals(""))) {
@@ -439,12 +445,10 @@
     }
 
     /**
-     * Executes given drm information based on its type
+     * Processes the given DRM information based on the information type.
      *
-     * @param drmInfo Information needs to be processed
-     * @return
-     *     ERROR_NONE for success
-     *     ERROR_UNKNOWN for failure
+     * @param drmInfo The {@link DrmInfo} to be processed.
+     * @return ERROR_NONE for success; ERROR_UNKNOWN for failure.
      */
     public int processDrmInfo(DrmInfo drmInfo) {
         if (null == drmInfo || !drmInfo.isValid()) {
@@ -459,10 +463,12 @@
     }
 
     /**
-     * Retrieves necessary information for register, unregister or rights acquisition.
+     * Retrieves information for registering, unregistering, or acquiring rights.
      *
-     * @param drmInfoRequest Request information to retrieve drmInfo
-     * @return DrmInfo Instance as a result of processing given input
+     * @param drmInfoRequest The {@link DrmInfoRequest} that specifies the type of DRM
+     * information being retrieved.
+     *
+     * @return A {@link DrmInfo} instance.
      */
     public DrmInfo acquireDrmInfo(DrmInfoRequest drmInfoRequest) {
         if (null == drmInfoRequest || !drmInfoRequest.isValid()) {
@@ -472,17 +478,18 @@
     }
 
     /**
-     * Executes given DrmInfoRequest and returns the rights information asynchronously.
-     * This is a utility API which consists of {@link #acquireDrmInfo(DrmInfoRequest)}
-     * and {@link #processDrmInfo(DrmInfo)}.
-     * It can be used if selected DRM agent can work with this combined sequences.
-     * In case of some DRM schemes, such as OMA DRM, application needs to invoke
-     * {@link #acquireDrmInfo(DrmInfoRequest)} and {@link #processDrmInfo(DrmInfo)}, separately.
+     * Processes a given {@link DrmInfoRequest} and returns the rights information asynchronously.
+     *<p>
+     * This is a utility method that consists of an
+     * {@link #acquireDrmInfo(DrmInfoRequest) acquireDrmInfo()} and a
+     * {@link #processDrmInfo(DrmInfo) processDrmInfo()} method call. This utility method can be 
+     * used only if the selected DRM plug-in (agent) supports this sequence of calls. Some DRM
+     * agents, such as OMA, do not support this utility method, in which case an application must
+     * invoke {@link #acquireDrmInfo(DrmInfoRequest) acquireDrmInfo()} and
+     * {@link #processDrmInfo(DrmInfo) processDrmInfo()} separately.
      *
-     * @param drmInfoRequest Request information to retrieve drmInfo
-     * @return
-     *     ERROR_NONE for success
-     *     ERROR_UNKNOWN for failure
+     * @param drmInfoRequest The {@link DrmInfoRequest} used to acquire the rights.
+     * @return ERROR_NONE for success; ERROR_UNKNOWN for failure.
      */
     public int acquireRights(DrmInfoRequest drmInfoRequest) {
         DrmInfo drmInfo = acquireDrmInfo(drmInfoRequest);
@@ -493,14 +500,14 @@
     }
 
     /**
-     * Retrieves the type of the protected object (content, rights, etc..)
-     * using specified path or mimetype. At least one parameter should be non null
-     * to retrieve DRM object type
+     * Retrieves the type of rights-protected object (for example, content object, rights
+     * object, and so on) using the specified path or MIME type. At least one parameter must
+     * be specified to retrieve the DRM object type.
      *
-     * @param path Path of the content or null.
-     * @param mimeType Mimetype of the content or null.
-     * @return Type of the DRM content.
-     * @see DrmStore.DrmObjectType
+     * @param path Path to the content or null.
+     * @param mimeType MIME type of the content or null.
+     * 
+     * @return An <code>int</code> that corresponds to a {@link DrmStore.DrmObjectType}.
      */
     public int getDrmObjectType(String path, String mimeType) {
         if ((null == path || path.equals("")) && (null == mimeType || mimeType.equals(""))) {
@@ -510,14 +517,14 @@
     }
 
     /**
-     * Retrieves the type of the protected object (content, rights, etc..)
-     * using specified uri or mimetype. At least one parameter should be non null
-     * to retrieve DRM object type
+     * Retrieves the type of rights-protected object (for example, content object, rights
+     * object, and so on) using the specified URI or MIME type. At least one parameter must
+     * be specified to retrieve the DRM object type.
      *
-     * @param uri The content URI of the data
-     * @param mimeType Mimetype of the content or null.
-     * @return Type of the DRM content.
-     * @see DrmStore.DrmObjectType
+     * @param uri URI for the content or null.
+     * @param mimeType MIME type of the content or null.
+     * 
+     * @return An <code>int</code> that corresponds to a {@link DrmStore.DrmObjectType}.
      */
     public int getDrmObjectType(Uri uri, String mimeType) {
         if ((null == uri || Uri.EMPTY == uri) && (null == mimeType || mimeType.equals(""))) {
@@ -534,10 +541,11 @@
     }
 
     /**
-     * Retrieves the mime type embedded inside the original content
+     * Retrieves the MIME type embedded in the original content.
      *
-     * @param path Path of the protected content
-     * @return Mimetype of the original content, such as "video/mpeg"
+     * @param path Path to the rights-protected content.
+     *
+     * @return The MIME type of the original content, such as <code>video/mpeg</code>.
      */
     public String getOriginalMimeType(String path) {
         if (null == path || path.equals("")) {
@@ -547,10 +555,11 @@
     }
 
     /**
-     * Retrieves the mime type embedded inside the original content
+     * Retrieves the MIME type embedded in the original content.
      *
-     * @param uri The content URI of the data
-     * @return Mimetype of the original content, such as "video/mpeg"
+     * @param uri URI of the rights-protected content.
+     *
+     * @return MIME type of the original content, such as <code>video/mpeg</code>.
      */
     public String getOriginalMimeType(Uri uri) {
         if (null == uri || Uri.EMPTY == uri) {
@@ -560,22 +569,22 @@
     }
 
     /**
-     * Check whether the given content has valid rights or not
+     * Checks whether the given content has valid rights.
      *
-     * @param path Path of the protected content
-     * @return Status of the rights for the protected content
-     * @see DrmStore.RightsStatus
+     * @param path Path to the rights-protected content.
+     *
+     * @return An <code>int</code> representing the {@link DrmStore.RightsStatus} of the content.
      */
     public int checkRightsStatus(String path) {
         return checkRightsStatus(path, DrmStore.Action.DEFAULT);
     }
 
     /**
-     * Check whether the given content has valid rights or not
+     * Check whether the given content has valid rights.
      *
-     * @param uri The content URI of the data
-     * @return Status of the rights for the protected content
-     * @see DrmStore.RightsStatus
+     * @param uri URI of the rights-protected content.
+     *
+     * @return An <code>int</code> representing the {@link DrmStore.RightsStatus} of the content.
      */
     public int checkRightsStatus(Uri uri) {
         if (null == uri || Uri.EMPTY == uri) {
@@ -585,12 +594,13 @@
     }
 
     /**
-     * Check whether the given content has valid rights or not for specified action.
+     * Checks whether the given rights-protected content has valid rights for the specified
+     * {@link DrmStore.Action}.
      *
-     * @param path Path of the protected content
-     * @param action Action to perform
-     * @return Status of the rights for the protected content
-     * @see DrmStore.RightsStatus
+     * @param path Path to the rights-protected content.
+     * @param action The {@link DrmStore.Action} to perform.
+     *
+     * @return An <code>int</code> representing the {@link DrmStore.RightsStatus} of the content.
      */
     public int checkRightsStatus(String path, int action) {
         if (null == path || path.equals("") || !DrmStore.Action.isValid(action)) {
@@ -600,12 +610,13 @@
     }
 
     /**
-     * Check whether the given content has valid rights or not for specified action.
+     * Checks whether the given rights-protected content has valid rights for the specified
+     * {@link DrmStore.Action}.
      *
-     * @param uri The content URI of the data
-     * @param action Action to perform
-     * @return Status of the rights for the protected content
-     * @see DrmStore.RightsStatus
+     * @param uri URI for the rights-protected content.
+     * @param action The {@link DrmStore.Action} to perform.
+     *
+     * @return An <code>int</code> representing the {@link DrmStore.RightsStatus} of the content.
      */
     public int checkRightsStatus(Uri uri, int action) {
         if (null == uri || Uri.EMPTY == uri) {
@@ -615,12 +626,11 @@
     }
 
     /**
-     * Removes the rights associated with the given protected content
+     * Removes the rights associated with the given rights-protected content.
      *
-     * @param path Path of the protected content
-     * @return
-     *     ERROR_NONE for success
-     *     ERROR_UNKNOWN for failure
+     * @param path Path to the rights-protected content.
+     *
+     * @return ERROR_NONE for success; ERROR_UNKNOWN for failure.
      */
     public int removeRights(String path) {
         if (null == path || path.equals("")) {
@@ -630,12 +640,11 @@
     }
 
     /**
-     * Removes the rights associated with the given protected content
+     * Removes the rights associated with the given rights-protected content.
      *
-     * @param uri The content URI of the data
-     * @return
-     *     ERROR_NONE for success
-     *     ERROR_UNKNOWN for failure
+     * @param uri URI for the rights-protected content.
+     *
+     * @return ERROR_NONE for success; ERROR_UNKNOWN for failure.
      */
     public int removeRights(Uri uri) {
         if (null == uri || Uri.EMPTY == uri) {
@@ -645,12 +654,10 @@
     }
 
     /**
-     * Removes all the rights information of every plug-in associated with
-     * DRM framework. Will be used in master reset
+     * Removes all the rights information of every DRM plug-in (agent) associated with
+     * the DRM framework. Will be used during a master reset.
      *
-     * @return
-     *     ERROR_NONE for success
-     *     ERROR_UNKNOWN for failure
+     * @return ERROR_NONE for success; ERROR_UNKNOWN for failure.
      */
     public int removeAllRights() {
         int result = ERROR_UNKNOWN;
@@ -662,13 +669,14 @@
     }
 
     /**
-     * This API is for Forward Lock based DRM scheme.
-     * Each time the application tries to download a new DRM file
-     * which needs to be converted, then the application has to
-     * begin with calling this API.
+     * Initiates a new conversion session. An application must initiate a conversion session
+     * with this method each time it downloads a rights-protected file that needs to be converted.
+     *<p>
+     * This method applies only to forward-locking (copy protection) DRM schemes.
      *
-     * @param mimeType Description/MIME type of the input data packet
-     * @return convert ID which will be used for maintaining convert session.
+     * @param mimeType MIME type of the input data packet.
+     *
+     * @return A convert ID that is used used to maintain the conversion session.
      */
     public int openConvertSession(String mimeType) {
         if (null == mimeType || mimeType.equals("")) {
@@ -678,16 +686,17 @@
     }
 
     /**
-     * Accepts and converts the input data which is part of DRM file.
-     * The resultant converted data and the status is returned in the DrmConvertedInfo
-     * object. This method will be called each time there are new block
-     * of data received by the application.
+     * Converts the input data (content) that is part of a rights-protected file. The converted
+     * data and status is returned in a {@link DrmConvertedStatus} object. This method should be
+     * called each time there is a new block of data received by the application.
      *
-     * @param convertId Handle for the convert session
-     * @param inputData Input Data which need to be converted
-     * @return Return object contains the status of the data conversion,
-     *         the output converted data and offset. In this case the
-     *         application will ignore the offset information.
+     * @param convertId Handle for the conversion session.
+     * @param inputData Input data that needs to be converted.
+     *
+     * @return A {@link DrmConvertedStatus} object that contains the status of the data conversion,
+     * the converted data, and offset for the header and body signature. An application can 
+     * ignore the offset because it is only relevant to the
+     * {@link #closeConvertSession closeConvertSession()} method.
      */
     public DrmConvertedStatus convertData(int convertId, byte[] inputData) {
         if (null == inputData || 0 >= inputData.length) {
@@ -697,16 +706,15 @@
     }
 
     /**
-     * Informs the Drm Agent when there is no more data which need to be converted
-     * or when an error occurs. Upon successful conversion of the complete data,
-     * the agent will inform that where the header and body signature
-     * should be added. This signature appending is needed to integrity
-     * protect the converted file.
+     * Informs the DRM plug-in (agent) that there is no more data to convert or that an error 
+     * has occurred. Upon successful conversion of the data, the DRM agent will provide an offset
+     * value indicating where the header and body signature should be added. Appending the 
+     * signature is necessary to protect the integrity of the converted file.
      *
-     * @param convertId Handle for the convert session
-     * @return Return object contains the status of the data conversion,
-     *     the header and body signature data. It also informs
-     *     the application on which offset these signature data should be appended.
+     * @param convertId Handle for the conversion session.
+     *
+     * @return A {@link DrmConvertedStatus} object that contains the status of the data conversion,
+     * the converted data, and the offset for the header and body signature.
      */
     public DrmConvertedStatus closeConvertSession(int convertId) {
         return _closeConvertSession(mUniqueId, convertId);
diff --git a/drm/java/android/drm/DrmRights.java b/drm/java/android/drm/DrmRights.java
old mode 100644
new mode 100755
index 103af07..5907956
--- a/drm/java/android/drm/DrmRights.java
+++ b/drm/java/android/drm/DrmRights.java
@@ -20,14 +20,16 @@
 import java.io.IOException;
 
 /**
- * This is an entity class which wraps the license information which was
- * retrieved from the online DRM server.
- *
- * Caller can instantiate {@link DrmRights} by
- * invoking {@link DrmRights#DrmRights(ProcessedData, String)}
- * constructor by using the result of {@link DrmManagerClient#processDrmInfo(DrmInfo)} interface.
- * Caller can also instantiate {@link DrmRights} using the file path
- * which contains rights information.
+ * An entity class that wraps the license information retrieved from the online DRM server.
+ *<p>
+ * A caller can instantiate a {@link DrmRights} object by first invoking the
+ * {@link DrmManagerClient#processDrmInfo(DrmInfo)} method and then using the resulting
+ * {@link ProcessedData} object to invoke the {@link DrmRights#DrmRights(ProcessedData, String)}
+ * constructor.
+ *<p>
+ * A caller can also instantiate a {@link DrmRights} object by using the
+ * {@link DrmRights#DrmRights(String, String)} constructor, which takes a path to a file
+ * containing rights information instead of a <code>ProcessedData</code>.
  *
  */
 public class DrmRights {
@@ -37,10 +39,10 @@
     private String mSubscriptionId = "";
 
     /**
-     * constructor to create DrmRights object with given parameters
+     * Creates a <code>DrmRights</code> object with the given parameters.
      *
-     * @param rightsFilePath Path of the file containing rights data
-     * @param mimeType MIME type
+     * @param rightsFilePath Path to the file containing rights information.
+     * @param mimeType MIME type.
      */
     public DrmRights(String rightsFilePath, String mimeType) {
         File file = new File(rightsFilePath);
@@ -48,11 +50,11 @@
     }
 
     /**
-     * constructor to create DrmRights object with given parameters
+     * Creates a <code>DrmRights</code> object with the given parameters.
      *
-     * @param rightsFilePath Path of the file containing rights data
-     * @param mimeType MIME type
-     * @param accountId Account Id of the user
+     * @param rightsFilePath Path to the file containing rights information.
+     * @param mimeType MIME type.
+     * @param accountId Account ID of the user.
      */
     public DrmRights(String rightsFilePath, String mimeType, String accountId) {
         this(rightsFilePath, mimeType);
@@ -63,12 +65,12 @@
     }
 
     /**
-     * constructor to create DrmRights object with given parameters
+     * Creates a <code>DrmRights</code> object with the given parameters.
      *
-     * @param rightsFilePath Path of the file containing rights data
-     * @param mimeType MIME type
-     * @param accountId Account Id of the user
-     * @param subscriptionId Subscription Id of the user
+     * @param rightsFilePath Path to the file containing rights information.
+     * @param mimeType MIME type.
+     * @param accountId Account ID of the user.
+     * @param subscriptionId Subscription ID of the user.
      */
     public DrmRights(
             String rightsFilePath, String mimeType, String accountId, String subscriptionId) {
@@ -84,10 +86,10 @@
     }
 
     /**
-     * constructor to create DrmRights object with given parameters
+     * Creates a <code>DrmRights</code> object with the given parameters.
      *
-     * @param rightsFile File containing rights data
-     * @param mimeType MIME type
+     * @param rightsFile File containing rights information.
+     * @param mimeType MIME type.
      */
     public DrmRights(File rightsFile, String mimeType) {
         instantiate(rightsFile, mimeType);
@@ -104,16 +106,20 @@
     }
 
     /**
-     * constructor to create DrmRights object with given parameters
-     * The user can pass String or binary data<p>
-     * Usage:<p>
-     *        i)  String(e.g. data is instance of String):<br>
-     *            - new DrmRights(data.getBytes(), mimeType)<p>
-     *        ii) Binary data<br>
-     *            - new DrmRights(binaryData[], mimeType)<br>
+     * Creates a <code>DrmRights</code> object with the given parameters.
+     *<p>
+     * The application can pass the processed data as a <code>String</code> or as binary data.
+     *<p>
+     * The following code snippet shows how to pass the processed data as a <code>String</code>:
+     *<p>
+     * new DrmRights(data.getBytes(), mimeType)
+     *<p>
+     * The following code snippet shows how to pass the processed data as binary data:
+     *<p>
+     * new DrmRights(binaryData[], mimeType)
      *
-     * @param data Processed data
-     * @param mimeType MIME type
+     * @param data A {@link ProcessedData} object.
+     * @param mimeType The MIME type.
      */
     public DrmRights(ProcessedData data, String mimeType) {
         mData = data.getData();
@@ -132,47 +138,45 @@
     }
 
     /**
-     * Returns the rights data associated with this object
+     * Retrieves the rights data associated with this <code>DrmRights</code> object.
      *
-     * @return Rights data
+     * @return A <code>byte</code> array representing the rights data.
      */
     public byte[] getData() {
         return mData;
     }
 
     /**
-     * Returns the mimetype associated with this object
+     * Retrieves the MIME type associated with this <code>DrmRights</code> object.
      *
-     * @return MIME type
+     * @return The MIME type.
      */
     public String getMimeType() {
         return mMimeType;
     }
 
     /**
-     * Returns the account-id associated with this object
+     * Retrieves the account ID associated with this <code>DrmRights</code> object.
      *
-     * @return Account Id
+     * @return The account ID.
      */
     public String getAccountId() {
         return mAccountId;
     }
 
     /**
-     * Returns the subscription-id associated with this object
+     * Retrieves the subscription ID associated with this <code>DrmRights</code> object.
      *
-     * @return Subscription Id
+     * @return The subscription ID.
      */
     public String getSubscriptionId() {
         return mSubscriptionId;
     }
 
     /**
-     * Returns whether this instance is valid or not
+     * Determines whether this instance is valid or not.
      *
-     * @return
-     *     true if valid
-     *     false if invalid
+     * @return True if valid; false if invalid.
      */
     /*package*/ boolean isValid() {
         return (null != mMimeType && !mMimeType.equals("")
diff --git a/drm/java/android/drm/DrmStore.java b/drm/java/android/drm/DrmStore.java
old mode 100644
new mode 100755
index 44df90c..ae311de
--- a/drm/java/android/drm/DrmStore.java
+++ b/drm/java/android/drm/DrmStore.java
@@ -17,91 +17,97 @@
 package android.drm;
 
 /**
- * This class defines all the constants used by DRM framework
+ * Defines constants that are used by the DRM framework.
  *
  */
 public class DrmStore {
     /**
-     * Columns representing drm constraints
+     * Interface definition for the columns that represent DRM constraints.
      */
     public interface ConstraintsColumns {
         /**
-         * The max repeat count
-         * <P>Type: INTEGER</P>
+         * The maximum repeat count.
+         * <p>
+         * Type: INTEGER
          */
         public static final String MAX_REPEAT_COUNT = "max_repeat_count";
 
         /**
-         * The remaining repeat count
-         * <P>Type: INTEGER</P>
+         * The remaining repeat count.
+         * <p>
+         * Type: INTEGER
          */
         public static final String REMAINING_REPEAT_COUNT = "remaining_repeat_count";
 
         /**
-         * The time before which the protected file can not be played/viewed
-         * <P>Type: TEXT</P>
+         * The time before which the rights-protected file cannot be played/viewed.
+         * <p>
+         * Type: TEXT
          */
         public static final String LICENSE_START_TIME = "license_start_time";
 
         /**
-         * The time after which the protected file can not be played/viewed
-         * <P>Type: TEXT</P>
+         * The time after which the rights-protected file cannot be played/viewed.
+         * <p>
+         * Type: TEXT
          */
         public static final String LICENSE_EXPIRY_TIME = "license_expiry_time";
 
         /**
-         * The available time for license
-         * <P>Type: TEXT</P>
+         * The available time left before the license expires.
+         * <p>
+         * Type: TEXT
          */
         public static final String LICENSE_AVAILABLE_TIME = "license_available_time";
 
         /**
-         * The data stream for extended metadata
-         * <P>Type: TEXT</P>
+         * The data stream for extended metadata.
+         * <p>
+         * Type: TEXT
          */
         public static final String EXTENDED_METADATA = "extended_metadata";
     }
 
     /**
-     * Defines constants related to DRM types
+     * Defines DRM object types.
      */
     public static class DrmObjectType {
         /**
-         * Field specifies the unknown type
+         * An unknown object type.
          */
         public static final int UNKNOWN = 0x00;
         /**
-         * Field specifies the protected content type
+         * A rights-protected file object type.
          */
         public static final int CONTENT = 0x01;
         /**
-         * Field specifies the rights information
+         * A rights information object type.
          */
         public static final int RIGHTS_OBJECT = 0x02;
         /**
-         * Field specifies the trigger information
+         * A trigger information object type.
          */
         public static final int TRIGGER_OBJECT = 0x03;
     }
 
     /**
-     * Defines constants related to playback
+     * Defines playback states for content.
      */
     public static class Playback {
         /**
-         * Constant field signifies playback start
+         * Playback started.
          */
         public static final int START = 0x00;
         /**
-         * Constant field signifies playback stop
+         * Playback stopped.
          */
         public static final int STOP = 0x01;
         /**
-         * Constant field signifies playback paused
+         * Playback paused.
          */
         public static final int PAUSE = 0x02;
         /**
-         * Constant field signifies playback resumed
+         * Playback resumed.
          */
         public static final int RESUME = 0x03;
 
@@ -120,39 +126,39 @@
     }
 
     /**
-     * Defines actions that can be performed on protected content
+     * Defines actions that can be performed on rights-protected content.
      */
     public static class Action {
         /**
-         * Constant field signifies that the default action
+         * The default action.
          */
         public static final int DEFAULT = 0x00;
         /**
-         * Constant field signifies that the content can be played
+         * The rights-protected content can be played.
          */
         public static final int PLAY = 0x01;
         /**
-         * Constant field signifies that the content can be set as ring tone
+         * The rights-protected content can be set as a ringtone.
          */
         public static final int RINGTONE = 0x02;
         /**
-         * Constant field signifies that the content can be transfered
+         * The rights-protected content can be transferred.
          */
         public static final int TRANSFER = 0x03;
         /**
-         * Constant field signifies that the content can be set as output
+         * The rights-protected content can be set as output.
          */
         public static final int OUTPUT = 0x04;
         /**
-         * Constant field signifies that preview is allowed
+         * The rights-protected content can be previewed.
          */
         public static final int PREVIEW = 0x05;
         /**
-         * Constant field signifies that the content can be executed
+         * The rights-protected content can be executed.
          */
         public static final int EXECUTE = 0x06;
         /**
-         * Constant field signifies that the content can displayed
+         * The rights-protected content can be displayed.
          */
         public static final int DISPLAY = 0x07;
 
@@ -175,23 +181,23 @@
     }
 
     /**
-     * Defines constants related to status of the rights
+     * Defines status notifications for digital rights.
      */
     public static class RightsStatus {
         /**
-         * Constant field signifies that the rights are valid
+         * The digital rights are valid.
          */
         public static final int RIGHTS_VALID = 0x00;
         /**
-         * Constant field signifies that the rights are invalid
+         * The digital rights are invalid.
          */
         public static final int RIGHTS_INVALID = 0x01;
         /**
-         * Constant field signifies that the rights are expired for the content
+         * The digital rights have expired.
          */
         public static final int RIGHTS_EXPIRED = 0x02;
         /**
-         * Constant field signifies that the rights are not acquired for the content
+         * The digital rights have not been acquired for the rights-protected content.
          */
         public static final int RIGHTS_NOT_ACQUIRED = 0x03;
     }
diff --git a/drm/java/android/drm/DrmSupportInfo.java b/drm/java/android/drm/DrmSupportInfo.java
old mode 100644
new mode 100755
index 0886af8..720c545
--- a/drm/java/android/drm/DrmSupportInfo.java
+++ b/drm/java/android/drm/DrmSupportInfo.java
@@ -20,11 +20,11 @@
 import java.util.Iterator;
 
 /**
- * This is an entity class which wraps the capability of each plug-in,
- * such as mimetype's and file suffixes it could handle.
- *
- * Plug-in developer could return the capability of the plugin by passing
- * {@link DrmSupportInfo} instance.
+ * An entity class that wraps the capability of each DRM plug-in (agent),
+ * such as the MIME type and file suffix the DRM plug-in can handle.
+ *<p>
+ * Plug-in developers can expose the capability of their plug-in by passing an instance of this
+ * class to an application.
  *
  */
 public class DrmSupportInfo {
@@ -33,47 +33,47 @@
     private String mDescription = "";
 
     /**
-     * Add the mime-type to the support info such that respective plug-in is
-     * capable of handling the given mime-type.
+     * Adds the specified MIME type to the list of MIME types this DRM plug-in supports.
      *
-     * @param mimeType MIME type
+     * @param mimeType MIME type that can be handles by this DRM plug-in.
      */
     public void addMimeType(String mimeType) {
         mMimeTypeList.add(mimeType);
     }
 
     /**
-     * Add the file suffix to the support info such that respective plug-in is
-     * capable of handling the given file suffix.
+     * Adds the specified file suffix to the list of file suffixes this DRM plug-in supports.
      *
-     * @param fileSuffix File suffix which can be handled
+     * @param fileSuffix File suffix that can be handled by this DRM plug-in.
      */
     public void addFileSuffix(String fileSuffix) {
         mFileSuffixList.add(fileSuffix);
     }
 
     /**
-     * Returns the iterator to walk to through mime types of this object
+     * Retrieves an iterator object that you can use to iterate over the MIME types that 
+     * this DRM plug-in supports.
      *
-     * @return Iterator object
+     * @return The iterator object
      */
     public Iterator<String> getMimeTypeIterator() {
         return mMimeTypeList.iterator();
     }
 
     /**
-     * Returns the iterator to walk to through file suffixes of this object
+     * Retrieves an iterator object that you can use to iterate over the file suffixes that
+     * this DRM plug-in supports.
      *
-     * @return Iterator object
+     * @return The iterator object.
      */
     public Iterator<String> getFileSuffixIterator() {
         return mFileSuffixList.iterator();
     }
 
     /**
-     * Set the unique description about the plugin
+     * Sets a description for the DRM plug-in (agent).
      *
-     * @param description Unique description
+     * @param description Unique description of plug-in.
      */
     public void setDescription(String description) {
         if (null != description) {
@@ -82,30 +82,28 @@
     }
 
     /**
-     * Returns the unique description associated with the plugin
+     * Retrieves the DRM plug-in (agent) description.
      *
-     * @return Unique description
+     * @return The plug-in description.
      */
     public String getDescriprition() {
         return mDescription;
     }
 
     /**
-     * Overridden hash code implementation
+     * Overridden hash code implementation.
      *
-     * @return Hash code value
+     * @return The hash code value.
      */
     public int hashCode() {
         return mFileSuffixList.hashCode() + mMimeTypeList.hashCode() + mDescription.hashCode();
     }
 
     /**
-     * Overridden equals implementation
+     * Overridden <code>equals</code> implementation.
      *
-     * @param object The object to be compared
-     * @return
-     *     true if equal
-     *     false if not equal
+     * @param object The object to be compared.
+     * @return True if equal; false if not equal.
      */
     public boolean equals(Object object) {
         boolean result = false;
@@ -119,12 +117,10 @@
     }
 
     /**
-     * Returns whether given mime-type is supported or not
+     * Determines whether a given MIME type is supported.
      *
-     * @param mimeType MIME type
-     * @return
-     *     true if mime type is supported
-     *     false if mime type is not supported
+     * @param mimeType MIME type.
+     * @return True if Mime type is supported; false if MIME type is not supported.
      */
     /* package */ boolean isSupportedMimeType(String mimeType) {
         if (null != mimeType && !mimeType.equals("")) {
@@ -139,12 +135,10 @@
     }
 
     /**
-     * Returns whether given file suffix is supported or not
+     * Determines whether a given file suffix is supported.
      *
-     * @param fileSuffix File suffix
-     * @return
-     *     true - if file suffix is supported
-     *     false - if file suffix is not supported
+     * @param fileSuffix File suffix.
+     * @return True if file suffix is supported; false if file suffix is not supported.
      */
     /* package */ boolean isSupportedFileSuffix(String fileSuffix) {
         return mFileSuffixList.contains(fileSuffix);
diff --git a/drm/java/android/drm/DrmUtils.java b/drm/java/android/drm/DrmUtils.java
old mode 100644
new mode 100755
index 8903485..dc5f1fa
--- a/drm/java/android/drm/DrmUtils.java
+++ b/drm/java/android/drm/DrmUtils.java
@@ -28,9 +28,11 @@
 import java.util.Iterator;
 
 /**
- * The utility class used in the DRM Framework. This inclueds APIs for file operations
- * and ExtendedMetadataParser for parsing extended metadata BLOB in DRM constraints.
- *
+ * A utility class that provides operations for parsing extended metadata embedded in
+ * DRM constraint information. If a DRM scheme has specific constraints beyond the standard
+ * constraints, the constraints will show up in the
+ * {@link DrmStore.ConstraintsColumns#EXTENDED_METADATA} key. You can use
+ * {@link DrmUtils.ExtendedMetadataParser} to iterate over those values.
  */
 public class DrmUtils {
     /* Should be used when we need to read from local file */
@@ -99,13 +101,10 @@
     }
 
     /**
-     * Get an instance of ExtendedMetadataParser to be used for parsing
-     * extended metadata BLOB in DRM constraints. <br>
+     * Gets an instance of {@link DrmUtils.ExtendedMetadataParser}, which can be used to parse
+     * extended metadata embedded in DRM constraint information.
      *
-     * extendedMetadata BLOB is retrieved by specifing
-     * key DrmStore.ConstraintsColumns.EXTENDED_METADATA.
-     *
-     * @param extendedMetadata BLOB in which key-value pairs of extended metadata are embedded.
+     * @param extendedMetadata Object in which key-value pairs of extended metadata are embedded.
      *
      */
     public static ExtendedMetadataParser getExtendedMetadataParser(byte[] extendedMetadata) {
@@ -113,9 +112,10 @@
     }
 
     /**
-     * Utility parser to parse the extended meta-data embedded inside DRM constraints<br><br>
-     *
-     * Usage example<br>
+     * Utility that parses extended metadata embedded in DRM constraint information.
+     *<p>
+     * Usage example:
+     *<p>
      * byte[] extendedMetadata<br>
      * &nbsp;&nbsp;&nbsp;&nbsp; =
      *         constraints.getAsByteArray(DrmStore.ConstraintsColumns.EXTENDED_METADATA);<br>
diff --git a/drm/java/android/drm/ProcessedData.java b/drm/java/android/drm/ProcessedData.java
old mode 100644
new mode 100755
index 579264f..06e03e7
--- a/drm/java/android/drm/ProcessedData.java
+++ b/drm/java/android/drm/ProcessedData.java
@@ -17,11 +17,11 @@
 package android.drm;
 
 /**
- * This is an entity class which wraps the result of transaction between
- * device and online DRM server by using {@link DrmManagerClient#processDrmInfo(DrmInfo)}
+ * An entity class that wraps the result of a 
+ * {@link DrmManagerClient#processDrmInfo(DrmInfo) processDrmInfo()}
+ * transaction between a device and a DRM server.
  *
- * In license acquisition scenario this class would hold the binary data
- * of rights information.
+ * In a license acquisition scenario this class holds the rights information in binary form.
  *
  */
 public class ProcessedData {
@@ -30,10 +30,10 @@
     private String mSubscriptionId = "";
 
     /**
-     * constructor to create ProcessedData object with given parameters
+     * Creates a <code>ProcessedData</code> object with the given parameters.
      *
-     * @param data Rights data
-     * @param accountId Account Id of the user
+     * @param data Rights data.
+     * @param accountId Account ID of the user.
      */
     /* package */ ProcessedData(byte[] data, String accountId) {
         mData = data;
@@ -41,11 +41,11 @@
     }
 
     /**
-     * constructor to create ProcessedData object with given parameters
+     * Creates a <code>ProcessedData</code> object with the given parameters.
      *
-     * @param data Rights data
-     * @param accountId Account Id of the user
-     * @param subscriptionId Subscription Id of the user
+     * @param data Rights data.
+     * @param accountId Account ID of the user.
+     * @param subscriptionId Subscription ID of the user.
      */
     /* package */ ProcessedData(byte[] data, String accountId, String subscriptionId) {
         mData = data;
@@ -54,27 +54,27 @@
     }
 
     /**
-     * Returns the processed data as a result.
+     * Retrieves the processed data.
      *
-     * @return Rights data associated
+     * @return The rights data.
      */
     public byte[] getData() {
         return mData;
     }
 
     /**
-     * Returns the account-id associated with this object
+     * Retrieves the account ID associated with this object.
      *
-     * @return Account Id associated
+     * @return The account ID of the user.
      */
     public String getAccountId() {
         return mAccountId;
     }
 
     /**
-     * Returns the subscription-id associated with this object
+     * Returns the subscription ID associated with this object.
      *
-     * @return Subscription Id associated
+     * @return The subscription ID of the user.
      */
     public String getSubscriptionId() {
         return mSubscriptionId;
diff --git a/drm/java/android/drm/package.html b/drm/java/android/drm/package.html
new file mode 100755
index 0000000..161d6e0
--- /dev/null
+++ b/drm/java/android/drm/package.html
@@ -0,0 +1,85 @@
+<HTML>
+<BODY>
+<p>Provides classes for managing DRM content and determining the capabilities of DRM plugins
+(agents). Common uses of the DRM API include:</p>
+<ul>
+  <li>Determining which DRM plug-ins (agents) are installed on a device.</li>
+  <li>Retrieving information about specific plug-ins, such as the MIME types and file suffixes
+  they support.</li>
+  <li>Registering a user or a device with an online DRM service.</li>
+  <li>Retrieving license constraints for rights-protected content.</li>
+  <li>Checking whether a user has the proper rights to play or use rights-protected
+  content.</li>
+  <li>Associating rights-protected content with its license so you can use the
+  {@link android.media.MediaPlayer} API to play the content.</li>
+</ul>
+
+<h2>DRM Overview</h2>
+
+<p>The Android platform provides an extensible DRM framework that lets applications manage
+rights-protected content according to the license constraints that are associated with the
+content. The DRM framework supports many DRM schemes; which DRM schemes a device supports
+is up to the device manufacturer.</p>
+
+<p>The Android DRM framework is implemented in two architectural layers (see figure below):</p>
+<ul>
+  <li>A DRM framework API, which is exposed to applications through the Android
+application framework and runs through the Dalvik VM for standard applications.</li>
+  <li>A native code DRM manager, which implements the DRM framework and exposes an
+interface for DRM plug-ins (agents) to handle rights management and decryption for various
+DRM schemes.</li>
+</ul>
+
+<img src="../../../images/drm_arch.png" alt="DRM architecture diagram" border="0"/>
+
+<p>For application developers, the DRM framework offers an abstract, unified API that
+simplifies the management of rights-protected content. The API hides the complexity of DRM
+operations and allows a consistent operation mode for both rights-protected and unprotected content
+across a variety of DRM schemes. For device manufacturers, content owners, and Internet digital
+media providers the DRM framework’s plugin architecture provides a means of adding support for a
+specific DRM scheme to the Android system.</p>
+
+<h2>Using the DRM API</h2>
+
+<p>In a typical DRM session, an Android application uses the DRM framework API to
+instantiate a {@link android.drm.DrmManagerClient}. The application calls various methods
+on the DRM client to query rights and perform other DRM-related tasks. Each
+{@link android.drm.DrmManagerClient} instance has its own unique ID, so the DRM manager is able to
+differentiate callers.</p>
+
+<p>Although each DRM plug-in may require a different sequence
+of API calls, the general call sequence for an application is as follows:</p>
+
+<ul>
+  <li>Register the device with an online DRM service.
+    <p>You can do this by first using the {@link android.drm.DrmManagerClient#acquireDrmInfo
+acquireDrmInfo()} method to acquire the registration information, and then using the {@link
+android.drm.DrmManagerClient#processDrmInfo processDrmInfo()} method to process the
+registration information.</p>
+  </li>
+  <li>Acquire the license that's associated with the rights-protected content.
+    <p>You can do this by first using the {@link android.drm.DrmManagerClient#acquireDrmInfo
+acquireDrmInfo()} method to acquire the license information, and then using the {@link
+android.drm.DrmManagerClient#processDrmInfo processDrmInfo()} method to process the
+license information. You can also use the {@link
+android.drm.DrmManagerClient#acquireRights acquireRights()} method.</p>
+  </li>
+  <li>Extract constraint information from the license.
+    <p>You can use the {@link android.drm.DrmManagerClient#getConstraints getConstraints()}
+    method to do this.</p>
+  </li>
+  <li>Associate the rights-protected content with its license.
+    <p>You can use the {@link android.drm.DrmManagerClient#saveRights saveRights()} method
+    to do this.</p>
+  </li>
+</ul>
+
+<p>After you make an association between the rights-protected content and its license,
+the DRM manager automatically handles rights management for that content. Specifically, the
+DRM manager will handle all further licensing checks when you attempt to play the content using
+the {@link android.media.MediaPlayer} API.</p>
+
+<p>To learn how to use the DRM API with a specific DRM plug-in, see the documentation provided
+by the plug-in developer.</p>
+</BODY>
+</HTML>
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java
index 958bbb0..59783e5 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java
@@ -30,6 +30,7 @@
 import android.test.suitebuilder.annotation.LargeTest;
 import com.android.mediaframeworktest.MediaFrameworkTest;
 import com.android.mediaframeworktest.VideoEditorHelper;
+import com.android.mediaframeworktest.MediaProfileReader;
 
 public class MediaPropertiesTest extends
     ActivityInstrumentationTestCase<MediaFrameworkTest> {
@@ -465,11 +466,17 @@
         final String videoItemFilename = INPUT_FILE_PATH +
             "WMV_V7_640x480_15fps_512Kbps_wma_V9_44khz_48Kbps_s_1_30.wmv";
         boolean flagForException = false;
-        try {
-            new MediaVideoItem(mVideoEditor, "m1", videoItemFilename,
-                MediaItem.RENDERING_MODE_BLACK_BORDER);
-        } catch (IllegalArgumentException e) {
+        if (MediaProfileReader.getWMVEnable() == false) {
             flagForException = true;
+        } else {
+            try {
+                new MediaVideoItem(mVideoEditor, "m1", videoItemFilename,
+                    MediaItem.RENDERING_MODE_BLACK_BORDER);
+            } catch (IllegalArgumentException e) {
+                flagForException = true;
+            } catch (IOException e) {
+                flagForException = true;
+            }
         }
         assertTrue("Media Properties for a WMV File -- Unsupported file type",
             flagForException);
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 14a6b96..fcb4c23 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -1415,10 +1415,13 @@
         if (TextUtils.isEmpty(interfaceName)) return;
         for (InetAddress gateway : p.getGateways()) {
 
-            if (!NetworkUtils.addDefaultRoute(interfaceName, gateway) && DBG) {
-                NetworkInfo networkInfo = nt.getNetworkInfo();
-                log("addDefaultRoute for " + networkInfo.getTypeName() +
-                        " (" + interfaceName + "), GatewayAddr=" + gateway.getHostAddress());
+            if (NetworkUtils.addHostRoute(interfaceName, gateway, null) &&
+                    NetworkUtils.addDefaultRoute(interfaceName, gateway)) {
+                if (DBG) {
+                    NetworkInfo networkInfo = nt.getNetworkInfo();
+                    log("addDefaultRoute for " + networkInfo.getTypeName() +
+                            " (" + interfaceName + "), GatewayAddr=" + gateway.getHostAddress());
+                }
             }
         }
     }
@@ -1430,10 +1433,12 @@
         String interfaceName = p.getInterfaceName();
 
         if (interfaceName != null) {
-            if ((NetworkUtils.removeDefaultRoute(interfaceName) >= 0) && DBG) {
-                NetworkInfo networkInfo = nt.getNetworkInfo();
-                log("removeDefaultRoute for " + networkInfo.getTypeName() + " (" +
-                        interfaceName + ")");
+            if (NetworkUtils.removeDefaultRoute(interfaceName) >= 0) {
+                if (DBG) {
+                    NetworkInfo networkInfo = nt.getNetworkInfo();
+                    log("removeDefaultRoute for " + networkInfo.getTypeName() + " (" +
+                            interfaceName + ")");
+                }
             }
         }
     }