Merge "Fix inverted release-EGLContext-on-pause logic."
diff --git a/Android.mk b/Android.mk
index 8a8678d..35ee3fd 100644
--- a/Android.mk
+++ b/Android.mk
@@ -93,9 +93,9 @@
 	core/java/android/app/IWallpaperManager.aidl \
 	core/java/android/app/IWallpaperManagerCallback.aidl \
 	core/java/android/app/admin/IDevicePolicyManager.aidl \
-	core/java/android/backup/IBackupManager.aidl \
-	core/java/android/backup/IRestoreObserver.aidl \
-	core/java/android/backup/IRestoreSession.aidl \
+	core/java/android/app/backup/IBackupManager.aidl \
+	core/java/android/app/backup/IRestoreObserver.aidl \
+	core/java/android/app/backup/IRestoreSession.aidl \
 	core/java/android/bluetooth/IBluetooth.aidl \
 	core/java/android/bluetooth/IBluetoothA2dp.aidl \
 	core/java/android/bluetooth/IBluetoothCallback.aidl \
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000..b6b8640
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,6 @@
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/com/android/internal/os/IDropBoxService.java)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/backup)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/com/android/internal/backup)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/backup)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/com/android/internal/backup)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/app)
diff --git a/api/current.xml b/api/current.xml
index fd8a180..4146859 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -19916,83 +19916,6 @@
 >
 </method>
 </class>
-<class name="BackupAgent"
- extends="android.content.ContextWrapper"
- abstract="true"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="BackupAgent"
- type="android.app.BackupAgent"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-<method name="onBackup"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="oldState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<parameter name="data" type="android.backup.BackupDataOutput">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="onCreate"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="onDestroy"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="onRestore"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="android.backup.BackupDataInput">
-</parameter>
-<parameter name="appVersionCode" type="int">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-</class>
 <class name="DatePickerDialog"
  extends="android.app.AlertDialog"
  abstract="false"
@@ -26974,6 +26897,692 @@
 </field>
 </class>
 </package>
+<package name="android.app.backup"
+>
+<class name="AbsoluteFileBackupHelper"
+ extends="android.app.backup.FileBackupHelperBase"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.app.backup.BackupHelper">
+</implements>
+<constructor name="AbsoluteFileBackupHelper"
+ type="android.app.backup.AbsoluteFileBackupHelper"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="files" type="java.lang.String...">
+</parameter>
+</constructor>
+<method name="performBackup"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="oldState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<parameter name="data" type="android.app.backup.BackupDataOutput">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+</method>
+<method name="restoreEntity"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="android.app.backup.BackupDataInputStream">
+</parameter>
+</method>
+</class>
+<class name="BackupAgent"
+ extends="android.content.ContextWrapper"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="BackupAgent"
+ type="android.app.backup.BackupAgent"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="onBackup"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="oldState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<parameter name="data" type="android.app.backup.BackupDataOutput">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="onCreate"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="onDestroy"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="onRestore"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="android.app.backup.BackupDataInput">
+</parameter>
+<parameter name="appVersionCode" type="int">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+</class>
+<class name="BackupDataInput"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getDataSize"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getKey"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="readEntityData"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="byte[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+<parameter name="size" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="readNextHeader"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="skipEntityData"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+</class>
+<class name="BackupDataInputStream"
+ extends="java.io.InputStream"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getKey"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="read"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="size"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
+<class name="BackupDataOutput"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="setKeyPrefix"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyPrefix" type="java.lang.String">
+</parameter>
+</method>
+<method name="writeEntityData"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="byte[]">
+</parameter>
+<parameter name="size" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="writeEntityHeader"
+ return="int"
+ 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="dataSize" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<field name="OP_DELETE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OP_UPDATE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<interface name="BackupHelper"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="performBackup"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="oldState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<parameter name="data" type="android.app.backup.BackupDataOutput">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+</method>
+<method name="restoreEntity"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="android.app.backup.BackupDataInputStream">
+</parameter>
+</method>
+<method name="writeNewStateDescription"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fd" type="android.os.ParcelFileDescriptor">
+</parameter>
+</method>
+</interface>
+<class name="BackupHelperAgent"
+ extends="android.app.backup.BackupAgent"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="BackupHelperAgent"
+ type="android.app.backup.BackupHelperAgent"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="addHelper"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyPrefix" type="java.lang.String">
+</parameter>
+<parameter name="helper" type="android.app.backup.BackupHelper">
+</parameter>
+</method>
+<method name="onBackup"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="oldState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<parameter name="data" type="android.app.backup.BackupDataOutput">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="onRestore"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="android.app.backup.BackupDataInput">
+</parameter>
+<parameter name="appVersionCode" type="int">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+</class>
+<class name="BackupManager"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="BackupManager"
+ type="android.app.backup.BackupManager"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+</constructor>
+<method name="beginRestoreSession"
+ return="android.app.backup.RestoreSession"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="dataChanged"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="dataChanged"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="packageName" type="java.lang.String">
+</parameter>
+</method>
+</class>
+<class name="FileBackupHelper"
+ extends="android.app.backup.FileBackupHelperBase"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.app.backup.BackupHelper">
+</implements>
+<constructor name="FileBackupHelper"
+ type="android.app.backup.FileBackupHelper"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="files" type="java.lang.String...">
+</parameter>
+</constructor>
+<method name="performBackup"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="oldState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<parameter name="data" type="android.app.backup.BackupDataOutput">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+</method>
+<method name="restoreEntity"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="android.app.backup.BackupDataInputStream">
+</parameter>
+</method>
+</class>
+<class name="FileBackupHelperBase"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility=""
+>
+<method name="writeNewStateDescription"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fd" type="android.os.ParcelFileDescriptor">
+</parameter>
+</method>
+</class>
+<class name="RestoreObserver"
+ extends="java.lang.Object"
+ abstract="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="RestoreObserver"
+ type="android.app.backup.RestoreObserver"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+</class>
+<class name="RestoreSession"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="endRestoreSession"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="restorePackage"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="packageName" type="java.lang.String">
+</parameter>
+<parameter name="observer" type="android.app.backup.RestoreObserver">
+</parameter>
+</method>
+</class>
+<class name="SharedPreferencesBackupHelper"
+ extends="android.app.backup.FileBackupHelperBase"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.app.backup.BackupHelper">
+</implements>
+<constructor name="SharedPreferencesBackupHelper"
+ type="android.app.backup.SharedPreferencesBackupHelper"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="prefGroups" type="java.lang.String...">
+</parameter>
+</constructor>
+<method name="performBackup"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="oldState" type="android.os.ParcelFileDescriptor">
+</parameter>
+<parameter name="data" type="android.app.backup.BackupDataOutput">
+</parameter>
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
+</parameter>
+</method>
+<method name="restoreEntity"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="data" type="android.app.backup.BackupDataInputStream">
+</parameter>
+</method>
+</class>
+</package>
 <package name="android.appwidget"
 >
 <class name="AppWidgetHost"
@@ -27719,615 +28328,6 @@
 </field>
 </class>
 </package>
-<package name="android.backup"
->
-<class name="AbsoluteFileBackupHelper"
- extends="android.backup.FileBackupHelperBase"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<implements name="android.backup.BackupHelper">
-</implements>
-<constructor name="AbsoluteFileBackupHelper"
- type="android.backup.AbsoluteFileBackupHelper"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="context" type="android.content.Context">
-</parameter>
-<parameter name="files" type="java.lang.String...">
-</parameter>
-</constructor>
-<method name="performBackup"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="oldState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<parameter name="data" type="android.backup.BackupDataOutput">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-</method>
-<method name="restoreEntity"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="android.backup.BackupDataInputStream">
-</parameter>
-</method>
-</class>
-<class name="BackupDataInput"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="getDataSize"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getKey"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="readEntityData"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="byte[]">
-</parameter>
-<parameter name="offset" type="int">
-</parameter>
-<parameter name="size" type="int">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="readNextHeader"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="skipEntityData"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-</class>
-<class name="BackupDataInputStream"
- extends="java.io.InputStream"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="getKey"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="read"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="size"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-</class>
-<class name="BackupDataOutput"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="setKeyPrefix"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="keyPrefix" type="java.lang.String">
-</parameter>
-</method>
-<method name="writeEntityData"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="byte[]">
-</parameter>
-<parameter name="size" type="int">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="writeEntityHeader"
- return="int"
- 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="dataSize" type="int">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<field name="OP_DELETE"
- type="int"
- transient="false"
- volatile="false"
- value="2"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="OP_UPDATE"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-</class>
-<interface name="BackupHelper"
- abstract="true"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="performBackup"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="oldState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<parameter name="data" type="android.backup.BackupDataOutput">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-</method>
-<method name="restoreEntity"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="android.backup.BackupDataInputStream">
-</parameter>
-</method>
-<method name="writeNewStateDescription"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="fd" type="android.os.ParcelFileDescriptor">
-</parameter>
-</method>
-</interface>
-<class name="BackupHelperAgent"
- extends="android.app.BackupAgent"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="BackupHelperAgent"
- type="android.backup.BackupHelperAgent"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-<method name="addHelper"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="keyPrefix" type="java.lang.String">
-</parameter>
-<parameter name="helper" type="android.backup.BackupHelper">
-</parameter>
-</method>
-<method name="onBackup"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="oldState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<parameter name="data" type="android.backup.BackupDataOutput">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="onRestore"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="android.backup.BackupDataInput">
-</parameter>
-<parameter name="appVersionCode" type="int">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-</class>
-<class name="BackupManager"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="BackupManager"
- type="android.backup.BackupManager"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="context" type="android.content.Context">
-</parameter>
-</constructor>
-<method name="beginRestoreSession"
- return="android.backup.RestoreSession"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="dataChanged"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="dataChanged"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="packageName" type="java.lang.String">
-</parameter>
-</method>
-</class>
-<class name="FileBackupHelper"
- extends="android.backup.FileBackupHelperBase"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<implements name="android.backup.BackupHelper">
-</implements>
-<constructor name="FileBackupHelper"
- type="android.backup.FileBackupHelper"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="context" type="android.content.Context">
-</parameter>
-<parameter name="files" type="java.lang.String...">
-</parameter>
-</constructor>
-<method name="performBackup"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="oldState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<parameter name="data" type="android.backup.BackupDataOutput">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-</method>
-<method name="restoreEntity"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="android.backup.BackupDataInputStream">
-</parameter>
-</method>
-</class>
-<class name="FileBackupHelperBase"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility=""
->
-<method name="writeNewStateDescription"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="fd" type="android.os.ParcelFileDescriptor">
-</parameter>
-</method>
-</class>
-<class name="RestoreObserver"
- extends="java.lang.Object"
- abstract="true"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="RestoreObserver"
- type="android.backup.RestoreObserver"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-</class>
-<class name="RestoreSession"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="endRestoreSession"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="restorePackage"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="packageName" type="java.lang.String">
-</parameter>
-<parameter name="observer" type="android.backup.RestoreObserver">
-</parameter>
-</method>
-</class>
-<class name="SharedPreferencesBackupHelper"
- extends="android.backup.FileBackupHelperBase"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<implements name="android.backup.BackupHelper">
-</implements>
-<constructor name="SharedPreferencesBackupHelper"
- type="android.backup.SharedPreferencesBackupHelper"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="context" type="android.content.Context">
-</parameter>
-<parameter name="prefGroups" type="java.lang.String...">
-</parameter>
-</constructor>
-<method name="performBackup"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="oldState" type="android.os.ParcelFileDescriptor">
-</parameter>
-<parameter name="data" type="android.backup.BackupDataOutput">
-</parameter>
-<parameter name="newState" type="android.os.ParcelFileDescriptor">
-</parameter>
-</method>
-<method name="restoreEntity"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="data" type="android.backup.BackupDataInputStream">
-</parameter>
-</method>
-</class>
-</package>
 <package name="android.bluetooth"
 >
 <class name="BluetoothAdapter"
@@ -204064,6 +204064,17 @@
  synchronized="false"
  static="false"
  final="false"
+ deprecated="deprecated"
+ visibility="public"
+>
+</method>
+<method name="getCheckedItemIds"
+ return="long[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
  deprecated="not deprecated"
  visibility="public"
 >
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp
index 7e81e90..00bd54e 100644
--- a/camera/libcameraservice/CameraService.cpp
+++ b/camera/libcameraservice/CameraService.cpp
@@ -1291,8 +1291,26 @@
     client->dataCallback(CAMERA_MSG_PREVIEW_FRAME, frame);
 }
 
+static const int kDumpLockRetries = 50;
+static const int kDumpLockSleep = 60000;
+
+static bool tryLock(Mutex& mutex)
+{
+    bool locked = false;
+    for (int i = 0; i < kDumpLockRetries; ++i) {
+        if (mutex.tryLock() == NO_ERROR) {
+            locked = true;
+            break;
+        }
+        usleep(kDumpLockSleep);
+    }
+    return locked;
+}
+
 status_t CameraService::dump(int fd, const Vector<String16>& args)
 {
+    static const char* kDeadlockedString = "CameraService may be deadlocked\n";
+
     const size_t SIZE = 256;
     char buffer[SIZE];
     String8 result;
@@ -1304,7 +1322,13 @@
         result.append(buffer);
         write(fd, result.string(), result.size());
     } else {
-        AutoMutex lock(&mServiceLock);
+        bool locked = tryLock(mServiceLock);
+        // failed to lock - CameraService is probably deadlocked
+        if (!locked) {
+            String8 result(kDeadlockedString);
+            write(fd, result.string(), result.size());
+        }
+
         if (mClient != 0) {
             sp<Client> currentClient = mClient.promote();
             sprintf(buffer, "Client (%p) PID: %d\n",
@@ -1317,6 +1341,8 @@
             result.append("No camera client yet.\n");
             write(fd, result.string(), result.size());
         }
+
+        if (locked) mServiceLock.unlock();
     }
     return NO_ERROR;
 }
diff --git a/cleanspec.mk b/cleanspec.mk
deleted file mode 100644
index 683e303..0000000
--- a/cleanspec.mk
+++ /dev/null
@@ -1 +0,0 @@
-$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/com/android/internal/os/IDropBoxService.java)
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index 67c658d..d040b44 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -16,10 +16,10 @@
 
 package com.android.commands.bmgr;
 
-import android.backup.IBackupManager;
-import android.backup.IRestoreObserver;
-import android.backup.IRestoreSession;
-import android.backup.RestoreSet;
+import android.app.backup.RestoreSet;
+import android.app.backup.IBackupManager;
+import android.app.backup.IRestoreObserver;
+import android.app.backup.IRestoreSession;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 0756c71..7c49bb7 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -16,6 +16,7 @@
 
 package android.app;
 
+import android.app.backup.BackupAgent;
 import android.content.BroadcastReceiver;
 import android.content.ComponentCallbacks;
 import android.content.ComponentName;
diff --git a/core/java/android/app/FullBackupAgent.java b/core/java/android/app/FullBackupAgent.java
index db198ad..dcfa63f 100644
--- a/core/java/android/app/FullBackupAgent.java
+++ b/core/java/android/app/FullBackupAgent.java
@@ -1,8 +1,9 @@
 package android.app;
 
-import android.backup.BackupDataInput;
-import android.backup.BackupDataOutput;
-import android.backup.FileBackupHelper;
+import android.app.backup.BackupAgent;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.FileBackupHelper;
 import android.os.ParcelFileDescriptor;
 import android.util.Log;
 
diff --git a/core/java/android/app/IBackupAgent.aidl b/core/java/android/app/IBackupAgent.aidl
index 0de6ad9..fed2bc5 100644
--- a/core/java/android/app/IBackupAgent.aidl
+++ b/core/java/android/app/IBackupAgent.aidl
@@ -16,13 +16,13 @@
 
 package android.app;
 
-import android.backup.IBackupManager;
+import android.app.backup.IBackupManager;
 import android.os.ParcelFileDescriptor;
  
 /**
  * Interface presented by applications being asked to participate in the
- * backup & restore mechanism.  End user code does not typically implement
- * this interface; they subclass BackupAgent instead.
+ * backup & restore mechanism.  End user code will not typically implement
+ * this interface directly; they subclass BackupAgent instead.
  *
  * {@hide}
  */ 
diff --git a/core/java/android/backup/AbsoluteFileBackupHelper.java b/core/java/android/app/backup/AbsoluteFileBackupHelper.java
similarity index 98%
rename from core/java/android/backup/AbsoluteFileBackupHelper.java
rename to core/java/android/app/backup/AbsoluteFileBackupHelper.java
index 5a8034b..677224c 100644
--- a/core/java/android/backup/AbsoluteFileBackupHelper.java
+++ b/core/java/android/app/backup/AbsoluteFileBackupHelper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import android.content.Context;
 import android.os.ParcelFileDescriptor;
diff --git a/core/java/android/app/BackupAgent.java b/core/java/android/app/backup/BackupAgent.java
similarity index 96%
rename from core/java/android/app/BackupAgent.java
rename to core/java/android/app/backup/BackupAgent.java
index 4695c21..d0cb148 100644
--- a/core/java/android/app/BackupAgent.java
+++ b/core/java/android/app/backup/BackupAgent.java
@@ -14,12 +14,10 @@
  * limitations under the License.
  */
 
-package android.app;
+package android.app.backup;
 
 import android.app.IBackupAgent;
-import android.backup.BackupDataInput;
-import android.backup.BackupDataOutput;
-import android.backup.IBackupManager;
+import android.app.backup.IBackupManager;
 import android.content.Context;
 import android.content.ContextWrapper;
 import android.os.Binder;
@@ -39,7 +37,7 @@
  * respectively.
  * <p>
  * A backup agent based on convenient helper classes is available in
- * {@link android.backup.BackupHelperAgent} for less complex implementation
+ * {@link android.app.backup.BackupHelperAgent} for less complex implementation
  * requirements.
  * <p>
  * STOPSHIP write more documentation about the backup process here.
@@ -87,7 +85,7 @@
      * The application is being restored from backup and should replace any
      * existing data with the contents of the backup. The backup data is
      * provided in the file descriptor pointed to by the
-     * {@link android.backup.BackupDataInput} instance <code>data</code>. Once
+     * {@link android.app.backup.BackupDataInput} instance <code>data</code>. Once
      * the restore is finished, the application should write a representation of
      * the final state to the <code>newState</code> file descriptor.
      * <p>
diff --git a/core/java/android/backup/BackupDataInput.java b/core/java/android/app/backup/BackupDataInput.java
similarity index 98%
rename from core/java/android/backup/BackupDataInput.java
rename to core/java/android/app/backup/BackupDataInput.java
index a08ee75..2da0c11 100644
--- a/core/java/android/backup/BackupDataInput.java
+++ b/core/java/android/app/backup/BackupDataInput.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import java.io.FileDescriptor;
 import java.io.IOException;
@@ -131,7 +131,7 @@
 
     /**
      * Consume the current record's data without actually reading it into a buffer
-     * for further processing.  This allows a {@link android.app.BackupAgent} to
+     * for further processing.  This allows a {@link android.app.backup.BackupAgent} to
      * efficiently discard obsolete or otherwise uninteresting records during the
      * restore operation.
      * 
diff --git a/core/java/android/backup/BackupDataInputStream.java b/core/java/android/app/backup/BackupDataInputStream.java
similarity index 97%
rename from core/java/android/backup/BackupDataInputStream.java
rename to core/java/android/app/backup/BackupDataInputStream.java
index 503b3c1..a7f4ba6 100644
--- a/core/java/android/backup/BackupDataInputStream.java
+++ b/core/java/android/app/backup/BackupDataInputStream.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import java.io.InputStream;
 import java.io.IOException;
diff --git a/core/java/android/backup/BackupDataOutput.java b/core/java/android/app/backup/BackupDataOutput.java
similarity index 98%
rename from core/java/android/backup/BackupDataOutput.java
rename to core/java/android/app/backup/BackupDataOutput.java
index 34879d8..53b1d46 100644
--- a/core/java/android/backup/BackupDataOutput.java
+++ b/core/java/android/app/backup/BackupDataOutput.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import java.io.FileDescriptor;
 import java.io.IOException;
diff --git a/core/java/android/backup/BackupHelper.java b/core/java/android/app/backup/BackupHelper.java
similarity index 93%
rename from core/java/android/backup/BackupHelper.java
rename to core/java/android/app/backup/BackupHelper.java
index 7eedd01..dca23881 100644
--- a/core/java/android/backup/BackupHelper.java
+++ b/core/java/android/app/backup/BackupHelper.java
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import android.os.ParcelFileDescriptor;
 
 /**
  * A convenient interface to be used with the
- * {@link android.backup.BackupHelperAgent} to implement backup and restore of
+ * {@link android.app.backup.BackupHelperAgent} to implement backup and restore of
  * arbitrary data types.
  * <p>
  * STOPSHOP: document!
diff --git a/core/java/android/backup/BackupHelperAgent.java b/core/java/android/app/backup/BackupHelperAgent.java
similarity index 97%
rename from core/java/android/backup/BackupHelperAgent.java
rename to core/java/android/app/backup/BackupHelperAgent.java
index 7fb44f4..6f4a031 100644
--- a/core/java/android/backup/BackupHelperAgent.java
+++ b/core/java/android/app/backup/BackupHelperAgent.java
@@ -14,9 +14,8 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
-import android.app.BackupAgent;
 import android.os.ParcelFileDescriptor;
 
 import java.io.IOException;
diff --git a/core/java/android/backup/BackupHelperDispatcher.java b/core/java/android/app/backup/BackupHelperDispatcher.java
similarity index 99%
rename from core/java/android/backup/BackupHelperDispatcher.java
rename to core/java/android/app/backup/BackupHelperDispatcher.java
index 68076db..5466db5 100644
--- a/core/java/android/backup/BackupHelperDispatcher.java
+++ b/core/java/android/app/backup/BackupHelperDispatcher.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import android.os.ParcelFileDescriptor;
 import android.util.Log;
diff --git a/core/java/android/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java
similarity index 88%
rename from core/java/android/backup/BackupManager.java
rename to core/java/android/app/backup/BackupManager.java
index 2dff975..12d4daf 100644
--- a/core/java/android/backup/BackupManager.java
+++ b/core/java/android/app/backup/BackupManager.java
@@ -14,9 +14,11 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
-import android.backup.RestoreSession;
+import android.app.backup.RestoreSession;
+import android.app.backup.IBackupManager;
+import android.app.backup.IRestoreSession;
 import android.content.Context;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -34,12 +36,12 @@
  * operation actually occurs.
  * <p>
  * The backup operation itself begins with the system launching the
- * {@link android.app.BackupAgent} subclass declared in your manifest. See the
- * documentation for {@link android.app.BackupAgent} for a detailed description
+ * {@link android.app.backup.BackupAgent} subclass declared in your manifest. See the
+ * documentation for {@link android.app.backup.BackupAgent} for a detailed description
  * of how the backup then proceeds.
  * <p>
  * A simple implementation of a BackupAgent useful for backing up Preferences
- * and files is available by using {@link android.backup.BackupHelperAgent}.
+ * and files is available by using {@link android.app.backup.BackupHelperAgent}.
  * <p>
  * STOPSHIP: more documentation!
  * <p>
@@ -82,7 +84,7 @@
     /**
      * Notifies the Android backup system that your application wishes to back up
      * new changes to its data.  A backup operation using your application's
-     * {@link android.app.BackupAgent} subclass will be scheduled when you call this method.
+     * {@link android.app.backup.BackupAgent} subclass will be scheduled when you call this method.
      */
     public void dataChanged() {
         checkServiceBinder();
@@ -116,7 +118,7 @@
 
     /**
      * Begin the process of restoring data from backup.  See the
-     * {@link android.backup.RestoreSession} class for documentation on that process.
+     * {@link android.app.backup.RestoreSession} class for documentation on that process.
      */
     public RestoreSession beginRestoreSession() {
         RestoreSession session = null;
diff --git a/core/java/android/backup/FileBackupHelper.java b/core/java/android/app/backup/FileBackupHelper.java
similarity index 92%
rename from core/java/android/backup/FileBackupHelper.java
rename to core/java/android/app/backup/FileBackupHelper.java
index cc859e2..b42049e 100644
--- a/core/java/android/backup/FileBackupHelper.java
+++ b/core/java/android/app/backup/FileBackupHelper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import android.content.Context;
 import android.os.ParcelFileDescriptor;
@@ -24,7 +24,7 @@
 
 /**
  * A helper class which can be used in conjunction with
- * {@link android.backup.BackupHelperAgent} to manage the backup of a set of
+ * {@link android.app.backup.BackupHelperAgent} to manage the backup of a set of
  * files. Whenever backup is performed, all files changed since the last backup
  * will be saved in their entirety. During the first time the backup happens,
  * all the files in the list will be backed up. Note that this should only be
@@ -69,9 +69,9 @@
      * now. When <code>oldState</code> is <code>null</code>, all the files will
      * be backed up.
      * <p>
-     * This should be called from {@link android.backup.BackupHelperAgent}
+     * This should be called from {@link android.app.backup.BackupHelperAgent}
      * directly. See
-     * {@link android.app.BackupAgent#onBackup(ParcelFileDescriptor, BackupDataOutput, ParcelFileDescriptor)}
+     * {@link android.app.backup.BackupAgent#onBackup(ParcelFileDescriptor, BackupDataOutput, ParcelFileDescriptor)}
      * for a description of parameter meanings.
      */
     public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
diff --git a/core/java/android/backup/FileBackupHelperBase.java b/core/java/android/app/backup/FileBackupHelperBase.java
similarity index 97%
rename from core/java/android/backup/FileBackupHelperBase.java
rename to core/java/android/app/backup/FileBackupHelperBase.java
index 7cb1ccc..1e3158f 100644
--- a/core/java/android/backup/FileBackupHelperBase.java
+++ b/core/java/android/app/backup/FileBackupHelperBase.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import android.content.Context;
 import android.os.ParcelFileDescriptor;
@@ -24,7 +24,7 @@
 import java.io.FileDescriptor;
 
 /**
- * Base class for the {@link android.backup.FileBackupHelper} implementation.
+ * Base class for the {@link android.app.backup.FileBackupHelper} implementation.
  */
 class FileBackupHelperBase {
     private static final String TAG = "FileBackupHelperBase";
diff --git a/core/java/android/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl
similarity index 97%
rename from core/java/android/backup/IBackupManager.aidl
rename to core/java/android/app/backup/IBackupManager.aidl
index d94b066..23d6351 100644
--- a/core/java/android/backup/IBackupManager.aidl
+++ b/core/java/android/app/backup/IBackupManager.aidl
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
-import android.backup.IRestoreSession;
+import android.app.backup.IRestoreSession;
 
 /**
  * Direct interface to the Backup Manager Service that applications invoke on.  The only
  * operation currently needed is a simple notification that the app has made changes to
  * data it wishes to back up, so the system should run a backup pass.
  *
- * Apps will use the {@link android.backup.BackupManager} class rather than going through
+ * Apps will use the {@link android.app.backup.BackupManager} class rather than going through
  * this Binder interface directly.
  * 
  * {@hide}
diff --git a/core/java/android/backup/IRestoreObserver.aidl b/core/java/android/app/backup/IRestoreObserver.aidl
similarity index 98%
rename from core/java/android/backup/IRestoreObserver.aidl
rename to core/java/android/app/backup/IRestoreObserver.aidl
index 59e59fc..75d0d17 100644
--- a/core/java/android/backup/IRestoreObserver.aidl
+++ b/core/java/android/app/backup/IRestoreObserver.aidl
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 /**
  * Callback class for receiving progress reports during a restore operation.
diff --git a/core/java/android/backup/IRestoreSession.aidl b/core/java/android/app/backup/IRestoreSession.aidl
similarity index 96%
rename from core/java/android/backup/IRestoreSession.aidl
rename to core/java/android/app/backup/IRestoreSession.aidl
index bead395..58c21fe 100644
--- a/core/java/android/backup/IRestoreSession.aidl
+++ b/core/java/android/app/backup/IRestoreSession.aidl
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
-import android.backup.RestoreSet;
-import android.backup.IRestoreObserver;
+import android.app.backup.RestoreSet;
+import android.app.backup.IRestoreObserver;
 
 /**
  * Binder interface used by clients who wish to manage a restore operation.  Every
diff --git a/core/java/android/backup/RestoreObserver.java b/core/java/android/app/backup/RestoreObserver.java
similarity index 98%
rename from core/java/android/backup/RestoreObserver.java
rename to core/java/android/app/backup/RestoreObserver.java
index e4182750..7a5e10b 100644
--- a/core/java/android/backup/RestoreObserver.java
+++ b/core/java/android/app/backup/RestoreObserver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 /**
  * Callback class for receiving progress reports during a restore operation.  These
diff --git a/core/java/android/backup/RestoreSession.java b/core/java/android/app/backup/RestoreSession.java
similarity index 97%
rename from core/java/android/backup/RestoreSession.java
rename to core/java/android/app/backup/RestoreSession.java
index bc410c4..730a21f 100644
--- a/core/java/android/backup/RestoreSession.java
+++ b/core/java/android/app/backup/RestoreSession.java
@@ -14,11 +14,12 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
-import android.backup.IRestoreSession;
-import android.backup.RestoreObserver;
-import android.backup.RestoreSet;
+import android.app.backup.RestoreObserver;
+import android.app.backup.RestoreSet;
+import android.app.backup.IRestoreObserver;
+import android.app.backup.IRestoreSession;
 import android.content.Context;
 import android.os.Handler;
 import android.os.Message;
diff --git a/core/java/android/backup/RestoreSet.aidl b/core/java/android/app/backup/RestoreSet.aidl
similarity index 95%
rename from core/java/android/backup/RestoreSet.aidl
rename to core/java/android/app/backup/RestoreSet.aidl
index 42e77bf..ab1b125 100644
--- a/core/java/android/backup/RestoreSet.aidl
+++ b/core/java/android/app/backup/RestoreSet.aidl
@@ -14,6 +14,6 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 parcelable RestoreSet;
\ No newline at end of file
diff --git a/core/java/android/backup/RestoreSet.java b/core/java/android/app/backup/RestoreSet.java
similarity index 98%
rename from core/java/android/backup/RestoreSet.java
rename to core/java/android/app/backup/RestoreSet.java
index eeca148..0431977 100644
--- a/core/java/android/backup/RestoreSet.java
+++ b/core/java/android/app/backup/RestoreSet.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/core/java/android/backup/SharedPreferencesBackupHelper.java b/core/java/android/app/backup/SharedPreferencesBackupHelper.java
similarity index 96%
rename from core/java/android/backup/SharedPreferencesBackupHelper.java
rename to core/java/android/app/backup/SharedPreferencesBackupHelper.java
index 7ba80db..d35b10c 100644
--- a/core/java/android/backup/SharedPreferencesBackupHelper.java
+++ b/core/java/android/app/backup/SharedPreferencesBackupHelper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.backup;
+package android.app.backup;
 
 import android.content.Context;
 import android.content.SharedPreferences;
@@ -25,7 +25,7 @@
 
 /**
  * A helper class which can be used in conjunction with
- * {@link android.backup.BackupHelperAgent} to manage the backup of
+ * {@link android.app.backup.BackupHelperAgent} to manage the backup of
  * {@link android.content.SharedPreferences}. Whenever backup is performed it
  * will back up all named shared preferences which have changed since the last
  * backup.
diff --git a/core/java/android/backup/package.html b/core/java/android/app/backup/package.html
similarity index 65%
rename from core/java/android/backup/package.html
rename to core/java/android/app/backup/package.html
index 13c0eb8..8d58e0c 100644
--- a/core/java/android/backup/package.html
+++ b/core/java/android/app/backup/package.html
@@ -2,12 +2,12 @@
 <BODY>
 <p>Package containing the backup and restore functionality available to
 applications. All backup management is controlled through
-{@link android.backup.BackupManager}.  Individual backup functionality is
-implemented through a subclass {@link android.app.BackupAgent} and a
+{@link android.app.backup.BackupManager}.  Individual backup functionality is
+implemented through a subclass {@link android.app.backup.BackupAgent} and a
 simple and easy-to-use implementation is provided in
-{@link android.backup.BackupHelperAgent}.</p>
+{@link android.app.backup.BackupHelperAgent}.</p>
 
-<p>STOPSHIP: add more documenation and remove Dev Guide link if not written!</p>
+<p>STOPSHIP: add more documentation and remove Dev Guide link if not written!</p>
 
 <p>The backup APIs let applications:</p>
 <ul>
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 8d136f1..2b0e7e7 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -1489,7 +1489,7 @@
 
     /**
      * Use with {@link #getSystemService} to retrieve an
-     * {@link android.backup.IBackupManager IBackupManager} for communicating
+     * {@link android.app.backup.IBackupManager IBackupManager} for communicating
      * with the backup mechanism.
      * @hide
      * 
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 5d5bd9c..8c8d3e5 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -2025,7 +2025,10 @@
             InputConnection ic = getCurrentInputConnection();
             mExtractedText = ic == null? null
                     : ic.getExtractedText(req, InputConnection.GET_EXTRACTED_TEXT_MONITOR);
-            
+            if (mExtractedText == null || ic == null) {
+                Log.e(TAG, "Unexpected null in startExtractingText : mExtractedText = "
+                        + mExtractedText + ", input connection = " + ic);
+            }
             final EditorInfo ei = getCurrentInputEditorInfo();
             
             try {
diff --git a/core/java/android/util/LongSparseArray.java b/core/java/android/util/LongSparseArray.java
index d90045f..1ec8be6 100644
--- a/core/java/android/util/LongSparseArray.java
+++ b/core/java/android/util/LongSparseArray.java
@@ -48,6 +48,28 @@
         mValues = new Object[initialCapacity];
         mSize = 0;
     }
+    
+    /**
+     * @return A copy of all keys contained in the sparse array.
+     */
+    public long[] getKeys() {
+        int length = mKeys.length;
+        long[] result = new long[length];
+        System.arraycopy(mKeys, 0, result, 0, length);
+        return result;
+    }
+    
+    /**
+     * Sets all supplied keys to the given unique value.
+     * @param keys Keys to set
+     * @param uniqueValue Value to set all supplied keys to
+     */
+    public void setValues(long[] keys, E uniqueValue) {
+        int length = keys.length;
+        for (int i = 0; i < length; i++) {
+            put(keys[i], uniqueValue);
+        }
+    }
 
     /**
      * Gets the Object mapped from the specified key, or <code>null</code>
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index e3eb6db..1a9c0df5 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -30,6 +30,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.AttributeSet;
+import android.util.LongSparseArray;
 import android.util.SparseBooleanArray;
 import android.view.FocusFinder;
 import android.view.KeyEvent;
@@ -131,6 +132,7 @@
     private int mChoiceMode = CHOICE_MODE_NONE;
 
     private SparseBooleanArray mCheckStates;
+    private LongSparseArray<Boolean> mCheckedIdStates;
 
     // used for temporary calculations.
     private final Rect mTempRect = new Rect();
@@ -453,6 +455,12 @@
                 checkSelectionChanged();
             }
 
+            if (mChoiceMode != CHOICE_MODE_NONE &&
+                    mAdapter.hasStableIds() &&
+                    mCheckedIdStates == null) {
+                mCheckedIdStates = new LongSparseArray<Boolean>();
+            }
+
         } else {
             mAreAllItemsSelectable = true;
             checkFocus();
@@ -463,6 +471,10 @@
         if (mCheckStates != null) {
             mCheckStates.clear();
         }
+        
+        if (mCheckedIdStates != null) {
+            mCheckedIdStates.clear();
+        }
 
         requestLayout();
     }
@@ -3310,8 +3322,13 @@
      */
     public void setChoiceMode(int choiceMode) {
         mChoiceMode = choiceMode;
-        if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates == null) {
-            mCheckStates = new SparseBooleanArray();
+        if (mChoiceMode != CHOICE_MODE_NONE) {
+            if (mCheckStates == null) {
+                mCheckStates = new SparseBooleanArray();
+            }
+            if (mCheckedIdStates == null && mAdapter != null && mAdapter.hasStableIds()) {
+                mCheckedIdStates = new LongSparseArray<Boolean>();
+            }
         }
     }
 
@@ -3323,14 +3340,25 @@
             handled = true;
 
             if (mChoiceMode == CHOICE_MODE_MULTIPLE) {
-                boolean oldValue = mCheckStates.get(position, false);
-                mCheckStates.put(position, !oldValue);
+                boolean newValue = !mCheckStates.get(position, false);
+                mCheckStates.put(position, newValue);
+                if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
+                    if (newValue) {
+                        mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+                    } else {
+                        mCheckedIdStates.delete(mAdapter.getItemId(position));
+                    }
+                }
             } else {
-                boolean oldValue = mCheckStates.get(position, false);
-                if (!oldValue) {
+                boolean newValue = !mCheckStates.get(position, false);
+                if (newValue) {
                     mCheckStates.clear();
                     mCheckStates.put(position, true);
-                }
+                    if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
+                        mCheckedIdStates.clear();
+                        mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+                    }
+                } 
             }
 
             mDataChanged = true;
@@ -3358,16 +3386,30 @@
 
         if (mChoiceMode == CHOICE_MODE_MULTIPLE) {
             mCheckStates.put(position, value);
+            if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
+                if (value) {
+                    mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+                } else {
+                    mCheckedIdStates.delete(mAdapter.getItemId(position));
+                }
+            }
         } else {
+            boolean updateIds = mCheckedIdStates != null && mAdapter.hasStableIds();
             // Clear all values if we're checking something, or unchecking the currently
             // selected item
             if (value || isItemChecked(position)) {
                 mCheckStates.clear();
+                if (updateIds) {
+                    mCheckedIdStates.clear();
+                }
             }
             // this may end up selecting the value we just cleared but this way
             // we ensure length of mCheckStates is 1, a fact getCheckedItemPosition relies on
             if (value) {
                 mCheckStates.put(position, true);
+                if (updateIds) {
+                    mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);
+                }
             }
         }
 
@@ -3433,38 +3475,39 @@
 
     /**
      * Returns the set of checked items ids. The result is only valid if the
-     * choice mode has not been set to {@link #CHOICE_MODE_SINGLE}.
+     * choice mode has not been set to {@link #CHOICE_MODE_NONE}.
+     * 
+     * @return A new array which contains the id of each checked item in the
+     *         list.
+     *         
+     * @deprecated Use {@link #getCheckedItemIds()} instead. 
+     */
+    public long[] getCheckItemIds() {
+        return getCheckedItemIds();
+    }
+    
+    /**
+     * Returns the set of checked items ids. The result is only valid if the
+     * choice mode has not been set to {@link #CHOICE_MODE_NONE} and the adapter
+     * has stable IDs. ({@link ListAdapter#hasStableIds()} == {@code true})
      * 
      * @return A new array which contains the id of each checked item in the
      *         list.
      */
-    public long[] getCheckItemIds() {
-        if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null && mAdapter != null) {
-            final SparseBooleanArray states = mCheckStates;
-            final int count = states.size();
-            final long[] ids = new long[count];
-            final ListAdapter adapter = mAdapter;
-
-            int checkedCount = 0;
-            for (int i = 0; i < count; i++) {
-                if (states.valueAt(i)) {
-                    ids[checkedCount++] = adapter.getItemId(states.keyAt(i));
-                }
-            }
-
-            // Trim array if needed. mCheckStates may contain false values
-            // resulting in checkedCount being smaller than count.
-            if (checkedCount == count) {
-                return ids;
-            } else {
-                final long[] result = new long[checkedCount];
-                System.arraycopy(ids, 0, result, 0, checkedCount);
-
-                return result;
-            }
+    public long[] getCheckedItemIds() {
+        if (mChoiceMode == CHOICE_MODE_NONE || mCheckedIdStates == null || mAdapter == null) {
+            return new long[0];
         }
-
-        return new long[0];
+        
+        final LongSparseArray<Boolean> idStates = mCheckedIdStates;
+        final int count = idStates.size();
+        final long[] ids = new long[count];
+        
+        for (int i = 0; i < count; i++) {
+            ids[i] = idStates.keyAt(i);
+        }
+        
+        return ids;
     }
 
     /**
@@ -3474,17 +3517,23 @@
         if (mCheckStates != null) {
             mCheckStates.clear();
         }
+        if (mCheckedIdStates != null) {
+            mCheckedIdStates.clear();
+        }
     }
 
     static class SavedState extends BaseSavedState {
         SparseBooleanArray checkState;
+        LongSparseArray<Boolean> checkIdState;
 
         /**
          * Constructor called from {@link ListView#onSaveInstanceState()}
          */
-        SavedState(Parcelable superState, SparseBooleanArray checkState) {
+        SavedState(Parcelable superState, SparseBooleanArray checkState,
+                LongSparseArray<Boolean> checkIdState) {
             super(superState);
             this.checkState = checkState;
+            this.checkIdState = checkIdState;
         }
 
         /**
@@ -3493,12 +3542,19 @@
         private SavedState(Parcel in) {
             super(in);
             checkState = in.readSparseBooleanArray();
+            long[] idState = in.createLongArray();
+
+            if (idState.length > 0) {
+                checkIdState = new LongSparseArray<Boolean>();
+                checkIdState.setValues(idState, Boolean.TRUE);
+            }
         }
 
         @Override
         public void writeToParcel(Parcel out, int flags) {
             super.writeToParcel(out, flags);
             out.writeSparseBooleanArray(checkState);
+            out.writeLongArray(checkIdState != null ? checkIdState.getKeys() : new long[0]);
         }
 
         @Override
@@ -3523,7 +3579,7 @@
     @Override
     public Parcelable onSaveInstanceState() {
         Parcelable superState = super.onSaveInstanceState();
-        return new SavedState(superState, mCheckStates);
+        return new SavedState(superState, mCheckStates, mCheckedIdStates);
     }
 
     @Override
@@ -3536,5 +3592,8 @@
            mCheckStates = ss.checkState;
         }
 
+        if (ss.checkIdState != null) {
+            mCheckedIdStates = ss.checkIdState;
+        }
     }
 }
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index fd18db4..582d9e4 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -473,10 +473,13 @@
 
     private int getSelectedPos(String str) {
         if (mDisplayedValues == null) {
-            return Integer.parseInt(str);
+            try {
+                return Integer.parseInt(str);
+            } catch (NumberFormatException e) {
+                /* Ignore as if it's not a number we don't care */
+            }
         } else {
             for (int i = 0; i < mDisplayedValues.length; i++) {
-
                 /* Don't force the user to type in jan when ja will do */
                 str = str.toLowerCase();
                 if (mDisplayedValues[i].toLowerCase().startsWith(str)) {
diff --git a/core/java/com/android/internal/backup/IBackupTransport.aidl b/core/java/com/android/internal/backup/IBackupTransport.aidl
index 9da1066..b535fc1 100644
--- a/core/java/com/android/internal/backup/IBackupTransport.aidl
+++ b/core/java/com/android/internal/backup/IBackupTransport.aidl
@@ -16,7 +16,7 @@
 
 package com.android.internal.backup;
 
-import android.backup.RestoreSet;
+import android.app.backup.RestoreSet;
 import android.content.pm.PackageInfo;
 import android.os.ParcelFileDescriptor;
 
diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index 23ec647..be83eb9 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -1,8 +1,8 @@
 package com.android.internal.backup;
 
-import android.backup.BackupDataInput;
-import android.backup.BackupDataOutput;
-import android.backup.RestoreSet;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.RestoreSet;
 import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
diff --git a/core/jni/android_backup_BackupDataInput.cpp b/core/jni/android_backup_BackupDataInput.cpp
index cf8a8e8..b03dd16 100644
--- a/core/jni/android_backup_BackupDataInput.cpp
+++ b/core/jni/android_backup_BackupDataInput.cpp
@@ -28,7 +28,7 @@
 // java.io.FileDescriptor
 static jfieldID s_descriptorField = 0;
 
-// android.backup.BackupDataInput$EntityHeader
+// android.app.backup.BackupDataInput$EntityHeader
 static jfieldID s_keyField = 0;
 static jfieldID s_dataSizeField = 0;
 
@@ -130,7 +130,7 @@
 static const JNINativeMethod g_methods[] = {
     { "ctor", "(Ljava/io/FileDescriptor;)I", (void*)ctor_native },
     { "dtor", "(I)V", (void*)dtor_native },
-    { "readNextHeader_native", "(ILandroid/backup/BackupDataInput$EntityHeader;)I",
+    { "readNextHeader_native", "(ILandroid/app/backup/BackupDataInput$EntityHeader;)I",
             (void*)readNextHeader_native },
     { "readEntityData_native", "(I[BII)I", (void*)readEntityData_native },
     { "skipEntityData_native", "(I)I", (void*)skipEntityData_native },
@@ -148,16 +148,16 @@
     LOG_FATAL_IF(s_descriptorField == NULL,
             "Unable to find descriptor field in java.io.FileDescriptor");
 
-    clazz = env->FindClass("android/backup/BackupDataInput$EntityHeader");
-    LOG_FATAL_IF(clazz == NULL, "Unable to find class android.backup.BackupDataInput.EntityHeader");
+    clazz = env->FindClass("android/app/backup/BackupDataInput$EntityHeader");
+    LOG_FATAL_IF(clazz == NULL, "Unable to find class android.app.backup.BackupDataInput.EntityHeader");
     s_keyField = env->GetFieldID(clazz, "key", "Ljava/lang/String;");
     LOG_FATAL_IF(s_keyField == NULL,
-            "Unable to find key field in android.backup.BackupDataInput.EntityHeader");
+            "Unable to find key field in android.app.backup.BackupDataInput.EntityHeader");
     s_dataSizeField = env->GetFieldID(clazz, "dataSize", "I");
     LOG_FATAL_IF(s_dataSizeField == NULL,
-            "Unable to find dataSize field in android.backup.BackupDataInput.EntityHeader");
+            "Unable to find dataSize field in android.app.backup.BackupDataInput.EntityHeader");
 
-    return AndroidRuntime::registerNativeMethods(env, "android/backup/BackupDataInput",
+    return AndroidRuntime::registerNativeMethods(env, "android/app/backup/BackupDataInput",
             g_methods, NELEM(g_methods));
 }
 
diff --git a/core/jni/android_backup_BackupDataOutput.cpp b/core/jni/android_backup_BackupDataOutput.cpp
index ce30aaa8..b895d11 100644
--- a/core/jni/android_backup_BackupDataOutput.cpp
+++ b/core/jni/android_backup_BackupDataOutput.cpp
@@ -121,7 +121,7 @@
     LOG_FATAL_IF(s_descriptorField == NULL,
             "Unable to find descriptor field in java.io.FileDescriptor");
 
-    return AndroidRuntime::registerNativeMethods(env, "android/backup/BackupDataOutput",
+    return AndroidRuntime::registerNativeMethods(env, "android/app/backup/BackupDataOutput",
             g_methods, NELEM(g_methods));
 }
 
diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp
index 2e3f0b9..26e7d66 100644
--- a/core/jni/android_backup_BackupHelperDispatcher.cpp
+++ b/core/jni/android_backup_BackupHelperDispatcher.cpp
@@ -219,16 +219,16 @@
 
 static const JNINativeMethod g_methods[] = {
     { "readHeader_native",
-       "(Landroid/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;)I",
+       "(Landroid/app/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;)I",
        (void*)readHeader_native },
     { "skipChunk_native",
         "(Ljava/io/FileDescriptor;I)I",
         (void*)skipChunk_native },
     { "allocateHeader_native",
-        "(Landroid/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;)I",
+        "(Landroid/app/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;)I",
         (void*)allocateHeader_native },
     { "writeHeader_native",
-       "(Landroid/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;I)I",
+       "(Landroid/app/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;I)I",
        (void*)writeHeader_native },
 };
 
@@ -242,17 +242,17 @@
     LOG_FATAL_IF(s_descriptorField == NULL,
             "Unable to find descriptor field in java.io.FileDescriptor");
     
-    clazz = env->FindClass("android/backup/BackupHelperDispatcher$Header");
+    clazz = env->FindClass("android/app/backup/BackupHelperDispatcher$Header");
     LOG_FATAL_IF(clazz == NULL,
-            "Unable to find class android.backup.BackupHelperDispatcher.Header");
+            "Unable to find class android.app.backup.BackupHelperDispatcher.Header");
     s_chunkSizeField = env->GetFieldID(clazz, "chunkSize", "I");
     LOG_FATAL_IF(s_chunkSizeField == NULL,
-            "Unable to find chunkSize field in android.backup.BackupHelperDispatcher.Header");
+            "Unable to find chunkSize field in android.app.backup.BackupHelperDispatcher.Header");
     s_keyPrefixField = env->GetFieldID(clazz, "keyPrefix", "Ljava/lang/String;");
     LOG_FATAL_IF(s_keyPrefixField == NULL,
-            "Unable to find keyPrefix field in android.backup.BackupHelperDispatcher.Header");
+            "Unable to find keyPrefix field in android.app.backup.BackupHelperDispatcher.Header");
     
-    return AndroidRuntime::registerNativeMethods(env, "android/backup/BackupHelperDispatcher",
+    return AndroidRuntime::registerNativeMethods(env, "android/app/backup/BackupHelperDispatcher",
             g_methods, NELEM(g_methods));
 }
 
diff --git a/core/jni/android_backup_FileBackupHelperBase.cpp b/core/jni/android_backup_FileBackupHelperBase.cpp
index 8225a36..0137a06 100644
--- a/core/jni/android_backup_FileBackupHelperBase.cpp
+++ b/core/jni/android_backup_FileBackupHelperBase.cpp
@@ -129,7 +129,7 @@
     LOG_FATAL_IF(s_descriptorField == NULL,
             "Unable to find descriptor field in java.io.FileDescriptor");
     
-    return AndroidRuntime::registerNativeMethods(env, "android/backup/FileBackupHelperBase",
+    return AndroidRuntime::registerNativeMethods(env, "android/app/backup/FileBackupHelperBase",
             g_methods, NELEM(g_methods));
 }
 
diff --git a/core/res/res/drawable-hdpi/btn_keyboard_key_normal.9.png b/core/res/res/drawable-hdpi/btn_keyboard_key_normal.9.png
index 5697369..42c7c146 100644
--- a/core/res/res/drawable-hdpi/btn_keyboard_key_normal.9.png
+++ b/core/res/res/drawable-hdpi/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png b/core/res/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
index 9940245..01e2506 100644
--- a/core/res/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
+++ b/core/res/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png b/core/res/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
index 5a26d83..83c6eb3 100644
--- a/core/res/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
+++ b/core/res/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_keyboard_key_pressed.9.png b/core/res/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
index 089dbf3..e047eaf 100644
--- a/core/res/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
+++ b/core/res/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png b/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
index c10a3db..218a2d2 100644
--- a/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
+++ b/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png b/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
index 9e83ace..afe4951 100644
--- a/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
+++ b/core/res/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
Binary files differ
diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index 2269352..8089389 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
@@ -3247,7 +3247,10 @@
                             if (mBytesRead < 0) {
                                 LOGE("Error reading audio input");
                                 if (mActiveTrack->mState == TrackBase::ACTIVE) {
-                                    sleep(1);
+                                    // Force input into standby so that it tries to
+                                    // recover at next read attempt
+                                    mInput->standby();
+                                    usleep(5000);
                                 }
                                 mRsmpInIndex = mFrameCount;
                                 framesOut = 0;
@@ -3429,7 +3432,10 @@
         if (mBytesRead < 0) {
             LOGE("RecordThread::getNextBuffer() Error reading audio input");
             if (mActiveTrack->mState == TrackBase::ACTIVE) {
-                sleep(1);
+                // Force input into standby so that it tries to
+                // recover at next read attempt
+                mInput->standby();
+                usleep(5000);
             }
             buffer->raw = 0;
             buffer->frameCount = 0;
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index bce3371..ad037d6 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -552,13 +552,17 @@
 
         audioBuffer.frameCount = userSize/frameSize();
 
-        // Calling obtainBuffer() with a negative wait count causes
-        // an (almost) infinite wait time.
-        status_t err = obtainBuffer(&audioBuffer, -1);
+        // By using a wait count corresponding to twice the timeout period in
+        // obtainBuffer() we give a chance to recover once for a read timeout
+        // (if media_server crashed for instance) before returning a length of
+        // 0 bytes read to the client
+        status_t err = obtainBuffer(&audioBuffer, ((2 * MAX_RUN_TIMEOUT_MS) / WAIT_PERIOD_MS));
         if (err < 0) {
             // out of buffers, return #bytes written
             if (err == status_t(NO_MORE_BUFFERS))
                 break;
+            if (err == status_t(TIMED_OUT))
+                err = 0;
             return ssize_t(err);
         }
 
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 2738efbd..d5c9855a 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -30,9 +30,9 @@
 import java.util.Arrays;
 import java.util.zip.CRC32;
 
-import android.backup.BackupDataInput;
-import android.backup.BackupDataOutput;
-import android.backup.BackupHelperAgent;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.BackupHelperAgent;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index d24814d..0e75fbc 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -20,8 +20,8 @@
 
 import android.app.ActivityManagerNative;
 import android.app.IActivityManager;
-import android.backup.BackupDataInput;
-import android.backup.IBackupManager;
+import android.app.backup.BackupDataInput;
+import android.app.backup.IBackupManager;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.IContentService;
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 4f1146b..7d648d3 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -21,7 +21,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
 
-import android.backup.BackupManager;
+import android.app.backup.BackupManager;
 import android.content.ContentProvider;
 import android.content.ContentUris;
 import android.content.ContentValues;
diff --git a/preloaded-classes b/preloaded-classes
index 28cbba3..5672c66 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -57,15 +57,15 @@
 android.appwidget.AppWidgetManager
 android.appwidget.AppWidgetProvider
 android.appwidget.AppWidgetProviderInfo
-android.backup.BackupDataInput
-android.backup.BackupDataInput$EntityHeader
-android.backup.BackupDataOutput
-android.backup.BackupHelperAgent
-android.backup.BackupHelperDispatcher
-android.backup.BackupHelperDispatcher$Header
-android.backup.FileBackupHelperBase
-android.backup.IBackupManager$Stub
-android.backup.RestoreSet
+android.app.backup.BackupDataInput
+android.app.backup.BackupDataInput$EntityHeader
+android.app.backup.BackupDataOutput
+android.app.backup.BackupHelperAgent
+android.app.backup.BackupHelperDispatcher
+android.app.backup.BackupHelperDispatcher$Header
+android.app.backup.FileBackupHelperBase
+android.app.backup.IBackupManager$Stub
+android.app.backup.RestoreSet
 android.bluetooth.BluetoothAdapter
 android.bluetooth.BluetoothAudioGateway
 android.bluetooth.BluetoothSocket
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 8b0c264..ffba4ad 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -23,10 +23,10 @@
 import android.app.IApplicationThread;
 import android.app.IBackupAgent;
 import android.app.PendingIntent;
-import android.backup.IBackupManager;
-import android.backup.IRestoreObserver;
-import android.backup.IRestoreSession;
-import android.backup.RestoreSet;
+import android.app.backup.RestoreSet;
+import android.app.backup.IBackupManager;
+import android.app.backup.IRestoreObserver;
+import android.app.backup.IRestoreSession;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -96,9 +96,9 @@
     // the first backup pass.
     private static final long FIRST_BACKUP_INTERVAL = 12 * AlarmManager.INTERVAL_HOUR;
 
-    private static final String RUN_BACKUP_ACTION = "android.backup.intent.RUN";
-    private static final String RUN_INITIALIZE_ACTION = "android.backup.intent.INIT";
-    private static final String RUN_CLEAR_ACTION = "android.backup.intent.CLEAR";
+    private static final String RUN_BACKUP_ACTION = "android.app.backup.intent.RUN";
+    private static final String RUN_INITIALIZE_ACTION = "android.app.backup.intent.INIT";
+    private static final String RUN_CLEAR_ACTION = "android.app.backup.intent.CLEAR";
     private static final int MSG_RUN_BACKUP = 1;
     private static final int MSG_RUN_FULL_BACKUP = 2;
     private static final int MSG_RUN_RESTORE = 3;
diff --git a/services/java/com/android/server/PackageManagerBackupAgent.java b/services/java/com/android/server/PackageManagerBackupAgent.java
index e45edfb..26b57bf 100644
--- a/services/java/com/android/server/PackageManagerBackupAgent.java
+++ b/services/java/com/android/server/PackageManagerBackupAgent.java
@@ -16,9 +16,9 @@
 
 package com.android.server;
 
-import android.app.BackupAgent;
-import android.backup.BackupDataInput;
-import android.backup.BackupDataOutput;
+import android.app.backup.BackupAgent;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 6ce2582..1ff0244 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -31,7 +31,7 @@
 import android.app.IActivityManager;
 import android.app.admin.DevicePolicyManager;
 import android.app.admin.IDevicePolicyManager;
-import android.backup.IBackupManager;
+import android.app.backup.IBackupManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
diff --git a/services/java/com/android/server/SystemBackupAgent.java b/services/java/com/android/server/SystemBackupAgent.java
index 186aebe..86b9df6 100644
--- a/services/java/com/android/server/SystemBackupAgent.java
+++ b/services/java/com/android/server/SystemBackupAgent.java
@@ -16,12 +16,12 @@
 
 package com.android.server;
 
-import android.backup.AbsoluteFileBackupHelper;
-import android.backup.BackupDataInput;
-import android.backup.BackupDataInputStream;
-import android.backup.BackupDataOutput;
-import android.backup.BackupHelper;
-import android.backup.BackupHelperAgent;
+import android.app.backup.AbsoluteFileBackupHelper;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataInputStream;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.BackupHelper;
+import android.app.backup.BackupHelperAgent;
 import android.content.Context;
 import android.os.ParcelFileDescriptor;
 import android.os.ServiceManager;
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index 7a03ebd..1b51741 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -23,7 +23,7 @@
 import android.app.IWallpaperManagerCallback;
 import android.app.PendingIntent;
 import android.app.WallpaperInfo;
-import android.backup.BackupManager;
+import android.app.backup.BackupManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index 7378333f..8fa862d 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -79,7 +79,7 @@
 import java.net.UnknownHostException;
 
 import com.android.internal.app.IBatteryStats;
-import android.backup.IBackupManager;
+import android.app.backup.IBackupManager;
 import com.android.server.am.BatteryStatsService;
 
 /**
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 9018872..b53100f 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -46,7 +46,7 @@
 import android.app.PendingIntent;
 import android.app.ResultInfo;
 import android.app.Service;
-import android.backup.IBackupManager;
+import android.app.backup.IBackupManager;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
diff --git a/telephony/java/com/android/internal/telephony/RetryManager.java b/telephony/java/com/android/internal/telephony/RetryManager.java
index 385b191..779f358 100644
--- a/telephony/java/com/android/internal/telephony/RetryManager.java
+++ b/telephony/java/com/android/internal/telephony/RetryManager.java
@@ -153,13 +153,17 @@
     }
 
     /**
-     * Configure for using string which allow arbitary
+     * Configure for using string which allow arbitrary
      * sequences of times. See class comments for the
      * string format.
      *
-     * @return true if successfull
+     * @return true if successful
      */
     public boolean configure(String configStr) {
+        // Strip quotes if present.
+        if ((configStr.startsWith("\"") && configStr.endsWith("\""))) {
+            configStr = configStr.substring(1, configStr.length()-1);
+        }
         if (DBG) log("configure: '" + configStr + "'");
 
         if (!TextUtils.isEmpty(configStr)) {
diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/TelephonyUtilsTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/TelephonyUtilsTest.java
index bf0c88b..3757017 100644
--- a/telephony/tests/telephonytests/src/com/android/internal/telephony/TelephonyUtilsTest.java
+++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/TelephonyUtilsTest.java
@@ -146,15 +146,15 @@
     }
 
     /**
-     * Test string configuration using all options.
+     * Test string configuration using all options and with quotes.
      */
     @SmallTest
     public void testRetryManageString() throws Exception {
         RetryManager rm = new RetryManager();
         int time;
 
-        assertTrue(rm.configure("max_retries=4,"
-                  + "default_randomization=100,1000, 2000 :200 , 3000"));
+        assertTrue(rm.configure(
+                "\"max_retries=4, default_randomization=100,1000, 2000 :200 , 3000\""));
         assertTrue(rm.isRetryNeeded());
         time = rm.getRetryTimer();
         assertTrue((time >= 1000) && (time < 1100));
diff --git a/tests/backup/src/com/android/backuptest/BackupTestActivity.java b/tests/backup/src/com/android/backuptest/BackupTestActivity.java
index afbc703..e11ecad 100644
--- a/tests/backup/src/com/android/backuptest/BackupTestActivity.java
+++ b/tests/backup/src/com/android/backuptest/BackupTestActivity.java
@@ -17,11 +17,11 @@
 package com.android.backuptest;
 
 import android.app.ListActivity;
-import android.backup.BackupHelperDispatcher;
-import android.backup.BackupDataInput;
-import android.backup.BackupDataOutput;
-import android.backup.BackupManager;
-import android.backup.FileBackupHelper;
+import android.app.backup.BackupHelperDispatcher;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.BackupManager;
+import android.app.backup.FileBackupHelper;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
diff --git a/tests/backup/src/com/android/backuptest/BackupTestAgent.java b/tests/backup/src/com/android/backuptest/BackupTestAgent.java
index 8e4fd39..3fdd96b 100644
--- a/tests/backup/src/com/android/backuptest/BackupTestAgent.java
+++ b/tests/backup/src/com/android/backuptest/BackupTestAgent.java
@@ -16,9 +16,9 @@
 
 package com.android.backuptest;
 
-import android.backup.BackupHelperAgent;
-import android.backup.FileBackupHelper;
-import android.backup.SharedPreferencesBackupHelper;
+import android.app.backup.BackupHelperAgent;
+import android.app.backup.FileBackupHelper;
+import android.app.backup.SharedPreferencesBackupHelper;
 
 public class BackupTestAgent extends BackupHelperAgent
 {