Merge "Document support for WebM/VP8 decoding." into honeycomb
diff --git a/Android.mk b/Android.mk
index d2c2a64..fcb66ae 100644
--- a/Android.mk
+++ b/Android.mk
@@ -415,6 +415,8 @@
resources/samples/NotePad "Note Pad" \
-samplecode $(sample_dir)/SampleSyncAdapter \
resources/samples/SampleSyncAdapter "Sample Sync Adapter" \
+ -samplecode frameworks/base/libs/rs/java \
+ resources/samples/Renderscript "Renderscript" \
-samplecode $(sample_dir)/SearchableDictionary \
resources/samples/SearchableDictionary "Searchable Dictionary v2" \
-samplecode $(sample_dir)/SipDemo \
@@ -428,13 +430,13 @@
-samplecode $(sample_dir)/SpinnerTest \
resources/samples/SpinnerTest "SpinnerTest" \
-samplecode $(sample_dir)/StackWidget \
- resources/samples/StackWidget "StackWidget" \
+ resources/samples/StackWidget "StackView Widget" \
-samplecode $(sample_dir)/TicTacToeLib \
resources/samples/TicTacToeLib "TicTacToeLib" \
-samplecode $(sample_dir)/TicTacToeMain \
resources/samples/TicTacToeMain "TicTacToeMain" \
-samplecode $(sample_dir)/WeatherListWidget \
- resources/samples/WeatherListWidget "Weather List Widget Sample" \
+ resources/samples/WeatherListWidget "Weather List Widget" \
-samplecode $(sample_dir)/Wiktionary \
resources/samples/Wiktionary "Wiktionary" \
-samplecode $(sample_dir)/WiktionarySimple \
diff --git a/api/11.xml b/api/11.xml
index 4a40c36..ed4a2e0 100644
--- a/api/11.xml
+++ b/api/11.xml
@@ -37266,17 +37266,6 @@
visibility="public"
>
</field>
-<field name="USES_POLICY_SETS_GLOBAL_PROXY"
- type="int"
- transient="false"
- volatile="false"
- value="5"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="USES_POLICY_WATCH_LOGIN"
type="int"
transient="false"
@@ -37592,17 +37581,6 @@
visibility="public"
>
</method>
-<method name="getGlobalProxyAdmin"
- return="android.content.ComponentName"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getMaximumFailedPasswordsForWipe"
return="int"
abstract="false"
@@ -37887,23 +37865,6 @@
<parameter name="flags" type="int">
</parameter>
</method>
-<method name="setGlobalProxy"
- return="android.content.ComponentName"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="admin" type="android.content.ComponentName">
-</parameter>
-<parameter name="proxySpec" type="java.net.Proxy">
-</parameter>
-<parameter name="exclusionList" type="java.util.List<java.lang.String>">
-</parameter>
-</method>
<method name="setMaximumFailedPasswordsForWipe"
return="void"
abstract="false"
diff --git a/api/current.xml b/api/current.xml
index 4a40c36..ed4a2e0 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -37266,17 +37266,6 @@
visibility="public"
>
</field>
-<field name="USES_POLICY_SETS_GLOBAL_PROXY"
- type="int"
- transient="false"
- volatile="false"
- value="5"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="USES_POLICY_WATCH_LOGIN"
type="int"
transient="false"
@@ -37592,17 +37581,6 @@
visibility="public"
>
</method>
-<method name="getGlobalProxyAdmin"
- return="android.content.ComponentName"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getMaximumFailedPasswordsForWipe"
return="int"
abstract="false"
@@ -37887,23 +37865,6 @@
<parameter name="flags" type="int">
</parameter>
</method>
-<method name="setGlobalProxy"
- return="android.content.ComponentName"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="admin" type="android.content.ComponentName">
-</parameter>
-<parameter name="proxySpec" type="java.net.Proxy">
-</parameter>
-<parameter name="exclusionList" type="java.util.List<java.lang.String>">
-</parameter>
-</method>
<method name="setMaximumFailedPasswordsForWipe"
return="void"
abstract="false"
diff --git a/core/java/android/app/admin/DeviceAdminInfo.java b/core/java/android/app/admin/DeviceAdminInfo.java
index ec4ec89..1c7eb98 100644
--- a/core/java/android/app/admin/DeviceAdminInfo.java
+++ b/core/java/android/app/admin/DeviceAdminInfo.java
@@ -109,6 +109,7 @@
*
* <p>To control this policy, the device admin must have a "set-global-proxy"
* tag in the "uses-policies" section of its meta-data.
+ * @hide
*/
public static final int USES_POLICY_SETS_GLOBAL_PROXY = 5;
@@ -363,7 +364,7 @@
* the given policy control. The possible policy identifier inputs are:
* {@link #USES_POLICY_LIMIT_PASSWORD}, {@link #USES_POLICY_WATCH_LOGIN},
* {@link #USES_POLICY_RESET_PASSWORD}, {@link #USES_POLICY_FORCE_LOCK},
- * {@link #USES_POLICY_WIPE_DATA}, {@link #USES_POLICY_SETS_GLOBAL_PROXY},
+ * {@link #USES_POLICY_WIPE_DATA},
* {@link #USES_POLICY_EXPIRE_PASSWORD}, {@link #USES_ENCRYPTED_STORAGE}.
*/
public boolean usesPolicy(int policyIdent) {
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 3f3aa74..d71a7a3 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1028,6 +1028,7 @@
* @param exclusionList a list of domains to be excluded from the global proxy.
* @return returns null if the proxy was successfully set, or a {@link ComponentName}
* of the device admin that sets thew proxy otherwise.
+ * @hide
*/
public ComponentName setGlobalProxy(ComponentName admin, Proxy proxySpec,
List<String> exclusionList ) {
@@ -1080,6 +1081,7 @@
* Returns the component name setting the global proxy.
* @return ComponentName object of the device admin that set the global proxy, or
* null if no admin has set the proxy.
+ * @hide
*/
public ComponentName getGlobalProxyAdmin() {
if (mService != null) {
diff --git a/core/java/android/app/package.html b/core/java/android/app/package.html
index 5137600..f37f1dc 100644
--- a/core/java/android/app/package.html
+++ b/core/java/android/app/package.html
@@ -32,8 +32,9 @@
action bar.</p>
<p>For information about using some the classes in this package, see the following
-documents: <a href="{@docRoot}guide/topics/fundamentals/index.html">Application
-Fundamentals</a> (for activities, services, and fragments), <a
+documents: <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>, <a
+href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>, <a
+href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a>, <a
href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a>, <a
href="{@docRoot}guide/topics/ui/dialogs.html">Creating Dialogs</a>, and <a
href="{@docRoot}guide/topics/ui/notifiers/index.html">Notifying the User</a>.</p>
diff --git a/core/java/android/content/pm/package.html b/core/java/android/content/pm/package.html
index b18adb2..d55f0f7 100644
--- a/core/java/android/content/pm/package.html
+++ b/core/java/android/content/pm/package.html
@@ -5,7 +5,7 @@
permissions, services, signatures, and providers.</p>
<p>Most of the information about an application package is defined by its manifest file. For
more information, see the <a
-href="{@docRoot}guide/topics/manifest/guide/topics/manifest/manifest-intro.html">AndroidManifest.xml
-File</a> documentation.</p>
+href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml File</a>
+documentation.</p>
</BODY>
</HTML>
\ No newline at end of file
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index 18d1825..029d690 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -43,8 +43,8 @@
* or 'P' to pick. For a dialog using this view, see
* {@link android.app.TimePickerDialog}.
*<p>
- * See the <a href="{@docRoot}
- * resources/tutorials/views/hello-timepicker.html">Time Picker tutorial</a>.
+ * See the <a href="{@docRoot}resources/tutorials/views/hello-timepicker.html">Time Picker
+ * tutorial</a>.
* </p>
*/
@Widget
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index a91829c..7ac7ad8 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -341,7 +341,7 @@
android:description="@string/permdesc_bluetooth"
android:label="@string/permlab_bluetooth" />
- <!-- Allows applications to directly communicate over NFC -->
+ <!-- Allows applications to perform I/O operations over NFC -->
<permission android:name="android.permission.NFC"
android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="dangerous"
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index eaadc03..f8c6885 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"تم فصل الشبكة الظاهرية الخاصة (VPN) لـ <xliff:g id="PROFILENAME">%s</xliff:g>"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"يمكنك اللمس لإعادة الاتصال بالشبكة الظاهرية الخاصة (VPN)."</string>
<string name="choose_account_label" msgid="4191313562041125787">"حدد حسابًا."</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"زيادة"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"تناقص"</string>
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index cc3c512..039ead2 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Връзката с VPN <xliff:g id="PROFILENAME">%s</xliff:g> бе прекъсната"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Докоснете за повторно свързване с VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Избор на профил"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличаване"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Намаляване"</string>
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index c2faeb4..f88f5de 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -843,17 +843,17 @@
<string name="volume_ringtone" msgid="6885421406845734650">"Volum del timbre"</string>
<string name="volume_music" msgid="5421651157138628171">"Volum de multimèdia"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"S\'està reproduint a través de Bluetooth"</string>
- <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"So de trucada silenciós seleccionat"</string>
+ <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"To de silenci seleccionat"</string>
<string name="volume_call" msgid="3941680041282788711">"Volum en trucada"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"Volum en trucada Bluetooth"</string>
<string name="volume_alarm" msgid="1985191616042689100">"Volum de l\'alarma"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volum de notificació"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volum"</string>
- <string name="ringtone_default" msgid="3789758980357696936">"So de trucada predeterminat"</string>
- <string name="ringtone_default_with_actual" msgid="8129563480895990372">"So de trucada predeterminat (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+ <string name="ringtone_default" msgid="3789758980357696936">"To predeterminat"</string>
+ <string name="ringtone_default_with_actual" msgid="8129563480895990372">"To predeterminat (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silenci"</string>
<string name="ringtone_picker_title" msgid="3515143939175119094">"Sons de trucada"</string>
- <string name="ringtone_unknown" msgid="5477919988701784788">"So de trucada desconegut"</string>
+ <string name="ringtone_unknown" msgid="5477919988701784788">"To desconegut"</string>
<plurals name="wifi_available">
<item quantity="one" msgid="6654123987418168693">"Xarxa Wi-fi disponible"</item>
<item quantity="other" msgid="4192424489168397386">"Xarxes Wi-fi disponibles"</item>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN <xliff:g id="PROFILENAME">%s</xliff:g> desconnectada"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Toca per tornar-te a connectar a una VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecciona un compte"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementa"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminueix"</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 8f5e5b8..a7c74bc 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Síť VPN <xliff:g id="PROFILENAME">%s</xliff:g> je odpojena"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Dotykem se znovu připojíte k síti VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vybrat účet"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšení"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Snížení"</string>
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index e558642..b29307d 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN afbrudt"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Tryk for at oprette forbindelse til et VPN igen."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vælg en konto"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Optælling"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Nedtælling"</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index b7cf25d..3961b9f 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> von VPN getrennt"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Zur Wiederherstellung der Verbindung mit einem VPN berühren"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Konto auswählen"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Erhöhen"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Verringern"</string>
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 17209a8..e1c2c39 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Το VPN <xliff:g id="PROFILENAME">%s</xliff:g> αποσυνδέθηκε"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Αγγίξτε για να επανασυνδεθείτε σε ένα VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Επιλογή λογαριασμού"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Αύξηση"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Μείωση"</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 6fd5cb1..0ee0e50 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN disconnected"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Touch to reconnect to a VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Select an account"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Increment"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrement"</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 10effd8..aac30d3 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN desconectada"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Tocar para volver a conectarse a una VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Decremento"</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 714b34f..51bbd3c 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN <xliff:g id="PROFILENAME">%s</xliff:g> desconectada"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Toca para volver a conectarte a una red VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminuir"</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index e5e28ba..fe06a32 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN قطع شد"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"برای اتصال مجدد به VPN لمس کنید."</string>
<string name="choose_account_label" msgid="4191313562041125787">"انتخاب یک حساب"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"افزایش"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"کاهش"</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 729a13d..dc594db 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g>: VPN-yhteys katkaistu"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Yhdistä VPN-verkkoon uudelleen koskettamalla."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Valitse tili"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Lisää"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Vähennä"</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 203609c..3e09691 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -602,7 +602,7 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Professionnelle"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Autre"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Saisissez le code PIN"</string>
- <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Appuyez saisir mot passe"</font></string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Saisie mot passe"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Saisissez le mot de passe pour procéder au déverrouillage."</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Saisissez le code PIN pour procéder au déverrouillage."</string>
<string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Le code PIN est incorrect !"</string>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN <xliff:g id="PROFILENAME">%s</xliff:g> déconnecté"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Appuyez ici pour vous reconnecter à un VPN"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Sélectionner un compte"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Augmenter"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuer"</string>
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 3d8263a..b9e2753 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN je isključen"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Dotaknite za ponovno povezivanje s VPN-om."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Odaberite račun"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Povećaj"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Smanji"</string>
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index d038b30..a4ee0cb 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1013,11 +1013,9 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Törlés visszavonása."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Most nem."</string>
<string name="vpn_notification_title_connected" msgid="3197819122581348515">"Kapcsolódva a(z) <xliff:g id="PROFILENAME">%s</xliff:g> virtuális magánhálózathoz"</string>
- <string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Kapcsolat bontva a(z) <xliff:g id="PROFILENAME">%s</xliff:g> virtuális magánhálózattal"</string>
+ <string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Bontotta a kapcsolatot a(z) <xliff:g id="PROFILENAME">%s</xliff:g> virtuális magánhálózattal"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Érintse meg az újracsatlakozáshoz."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Fiók kiválasztása"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Növelés"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Csökkentés"</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index f5c3e50..b6d0d43 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1014,10 +1014,8 @@
<string name="sync_do_nothing" msgid="8717589462945226869">"Jangan lakukan apa pun untuk saat ini."</string>
<string name="vpn_notification_title_connected" msgid="3197819122581348515">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN tersambung"</string>
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN terputus"</string>
- <string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Sentuh untuk terhubung kembali ke suatu VPN."</string>
+ <string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Sentuh untuk terhubung kembali ke VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akun"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Penambahan"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Pengurangan"</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index c4a557f..047f9b8 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -602,7 +602,7 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Lavoro"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Altro"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Inserisci il PIN"</string>
- <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Tocca per inserire pw"</font></string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Tocca e inserisci password"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Inserisci password per sbloccare"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Inserisci PIN per sbloccare"</string>
<string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Codice PIN errato."</string>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN <xliff:g id="PROFILENAME">%s</xliff:g> scollegata"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Tocca per riconnetterti a una rete VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleziona un account"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Aumenta"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuisci"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 48e6388..f268fbf 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN של <xliff:g id="PROFILENAME">%s</xliff:g> נותק"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"גע כדי להתחבר שוב ל-VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"בחר חשבון"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"הוספה"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"הפחתה"</string>
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 1092cc5..ce6d13d 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1012,12 +1012,10 @@
<string name="sync_really_delete" msgid="8933566316059338692">"アイテムを削除する"</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"削除を元に戻す"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"今は何もしない"</string>
- <string name="vpn_notification_title_connected" msgid="3197819122581348515">"<xliff:g id="PROFILENAME">%s</xliff:g> VPNが接続されました"</string>
+ <string name="vpn_notification_title_connected" msgid="3197819122581348515">"<xliff:g id="PROFILENAME">%s</xliff:g> VPNに接続しました"</string>
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPNが切断されました"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"タップしてVPNに再接続してください。"</string>
<string name="choose_account_label" msgid="4191313562041125787">"アカウントを選択"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"増やす"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"減らす"</string>
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index fa174b7..704f453 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -184,7 +184,7 @@
<string name="permdesc_statusBarService" msgid="4097605867643520920">"애플리케이션이 상태 표시줄이 되도록 허용합니다."</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"상태 표시줄 확장/축소"</string>
<string name="permdesc_expandStatusBar" msgid="7088604400110768665">"애플리케이션이 상태 표시줄을 확장하거나 축소할 수 있도록 합니다."</string>
- <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"발신전화 가로채기"</string>
+ <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"발신전화 차단"</string>
<string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"애플리케이션이 발신전화를 처리하고 전화를 걸 번호를 변경할 수 있도록 합니다. 이 경우 악성 애플리케이션이 발신전화를 모니터링하거나, 다른 방향으로 돌리거나, 중단시킬 수 있습니다."</string>
<string name="permlab_receiveSms" msgid="2697628268086208535">"SMS 수신"</string>
<string name="permdesc_receiveSms" msgid="6298292335965966117">"애플리케이션이 SMS 메시지를 받고 처리할 수 있도록 합니다. 이 경우 악성 애플리케이션이 메시지를 모니터링하거나 사용자가 보기 전에 삭제할 수 있습니다."</string>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN 연결 끊김"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"VPN에 다시 연결하려면 터치하세요."</string>
<string name="choose_account_label" msgid="4191313562041125787">"계정 선택"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"올리기"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"줄이기"</string>
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 89218ce..f3de6dd 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPT atjungtas"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Jei norite iš naujo prisijungti prie VPT, palieskite."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pasirinkti paskyrą"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Padidinti"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Sumažinti"</string>
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 1b96036..9756e91 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> Savienojums ar VPN ir pārtraukts"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Pieskarieties, lai atkārtoti izveidotu savienojumu ar VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Atlasīt kontu"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Palielināt"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Samazināt"</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index ec115c1..743c8df 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> er frakoblet VPN"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Trykk for å koble til et VPN på nytt."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Velg en konto"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Øke"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Senke"</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 30683f8..a149a53 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN-verbinding met <xliff:g id="PROFILENAME">%s</xliff:g> verbroken"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Raak aan om opnieuw verbinding te maken met een VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecteer een account"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Hoger"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Lager"</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 719c305..3035e96 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -50,7 +50,7 @@
<string name="needPuk2" msgid="4526033371987193070">"Wprowadź kod PUK2, aby odblokować kartę SIM."</string>
<string name="ClipMmi" msgid="6952821216480289285">"Identyfikator rozmówcy przy połączeniach przychodzących"</string>
<string name="ClirMmi" msgid="7784673673446833091">"Identyfikator rozmówcy przy połączeniach wychodzących"</string>
- <string name="CfMmi" msgid="5123218989141573515">"Przekierowania połączeń"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"Przekazywanie połączeń"</string>
<string name="CwMmi" msgid="9129678056795016867">"Połączenia oczekujące"</string>
<string name="BaMmi" msgid="455193067926770581">"Blokada dzwonienia"</string>
<string name="PwdMmi" msgid="7043715687905254199">"Zmiana hasła"</string>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Rozłączono z siecią VPN <xliff:g id="PROFILENAME">%s</xliff:g>"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Dotknij, aby ponownie połączyć się z siecią VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Wybierz konto"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Zwiększ"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmniejsz"</string>
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 7557cef..f6ab376 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN <xliff:g id="PROFILENAME">%s</xliff:g> desligada"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Toque para voltar a ligar a uma VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar conta"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuir"</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 3aed233..6542cd3 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN de <xliff:g id="PROFILENAME">%s</xliff:g> desconectada"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Toque para reconectar-se a uma VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecione uma conta"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Redução"</string>
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 905b82a..5326a4c 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN <xliff:g id="PROFILENAME">%s</xliff:g> deconectat"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Atingeţi pentru a vă reconecta la o reţea VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selectaţi un cont"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementaţi"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrementaţi"</string>
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 765a26f..436d09b 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -612,7 +612,7 @@
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Экран заблокирован."</string>
<string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Нажмите \"Меню\", чтобы разблокировать экран или вызвать службу экстренной помощи."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Для разблокировки нажмите \"Меню\"."</string>
- <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Для разблокировки введите графический ключ"</string>
+ <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Введите графический ключ"</string>
<string name="lockscreen_emergency_call" msgid="5347633784401285225">"Экстренный вызов"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Вернуться к вызову"</string>
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Правильно!"</string>
@@ -959,7 +959,7 @@
<string name="sync_binding_label" msgid="3687969138375092423">"Синхр."</string>
<string name="accessibility_binding_label" msgid="4148120742096474641">"Спец. возможности"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Фоновый рисунок"</string>
- <string name="chooser_wallpaper" msgid="7873476199295190279">"Изменить фоновый рисунок"</string>
+ <string name="chooser_wallpaper" msgid="7873476199295190279">"Сменить обои"</string>
<string name="pptp_vpn_description" msgid="2688045385181439401">"Протокол PPTP"</string>
<string name="l2tp_vpn_description" msgid="3750692169378923304">"Протокол L2TP"</string>
<string name="l2tp_ipsec_psk_vpn_description" msgid="3945043564008303239">"L2TP/IPSec VPN с использованием общего ключа"</string>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Сеть VPN (<xliff:g id="PROFILENAME">%s</xliff:g>) отключена"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Нажмите для повторного подключения к VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Выберите аккаунт"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличить"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Уменьшить"</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index f3959e5..0895aa1 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Sieť VPN <xliff:g id="PROFILENAME">%s</xliff:g> odpojená"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Dotykom sa znova pripojíte k sieti VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vybrať účet"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšenie"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Zníženie"</string>
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 619b948..486e266 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Povezava z navideznim zasebnim omrežjem <xliff:g id="PROFILENAME">%s</xliff:g> prekinjena"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Dotaknite se, če želite znova vzpostaviti povezavo z navideznim zasebnim omrežjem."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Izberite račun"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Povečaj"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmanjšaj"</string>
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index fccb456..aebd8e2 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -602,7 +602,7 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Посао"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Други"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Унесите PIN кôд"</string>
- <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Додир. за унос лозинке"</font></string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Додирните за унос лозинке"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Унесите лозинку за откључавање"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Унесите PIN да бисте откључали тастатуру"</string>
<string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"PIN кôд је нетачан!"</string>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN веза је прекинута"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Додирните да бисте се поново повезали са VPN-ом."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Избор налога"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Повећање"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Смањење"</string>
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 6272a30..296c2a3 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -200,11 +200,11 @@
<string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Tillåter att program skriver till SMS-meddelanden som lagrats på din telefon eller SIM-kort. Skadliga program kan radera dina meddelanden."</string>
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"ta emot WAP"</string>
<string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Tillåter att program tar emot och bearbetar WAP-meddelanden. Skadliga program kan övervaka dina meddelanden eller ta bort dem utan att visa dem för dig."</string>
- <string name="permlab_getTasks" msgid="5005277531132573353">"hämta program som körs"</string>
+ <string name="permlab_getTasks" msgid="5005277531132573353">"hämta appar som körs"</string>
<string name="permdesc_getTasks" msgid="7048711358713443341">"Tillåter att program hämtar information om uppgifter som körs och har körts. Skadliga program kan upptäcka privat information om andra program."</string>
<string name="permlab_reorderTasks" msgid="5669588525059921549">"byt ordning på program som körs"</string>
<string name="permdesc_reorderTasks" msgid="126252774270522835">"Tillåter att ett program flyttar uppgifter till förgrunden eller bakgrunden. Skadliga program kan tvinga sig till förgrunden utan att du kan styra det."</string>
- <string name="permlab_setDebugApp" msgid="4339730312925176742">"aktivera felsökning av program"</string>
+ <string name="permlab_setDebugApp" msgid="4339730312925176742">"aktivera felsökning av appar"</string>
<string name="permdesc_setDebugApp" msgid="5584310661711990702">"Tillåter att ett program aktiverar felsökning för ett annat program. Skadliga program kan använda detta för att avsluta andra program."</string>
<string name="permlab_changeConfiguration" msgid="8214475779521218295">"ändra dina gränssnittsinställningar"</string>
<string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Tillåter att ett program ändrar den aktuella konfigurationen, till exempel språk eller övergripande teckenformat."</string>
@@ -261,11 +261,11 @@
<string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"Tillåter att innehavaren skickar avsikter till en enhetsadministratör. Vanliga program behöver aldrig göra detta."</string>
<string name="permlab_setOrientation" msgid="3365947717163866844">"ändra bildskärmens rikting"</string>
<string name="permdesc_setOrientation" msgid="6335814461615851863">"Tillåter att ett program när som helst ändrar skärmens rotering. Behövs inte för vanliga program."</string>
- <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"skicka Linux-signaler till program"</string>
+ <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"skicka Linux-signaler till appar"</string>
<string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Tillåter att programmet begär att den angivna signalen skickas till alla beständiga processer."</string>
<string name="permlab_persistentActivity" msgid="8659652042401085862">"se till att programmet alltid körs"</string>
<string name="permdesc_persistentActivity" msgid="5037199778265006008">"Tillåter att ett program gör vissa delar beständiga så att systemet inte kan använda det för andra program."</string>
- <string name="permlab_deletePackages" msgid="3343439331576348805">"ta bort program"</string>
+ <string name="permlab_deletePackages" msgid="3343439331576348805">"ta bort appar"</string>
<string name="permdesc_deletePackages" msgid="3634943677518723314">"Tillåter att ett program tar bort Android-paket. Skadliga program kan använda detta för att ta bort viktiga program."</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"ta bort de andra programmens uppgifter"</string>
<string name="permdesc_clearAppUserData" msgid="7546345080434325456">"Tillåter att ett program tar bort användardata."</string>
@@ -275,7 +275,7 @@
<string name="permdesc_getPackageSize" msgid="5557253039670753437">"Tillåter att ett program hämtar kod, data och cachestorlekar"</string>
<string name="permlab_installPackages" msgid="335800214119051089">"installera program direkt"</string>
<string name="permdesc_installPackages" msgid="526669220850066132">"Tillåter att ett program installerar nya eller uppdaterade Android-paket. Skadliga program kan använda detta för att lägga till nya program med godtyckliga och starka behörigheter."</string>
- <string name="permlab_clearAppCache" msgid="4747698311163766540">"ta bort cacheinformation för alla program"</string>
+ <string name="permlab_clearAppCache" msgid="4747698311163766540">"ta bort cacheinformation för alla appar"</string>
<string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Tillåter att ett program frigör lagringsutrymme på pekdatorn genom att ta bort filer i programmets katalog för cachelagring. Mycket begränsad åtkomst, vanligtvis till systemprocesser."</string>
<string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Tillåter att ett program frigör lagringsutrymme i telefonen genom att ta bort filer i programmets katalog för cachelagring. Åtkomst är mycket begränsad, vanligtvis till systemprocesser."</string>
<string name="permlab_movePackage" msgid="728454979946503926">"Flytta programresurser"</string>
@@ -602,8 +602,7 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Arbete"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Övrigt"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Ange PIN-kod"</string>
- <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
- <skip />
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Tryck om du vill ange lösenord"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Ange lösenord för att låsa upp"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Ange PIN-kod för att låsa upp"</string>
<string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Fel PIN-kod!"</string>
@@ -864,7 +863,7 @@
<item quantity="other" msgid="7915895323644292768">"Öppna Wi-Fi-nätverk är tillgängliga"</item>
</plurals>
<string name="select_character" msgid="3365550120617701745">"Infoga tecken"</string>
- <string name="sms_control_default_app_name" msgid="7630529934366549163">"Okänt program"</string>
+ <string name="sms_control_default_app_name" msgid="7630529934366549163">"Okänd app"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Skickar SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Flera SMS-meddelanden skickas. Tryck på OK om du vill fortsätta eller på Avbryt om du vill avsluta sändningen."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
@@ -1013,15 +1012,10 @@
<string name="sync_really_delete" msgid="8933566316059338692">"Ta bort objekten."</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"Ångra borttagningarna."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Gör ingenting just nu."</string>
- <!-- no translation found for vpn_notification_title_connected (3197819122581348515) -->
- <skip />
- <!-- no translation found for vpn_notification_title_disconnected (4614192702448522822) -->
- <skip />
- <!-- no translation found for vpn_notification_hint_disconnected (4689796928510104200) -->
- <skip />
+ <string name="vpn_notification_title_connected" msgid="3197819122581348515">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN anslutet"</string>
+ <string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN frånkopplat"</string>
+ <string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Tryck här om du vill återansluta till ett VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Välj ett konto"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Öka"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Minska"</string>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 5b85d88..ce9e131 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> ตัดการเชื่อมต่อ VPN แล้ว"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"แตะเพื่อเชื่อมต่อกับ VPN อีกครั้ง"</string>
<string name="choose_account_label" msgid="4191313562041125787">"เลือกบัญชี"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"การเพิ่ม"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"การลด"</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 7704003..c26d789 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -602,7 +602,7 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Trabaho"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Iba pa"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Ipasok ang PIN code"</string>
- <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Pindot pasok password"</font></string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"I-touch pra mg-passwrd"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Ipasok ang password upang i-unlock"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Ipasok ang PIN upang i-unlock"</string>
<string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Maling PIN code!"</string>
@@ -1012,12 +1012,10 @@
<string name="sync_really_delete" msgid="8933566316059338692">"Tanggalin ang mga item."</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"I-undo ang mga pagtanggal."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Walang gawin sa ngayon."</string>
- <string name="vpn_notification_title_connected" msgid="3197819122581348515">"Hindi nakakonekta ang <xliff:g id="PROFILENAME">%s</xliff:g> VPN"</string>
+ <string name="vpn_notification_title_connected" msgid="3197819122581348515">"Nakakonekta ang <xliff:g id="PROFILENAME">%s</xliff:g> sa VPN"</string>
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Hindi nakakonekta ang <xliff:g id="PROFILENAME">%s</xliff:g> VPN"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Pindutin upang muling kumonekta sa VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pumili ng account"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Taasan"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Babaan"</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 0cce5e6..08e4e71 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN bağlantısı kesildi"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"VPN\'ye tekrar bağlanmak için dokunun."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Bir hesap seçin"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Artır"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Azalt"</string>
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 607f608..2a3624f 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN <xliff:g id="PROFILENAME">%s</xliff:g> роз\'єднано"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Торкніться для повторного з\'єднання з VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Вибрати обліковий запис"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Додати"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Відняти"</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 7a2e5ec8..3306125 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"Đã ngắt kết nối VPN <xliff:g id="PROFILENAME">%s</xliff:g>"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"Chạm để kết nối lại với VPN."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Chọn tài khoản"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Tăng dần"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Giảm dần"</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 263e6f3..40ae40f 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"VPN“<xliff:g id="PROFILENAME">%s</xliff:g>”已断开连接"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"触摸可重新连接到 VPN。"</string>
<string name="choose_account_label" msgid="4191313562041125787">"选择帐户"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"减少"</string>
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 13f0e79..784d86f 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -223,7 +223,7 @@
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"防止切換應用程式"</string>
<string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"防止使用者切換到其他應用程式。"</string>
<string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"監視控制所有應用程式啟動狀態。"</string>
- <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"允許應用程式監視和控制系統啟動活動的方式。惡意應用程式可藉此破壞整個系統。這個權限只有開發人員才需要,一般使用上不需使用這個權限。"</string>
+ <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"允許應用程式監視和控制系統啟動活動的方式。惡意程式可能因此癱瘓整個系統。這個權限只有開發人員才需要,一般使用上不需使用這個權限。"</string>
<string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"傳送程式已移除廣播"</string>
<string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"允許應用程式在其他應用程式被移除時發送通知。請注意:惡意程式可能利用此功能,關閉其他執行中的程式。"</string>
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"傳送已接收 SMS 廣播"</string>
@@ -235,9 +235,9 @@
<string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"關閉所有背景程式"</string>
<string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"允許應用程式控制哪些活動在被移到背景執行時,儘速結束。一般應用程式不需要此功能。"</string>
<string name="permlab_batteryStats" msgid="7863923071360031652">"編輯電池狀態"</string>
- <string name="permdesc_batteryStats" msgid="5847319823772230560">"允許修改電池狀態。一般應用程式不會使用此功能。"</string>
+ <string name="permdesc_batteryStats" msgid="5847319823772230560">"允修改收集到的電池用量統計資料。一般應用程式不應使用這項功能。"</string>
<string name="permlab_backup" msgid="470013022865453920">"控制系統備份與還原"</string>
- <string name="permdesc_backup" msgid="4837493065154256525">"允許應用程式控制系統備份與還原機制 (不建議一般應用程式使用)。"</string>
+ <string name="permdesc_backup" msgid="4837493065154256525">"允許應用程式控制系統的備份與還原機制。一般應用程式不應使用這項功能。"</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"顯示未授權視窗"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"允許內部系統使用介面建立視窗。一般應用程式不會使用此功能。"</string>
<string name="permlab_systemAlertWindow" msgid="3372321942941168324">"顯示系統警示"</string>
@@ -260,11 +260,11 @@
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"與裝置管理員互動"</string>
<string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"允許應用程式將調用請求 (intent) 傳送至裝置管理員;一般應用程式不需使用此選項。"</string>
<string name="permlab_setOrientation" msgid="3365947717163866844">"變更螢幕顯示方向"</string>
- <string name="permdesc_setOrientation" msgid="6335814461615851863">"允許應用程式隨時變更螢幕顯示方向。一般應用程式不需要此功能。"</string>
+ <string name="permdesc_setOrientation" msgid="6335814461615851863">"允許應用程式可隨時變更螢幕旋轉方向。一般應用不應使用這項功能。"</string>
<string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"傳送 Linux 訊號到應用程式"</string>
<string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"允許應用程式要求將支援的訊號傳送到所有持續的程序。"</string>
<string name="permlab_persistentActivity" msgid="8659652042401085862">"設定應用程式持續執行"</string>
- <string name="permdesc_persistentActivity" msgid="5037199778265006008">"允許應用程式持續執行,避免系統將它應用到其他程式。"</string>
+ <string name="permdesc_persistentActivity" msgid="5037199778265006008">"允許應用程式部分持續執行,避免系統將它用於其他應用程式。"</string>
<string name="permlab_deletePackages" msgid="3343439331576348805">"刪除應用程式"</string>
<string name="permdesc_deletePackages" msgid="3634943677518723314">"允許應用程式刪除 Android 程式。請注意:惡意程式可能利用此功能刪除重要應用程式。"</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"刪除其他應用程式資料"</string>
@@ -332,7 +332,7 @@
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"變更音訊設定"</string>
<string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"允許應用程式編輯全域音訊設定,例如音量與路由。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"錄製音訊"</string>
- <string name="permdesc_recordAudio" msgid="6493228261176552356">"允許應用程式存取音訊錄製路徑。"</string>
+ <string name="permdesc_recordAudio" msgid="6493228261176552356">"允許應用程式存取錄音檔路徑。"</string>
<string name="permlab_camera" msgid="3616391919559751192">"拍照和拍攝影片"</string>
<string name="permdesc_camera" msgid="6004878235852154239">"允許應用程式使用相機拍照和錄影,此功能可讓應用程式隨時透過相機收集圖片。"</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"永久停用平板電腦"</string>
@@ -347,16 +347,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"允許應用程式掛載/卸載抽取式儲存設備的檔案系統。"</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"將外接式儲存裝置格式化"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"允許應用程式將可移除式儲存裝置格式化。"</string>
- <string name="permlab_asec_access" msgid="3411338632002193846">"取得內存空間的資訊"</string>
- <string name="permdesc_asec_access" msgid="8820326551687285439">"允許應用程式取得內存空間的資訊。"</string>
- <string name="permlab_asec_create" msgid="6414757234789336327">"建立內存空間"</string>
- <string name="permdesc_asec_create" msgid="2621346764995731250">"允許應用程式建立內存空間。"</string>
- <string name="permlab_asec_destroy" msgid="526928328301618022">"銷毀內存空間"</string>
- <string name="permdesc_asec_destroy" msgid="2746706889208066256">"允許應用程式銷毀內存空間。"</string>
- <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"掛接/卸載內存空間"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"允許應用程式掛接/卸載內存空間。"</string>
- <string name="permlab_asec_rename" msgid="7496633954080472417">"重新命名內存空間"</string>
- <string name="permdesc_asec_rename" msgid="2152829985238876790">"允許應用程式重新命名內存空間。"</string>
+ <string name="permlab_asec_access" msgid="3411338632002193846">"取得內部儲存空間的資訊"</string>
+ <string name="permdesc_asec_access" msgid="8820326551687285439">"允許應用程式取得內部儲存空間的資訊。"</string>
+ <string name="permlab_asec_create" msgid="6414757234789336327">"建立內部儲存空間"</string>
+ <string name="permdesc_asec_create" msgid="2621346764995731250">"允許應用程式建立內部儲存空間。"</string>
+ <string name="permlab_asec_destroy" msgid="526928328301618022">"銷毀內部儲存空間"</string>
+ <string name="permdesc_asec_destroy" msgid="2746706889208066256">"允許應用程式銷毀內部儲存空間。"</string>
+ <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"掛接/卸載內部儲存空間"</string>
+ <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"允許應用程式掛接/卸載內部儲存空間。"</string>
+ <string name="permlab_asec_rename" msgid="7496633954080472417">"重新命名內部儲存空間"</string>
+ <string name="permdesc_asec_rename" msgid="2152829985238876790">"允許應用程式重新命名內部儲存空間。"</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"控制震動"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"允許應用程式控制震動。"</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"控制閃光燈"</string>
@@ -370,14 +370,14 @@
<string name="permlab_callPhone" msgid="3925836347681847954">"直接撥打電話號碼"</string>
<string name="permdesc_callPhone" msgid="3369867353692722456">"允許應用程式自行撥打電話。請注意:惡意程式可能任意撥打電話,造成預期外的支出。但此選項並不允許應用程式撥打緊急電話號碼。"</string>
<string name="permlab_callPrivileged" msgid="4198349211108497879">"直接撥打任何電話號碼"</string>
- <string name="permdesc_callPrivileged" msgid="244405067160028452">"允許應用程式自行撥打任何電話號碼,包括緊急電話號碼。請注意:惡意程式可能利用此功能濫用緊急服務,撥打不必要或違法的電話。"</string>
+ <string name="permdesc_callPrivileged" msgid="244405067160028452">"允許應用程式自行撥打任何電話號碼,包括緊急電話號碼。請注意:惡意應用程式可能會利用此權限,向緊急服務撥打騷擾甚至非法電話。"</string>
<string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"直接啟動 CDMA 平板電腦設定程序"</string>
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"直接起始 CDMA 手機設定程序"</string>
<string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"允許應用程式啟動 CDMA 服務 (惡意應用程式可能會在非必要的情況下啟動 CDMA 服務)。"</string>
<string name="permlab_locationUpdates" msgid="7785408253364335740">"控制位置更新通知"</string>
- <string name="permdesc_locationUpdates" msgid="2300018303720930256">"允許啟用/停用無線通訊位置更新通知。一般應用程式不會使用此功能。"</string>
+ <string name="permdesc_locationUpdates" msgid="2300018303720930256">"允許從廣播中啟用/停用位置資訊更新通知。一般應用程式不應使用這項功能。"</string>
<string name="permlab_checkinProperties" msgid="7855259461268734914">"存取登機選項"</string>
- <string name="permdesc_checkinProperties" msgid="7150307006141883832">"允許讀寫登機服務上傳的資料。一般應用程式不會使用此功能。"</string>
+ <string name="permdesc_checkinProperties" msgid="7150307006141883832">"允許讀取/寫入由登錄服務所更新的屬性存取權。一般應用程式不應使用這項功能。"</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"選擇小工具"</string>
<string name="permdesc_bindGadget" msgid="2098697834497452046">"允許應用程式告知系統哪個應用程式可以使用哪些小工具。開啟此權限後,應用程式會讓其他程式使用個人資料,但一般應用程式不適合使用此功能。"</string>
<string name="permlab_modifyPhoneState" msgid="8423923777659292228">"修改手機狀態"</string>
@@ -1016,8 +1016,6 @@
<string name="vpn_notification_title_disconnected" msgid="4614192702448522822">"<xliff:g id="PROFILENAME">%s</xliff:g> VPN 已中斷連線"</string>
<string name="vpn_notification_hint_disconnected" msgid="4689796928510104200">"輕觸即可重新連線至 VPN。"</string>
<string name="choose_account_label" msgid="4191313562041125787">"選取帳戶"</string>
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
- <skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
- <skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"減少"</string>
</resources>
diff --git a/docs/html/guide/appendix/api-levels.jd b/docs/html/guide/appendix/api-levels.jd
index cbe3bf4..013cc94 100644
--- a/docs/html/guide/appendix/api-levels.jd
+++ b/docs/html/guide/appendix/api-levels.jd
@@ -83,6 +83,7 @@
<table>
<tr><th>Platform Version</th><th>API Level</th></tr>
+ <tr><td>Android 3.0</td><td>11</td></tr>
<tr><td>Android 2.3.3</td><td>10</td></tr>
<tr><td>Android 2.3</td><td>9</td></tr>
<tr><td>Android 2.2</td><td>8</td></tr>
diff --git a/docs/html/guide/appendix/market-filters.jd b/docs/html/guide/appendix/market-filters.jd
index 6ca8acc..f826f43 100644
--- a/docs/html/guide/appendix/market-filters.jd
+++ b/docs/html/guide/appendix/market-filters.jd
@@ -5,23 +5,25 @@
<div id="qv">
<h2>Quickview</h2>
-<ul> <li>Android Market applies filters to that let you control whether your app is shown to a
-user who is browing or searching for apps.</li>
-<li>Filtering is determined by elements in an app's manifest file,
-aspects of the device being used, and other factors.</li> </ul>
+<ul>
+<li>Android Market applies filters that control which Android-powered devices can access your
+application on Market.</li>
+<li>Filtering is determined by comparing device configurations that you declare in you app's
+manifest file to the configurations defined by the device, as well as other factors.</li> </ul>
<h2>In this document</h2>
<ol> <li><a href="#how-filters-work">How Filters Work in Android Market</a></li>
<li><a href="#manifest-filters">Filtering based on Manifest File Elements</a></li>
<li><a href="#other-filters">Other Filters</a></li>
+<li><a href="#advanced-filters">Advanced Manifest Filters</a></li>
</ol>
<h2>See also</h2>
<ol>
<li><a
-href="{@docRoot}guide/practices/compatibility.html">Compatibility</a></li>
-<li style="margin-top:2px;"><code><a
+href="{@docRoot}guide/practices/compatibility.html">Android Compatibility</a></li>
+<li><code><a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a></code></li>
<li><code><a
href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration></a></code></li>
@@ -42,36 +44,40 @@
href="http://market.android.com/publish">Go to Android Market »</a> </div>
</div>
-</div> </div>
+</div>
+</div>
-<p>When a user searches or browses in Android Market, the results are filtered, and
-some applications might not be visible. For example, if an application requires a
+
+<p>When a user searches or browses in Android Market, the results are filtered based on which
+applications are compatible with the user's device. For example, if an application requires a
trackball (as specified in the manifest file), then Android Market will not show
-the app on any device that does not have a trackball.</p> <p>The manifest file and
-the device's hardware and features are only part of how applications are filtered
-— filtering also depends on the country and carrier, the presence or absence
-of a SIM card, and other factors. </p>
+the app on any device that does not have a trackball.</p>
+
+<p>The manifest file and the device's hardware and features are only part of how applications are
+filtered—filtering might also depend on the country and carrier, the presence or absence of a
+SIM card, and other factors. </p>
<p>Changes to the Android Market filters are independent of changes
to the Android platform itself. This document will be updated periodically to reflect
-any changes that occur. </p>
+any changes that affect the way Android Market filters applications.</p>
+
<h2 id="how-filters-work">How Filters Work in Android Market</h2>
<p>Android Market uses the filter restrictions described below to determine
whether to show your application to a user who is browsing or searching for
-applications on a given device. When determining whether to display your app,
+applications on an Android-powered device. When determining whether to display your app,
Market checks the device's hardware and software capabilities, as well as it's
carrier, location, and other characteristics. It then compares those against the
restrictions and dependencies expressed by the application itself, in its
-manifest, <code>.apk</code>, and publishing details. If the application is
+manifest file and publishing details. If the application is
compatible with the device according to the filter rules, Market displays the
application to the user. Otherwise, Market hides your application from search
results and category browsing. </p>
-<p> You can use the filters described below to control whether Market shows or
-hides your application to users. You can request any combination of the
-available filters for your app — for example, you could set a
+<p>You can use the filters described below to control whether Market shows or
+hides your application to users. You can use any combination of the
+available filters for your app—for example, you can set a
<code>minSdkVersion</code> requirement of <code>"4"</code> and set
<code>smallScreens="false"</code> in the app, then when uploading the app to
Market you could target European countries (carriers) only. Android Market's
@@ -92,16 +98,18 @@
available. </li>
</ul>
+
+
<h2 id="manifest-filters">Filtering based on Manifest Elements</h2>
<p>Most Market filters are triggered by elements within an application's
manifest file, <a
href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>,
-although not everything in the manifest file can trigger filtering. The
-table below lists the manifest elements that you can use to trigger Android
-Market filtering, and explains how the filtering works.</p>
+although not everything in the manifest file can trigger filtering.
+Table 1 lists the manifest elements that you should use to trigger Android
+Market filtering, and explains how the filtering for each element works.</p>
-<p class="table-caption"><strong>Table 1.</strong> Manifest elements that
+<p id="table1" class="table-caption"><strong>Table 1.</strong> Manifest elements that
trigger filtering on Market.</p>
<table>
<tr>
@@ -313,10 +321,13 @@
</tr>
</table>
+
<h2 id="other-filters">Other Filters</h2>
+
<p>Android Market uses other application characteristics to determine whether to show or hide an application for a particular user on a given device, as described in the table below. </p>
-<p class="table-caption"><strong>Table 2.</strong> Application and publishing characteristics that affect filtering on Market.</p>
+<p id="table2" class="table-caption"><strong>Table 2.</strong> Application and publishing
+characteristics that affect filtering on Market.</p>
<table> <tr>
<th>Filter Name</th> <th>How It Works</th> </tr>
@@ -351,3 +362,38 @@
developer devices or unreleased devices.</p></td> </tr> </table>
+
+
+<h2 id="advanced-filters">Advanced Manifest Filters</h2>
+
+<p>In addition to the manifest elements in <a href="#table1">table 1</a>, Android Market can also
+filter applications based on the advanced manifest elements in table 3.</p>
+
+<p>These manifest elements and the filtering they trigger are for exceptional use-cases
+only. They are designed for some types of high-performance games and similar applications that
+require strict controls on application distribution. <strong>Most applications should never use
+these filters</strong>.</p>
+
+<p id="table3" class="table-caption"><strong>Table 3.</strong> Advanced manifest elements for
+Android Market filtering.</p>
+<table>
+ <tr><th>Manifest Element</th><th>Summary</th></tr>
+ <tr>
+ <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+<compatible-screens>}</a></nobr></td>
+ <td>
+ <p>Android Market filters the application if the device screen size and density does not match
+any of the screen configurations (declared by a {@code <screen>} element) in the {@code
+<compatible-screens>} element.</p>
+ <p class="caution"><strong>Caution:</strong> Normally, <strong>you should not use
+this manifest element</strong>. Using this element can dramatically
+reduce the potential user base for your application, by excluding all combinations of screen size
+and density that you have not listed. You should instead use the <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+<supports-screens>}</a> manifest element (described above in <a href="#table1">table
+1</a>) to enable screen compatibility mode for screen configurations you have not accounted for
+with alternative resources.</p>
+ </td>
+ </tr>
+</table>
+
diff --git a/docs/html/guide/developing/building/building-cmdline.jd b/docs/html/guide/developing/building/building-cmdline.jd
index a5ab07d..81c1178 100644
--- a/docs/html/guide/developing/building/building-cmdline.jd
+++ b/docs/html/guide/developing/building/building-cmdline.jd
@@ -1,4 +1,6 @@
page.title=Building and Running from the Command Line
+parent.title=Building and Running
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/building/building-eclipse.jd b/docs/html/guide/developing/building/building-eclipse.jd
index 85c82a9..6ebc49e 100644
--- a/docs/html/guide/developing/building/building-eclipse.jd
+++ b/docs/html/guide/developing/building/building-eclipse.jd
@@ -1,4 +1,6 @@
page.title=Building and Running from Eclipse with ADT
+parent.title=Building and Running
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/debugging/ddms.jd b/docs/html/guide/developing/debugging/ddms.jd
index 8f5e706..0d47ae5 100644
--- a/docs/html/guide/developing/debugging/ddms.jd
+++ b/docs/html/guide/developing/debugging/ddms.jd
@@ -1,4 +1,6 @@
page.title=Using DDMS
+parent.title=Debugging
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/debugging/debugging-devtools.jd b/docs/html/guide/developing/debugging/debugging-devtools.jd
index 67605ae..157d62e 100644
--- a/docs/html/guide/developing/debugging/debugging-devtools.jd
+++ b/docs/html/guide/developing/debugging/debugging-devtools.jd
@@ -1,4 +1,6 @@
page.title=Using the Dev Tools App
+parent.title=Debugging
+parent.link=index.html
@jd:body
<p>The Dev Tools application is installed by default on all system images included with the SDK,
diff --git a/docs/html/guide/developing/debugging/debugging-log.jd b/docs/html/guide/developing/debugging/debugging-log.jd
index ff73c17..295772d 100644
--- a/docs/html/guide/developing/debugging/debugging-log.jd
+++ b/docs/html/guide/developing/debugging/debugging-log.jd
@@ -1,4 +1,6 @@
page.title=Reading and Writing Logs
+parent.title=Debugging
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/debugging/debugging-projects-cmdline.jd b/docs/html/guide/developing/debugging/debugging-projects-cmdline.jd
index 6800a5d..3b5ceab 100644
--- a/docs/html/guide/developing/debugging/debugging-projects-cmdline.jd
+++ b/docs/html/guide/developing/debugging/debugging-projects-cmdline.jd
@@ -1,4 +1,6 @@
-page.title=Debugging from other IDEs
+page.title=Debugging from Other IDEs
+parent.title=Debugging
+parent.link=index.html
@jd:body
diff --git a/docs/html/guide/developing/debugging/debugging-projects.jd b/docs/html/guide/developing/debugging/debugging-projects.jd
index deb4341..2283f8b 100644
--- a/docs/html/guide/developing/debugging/debugging-projects.jd
+++ b/docs/html/guide/developing/debugging/debugging-projects.jd
@@ -1,4 +1,6 @@
page.title=Debugging from Eclipse with ADT
+parent.title=Debugging
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/debugging/debugging-tracing.jd b/docs/html/guide/developing/debugging/debugging-tracing.jd
index 0401966..72f6498 100644
--- a/docs/html/guide/developing/debugging/debugging-tracing.jd
+++ b/docs/html/guide/developing/debugging/debugging-tracing.jd
@@ -1,4 +1,6 @@
page.title=Profiling with Traceview and dmtracedump
+parent.title=Debugging
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/debugging/debugging-ui.jd b/docs/html/guide/developing/debugging/debugging-ui.jd
index 9b02d34..d2c42d5 100644
--- a/docs/html/guide/developing/debugging/debugging-ui.jd
+++ b/docs/html/guide/developing/debugging/debugging-ui.jd
@@ -1,4 +1,6 @@
page.title=Debugging and Profiling User Interfaces
+parent.title=Debugging
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
@@ -7,162 +9,498 @@
<ol>
<li>
- <a href="#hierarchyViewer">Debugging and Optimizing User Interfaces with Hierarchy
- Viewer</a>
- <ol>
- <li><a href="#layoutview">Layout View</a></li>
- <li><a href="#pixelperfect">Pixel Perfect View</a></li>
- </ol>
+ <a href="#HierarchyViewer">
+ Debugging and Optimizing User Interfaces with Hierarchy Viewer
+ </a>
+ <ol>
+ <li><a href="#runhv">Running Hierarchy Viewer and choosing a window</a></li>
+ <li><a href="#viewhierarchy">About the View Hierarchy window</a></li>
+ <li><a href="#indiView">Working with an individual View in Tree View</a></li>
+ <li><a href="#hvdebugging">Debugging with View Hierarchy</a></li>
+ <li><a href="#hvoptimize">Optimizing with View Hierarchy</a></li>
+ </ol>
</li>
-
+ <li>
+ <a href="#pixelperfect">
+ Examining and Designing User Interfaces with Pixel Perfect
+ </a>
+ <ol>
+ <li><a href="#aboutpixelperfect">About the Pixel Perfect window</a></li>
+ <li><a href="#overlays">Working with Pixel Perfect overlays</a></li>
+ </ol>
+ </li>
<li><a href="#layoutopt">Optimizing Layouts with <code>layoutopt</code></a></li>
</ol>
</div>
</div>
- <p>Sometimes your application's layout can slow down your application.
- To help debug issues in your layout, the Android SDK provides the Hierarchy Viewer and
+ <p>Sometimes your application's layout can slow down your application.
+ To help debug issues in your layout, the Android SDK provides the Hierarchy Viewer and
<code>layoutopt</code> tools.
</p>
-
+
<p>The Hierarchy Viewer application allows you to debug and optimize your user interface. It
- provides a visual representation of the layout's View hierarchy (the Layout View) and a magnified
- inspector of the display (the Pixel Perfect View).</p>
+ provides a visual representation of the layout's View hierarchy (the View Hierarchy window)
+ and a magnified view of the display (the Pixel Perfect window).</p>
<p><code>layoutopt</code> is a command-line tool that helps you optimize the layouts and layout
hierarchies of your applications. You can run it against your layout files or resource
directories to quickly check for inefficiencies or other types of problems that could be
affecting the performance of your application.</p>
- <h2 id="hierarchyViewer">Debugging and Optimizing User Interfaces with Hierarchy Viewer</h2>
+<h2 id="HierarchyViewer">Debugging and Optimizing User Interfaces with Hierarchy Viewer</h2>
- <p>To get the Hierarchy Viewer started:</p>
-
- <ol>
- <li>Connect your device or launch an emulator.</li>
-
- <li>From a terminal, launch <code>hierarchyviewer</code> from the <code><sdk>/tools/</code>
- directory.</li>
-
- <li>In the window that opens, you'll see a list of <strong>Devices</strong>. When a device is
- selected, a list of currently active <strong>Windows</strong> is displayed on the right. The
- <em><Focused Window></em> is the window currently in the foreground, and also the default
- window loaded if you do not select another.</li>
-
- <li>Select the window that you'd like to inspect and click <strong>Load View
- Hierarchy</strong>. The Layout View will be loaded. You can then load the Pixel Perfect View by
- clicking the second icon at the bottom-left of the window.</li>
- </ol>
-
- <p>If you've navigated to a different window on the device, press <strong>Refresh
- Windows</strong> to refresh the list of available windows on the right.</p>
-
-
- <h3 id="layoutview">Layout View</h3>
-
- <p>The Layout View offers a look at the View layout and properties. It has three views:</p>
-
- <ul>
- <li>Tree View: a hierarchy diagram of the Views, on the left.</li>
-
- <li>Properties View: a list of the selected View's properties, on the top-right.</li>
-
- <li>Wire-frame View: a wire-frame drawing of the layout, on the bottom-right.</li>
- </ul><br />
- <img src="{@docRoot}images/hierarchyviewer-layout.png"
+<h3 id="runhv">Running Hierarchy Viewer and choosing a window</h3>
+<p>
+ To run Hierarchy Viewer, follow these steps:</p>
+<ol>
+ <li>
+ Connect your device or launch an emulator.
+ <p>
+ To preserve security, Hierarchy Viewer can only connect to devices running a
+ developer version of the Android system.
+ </p>
+ </li>
+ <li>
+ If you have not done so already, install the application you want to work with.
+ </li>
+ <li>
+ Run the application, and ensure that its UI is visible.
+ </li>
+ <li>
+ From a terminal, launch <code>hierarchyviewer</code> from the
+ <code><sdk>/tools/</code>
+ directory.
+ </li>
+ <li>
+ The first window you see displays a list of devices and emulators. To expand the list
+ of Activity objects for a device or emulator, click the arrow on the left. This displays a
+ list of the Activity objects whose UI is currently visible on the device or emulator. The
+ objects are listed by their Android component name. The list includes both your application
+ Activity and system Activity objects. A screenshot of this window appears in
+ figure 1.
+ </li>
+ <li>
+ Select the name of your Activity from the list. You can now look at its view
+ hierarchy using the View Hierarchy window, or look at a magnified image of the UI using
+ the Pixel Perfect window.
+ </li>
+</ol>
+<p>
+ To learn how to use the View Hierarchy window, go to
+ <a href="#viewhierarchy">About the View Hierarchy window</a>. To learn how to use the
+ Pixel Perfect window, go to <a href="#pixelperfect">About the Pixel Perfect window</a>.
+</p>
+<img id="Fig1" src="{@docRoot}images/developing/hv_device_window.png" alt="" height="600"/>
+<p class="img-caption"><strong>Figure 1.</strong> Hierarchy Viewer device window</p>
+<h3 id="viewhierarchy">About the View Hierarchy window</h3>
+<p>
+ The View Hierarchy window displays the View objects that form the UI of the
+ Activity that is running on your device or emulator. You use it to look at individual
+ View objects within the context of the entire View tree. For each View object, the View
+ Hierarchy window also displays rendering performance data.
+</p>
+<p>
+ To see the View Hierarchy window, run Hierarchy Viewer as described in
+ the section <a href="#runhv">Running Hierarchy Viewer and choosing a window</a>. Next, click
+ <strong>View Hierarchy</strong> at the top of the device window.
+</p>
+<p>
+ You should see four panes:
+</p>
+<ul>
+ <li>
+ <strong>Tree View</strong>: The left-hand pane displays the Tree View,
+ a diagram of the Activity object's hierarchy of views. Use Tree View to examine individual
+ View objects and see the relationships between View objects in your UI.
+ <p>
+ To zoom in on the pane, use the slider at the bottom of the pane, or use your mouse
+ scroll wheel. To move around in the pane or reveal View objects that are not currently
+ visible, click and drag the pane.
+ </p>
+ <p>
+ To highlight the nodes in the tree whose class or ID match a search string, enter the
+ string in the <strong>Filter by class or id:</strong> edit box at the bottom of the
+ window. The background of nodes that match the search string will change from gray to
+ bright blue.
+ </p>
+ <p>
+ To save a screenshot of Tree View to a PNG file, click <strong>Save As PNG</strong> at
+ the top of the View Hierarchy window. This displays a dialog in which you can choose
+ a directory and file name.
+ </p>
+ <p>
+ To save a layered screenshot of your device or emulator to an Adobe Photoshop (PSD)
+ file, click <strong>Capture Layers</strong> at the top of the View Hierarchy window.
+ This displays a dialog in which you can choose a directory or file name.
+ Each View in the UI is saved as a separate Photoshop layer.
+ </p>
+ <p>
+ In Photoshop (or similar program that accepts .psd files), you can hide, show or edit a
+ layer independently of others. When you save a layered screenshot, you can examine and
+ modify the image of an individual View object. This helps you experiment with design
+ changes.
+ </p>
+ </li>
+ <li>
+ The upper right-hand pane displays the <strong>Tree Overview</strong>, a smaller map
+ representation of the entire Tree View window. Use Tree Overview to identify the part of the
+ view tree that is being displayed in Tree View.
+ <p>
+ You can also use Tree Overview to move around in the Tree View pane. Click and drag
+ the shaded rectangle over an area to reveal it in Tree View.
+ </p>
+ </li>
+ <li>
+ The middle right-hand pane displays the <strong>Properties View</strong>,
+ a list of the properties for a selected View object. With Properties View, you can
+ examine all the properties without having to look at your application source.
+ <p>
+ The properties are organized by category. To find an individual property, expand
+ a category name by clicking the arrow on its left. This reveals all the properties
+ in that category.
+ </p>
+ </li>
+ <li>
+ The lower right-hand pane displays the <strong>Layout View</strong>,
+ a block representation of the UI. Layout View is another way to navigate through your UI.
+ When you click on a View object in Tree View, its position in the UI is highlighted.
+ Conversely, when you click in an area of Layout View, the View object for that area is
+ highlighted in Tree View.
+ <p>
+ The outline colors of blocks in Layout View provide additional information:
+ </p>
+ <ul>
+ <li>
+ Bold red: The block represents the the View that is currently selected in
+ Tree View.
+ </li>
+ <li>
+ Light red: The block represents the parent of the block outlined in bold red.
+ </li>
+ <li>
+ White: The block represents a visible View that is not a parent or child of the
+ View that is currently selected in Tree View.
+ </li>
+ </ul>
+ </li>
+</ul>
+<p>
+ When the UI of the current Activity changes, the View Hierarchy window is not automatically
+ updated. To update it, click <strong>Load View Hierarchy</strong> at the top of the window.
+</p>
+<p>
+ Also, the window is not updated if you switch to a new Activity. To update it, start by
+ clicking the window selection icon in the bottom left-hand corner of the window. This
+ navigates back to the Window Selection window. From this window, click the Android
+ component name of the new Activity and then click <strong>Load View Hierarchy</strong>
+ at the top of the window.
+</p>
+<p>
+ A screenshot of the View Hierarchy window appears in figure 2.
+</p>
+<img id="Fig2" src="{@docRoot}images/developing/hv_view_hierarchy_window.png" alt="" height="600"/>
+<p class="img-caption"><strong>Figure 2.</strong> The View Hierarchy window</p>
+<h3 id="indiView">Working with an individual View in Tree View</h3>
+<p>
+ Each node in Tree View represents a single View. Some information is always visible. Starting
+ at the top of the node, you see the following:
+</p>
+<ol>
+ <li>
+ View class: The View object's class.
+ </li>
+ <li>
+ View object address: A pointer to View object.
+ </li>
+ <li>
+ View object ID: The value of the
+ <code><a href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">android:id</a>
+ </code> attribute.
+ </li>
+ <li>
+ Performance indicators: A set of three colored dots that indicate the rendering
+ speed of this View relative to other View objects in the tree. The three dots
+ represent (from left to right) the measure, layout, and draw times of the rendering.
+ <p>
+ The colors indicate the following relative performance:
+ </p>
+ <ul>
+ <li>
+ Green: For this part of the render time, this View is in the faster 50% of all
+ the View objects in the tree. For example, a green dot for the measure time means
+ that this View has a faster measure time than 50% of the View objects in the tree.
+ </li>
+ <li>
+ Yellow: For this part of the render time, this View is in the slower 50% of all
+ the View objects in the tree. For example, a yellow dot for the layout time means
+ that this View has a slower layout time than 50% of the View objects in the tree.
+ </li>
+ <li>
+ Red: For this part of the render time, this View is the slowest one in the tree.
+ For example, a red dot for the draw time means that this View takes the most
+ time to draw of all the View objects in the tree.
+ </li>
+ </ul>
+ </li>
+ <li>
+ View index: The zero-based index of the View in its parent View. If it is the only child,
+ this is 0.
+ </li>
+</ol>
+<p>
+ When you select a node, additional information for the View appears in a small window above
+ the node. When you click one of the nodes, you see the following:
+</p>
+<ul>
+ <li>
+ Image: The actual image of the View, as it would appear in the emulator. If the View has
+ children, these are also displayed.
+ </li>
+ <li>
+ View count: The number of View objects represented by this node. This includes the View
+ itself and a count of its children. For example, this value is 4 for a View that has 3
+ children.
+ </li>
+ <li>
+ Render times: The actual measure, layout, and draw times for the View rendering, in
+ milliseconds. These represent the same values as the performance indicators mentioned in
+ the preceding section.
+ </li>
+</ul>
+<p>
+ An annotated screenshot of an individual node in the Tree View window appears in figure 3.
+</p>
+<img id="Fig3" src="{@docRoot}images/developing/hv_treeview_screenshot.png" alt="" height="600"/>
+<p class="img-caption"><strong>Figure 3.</strong> An annotated node in Tree View</p>
+<h3 id="hvdebugging">Debugging with View Hierarchy</h3>
+<p>
+ The View Hierarchy window helps you debug an application by providing a static display
+ of the UI. The display starts with your application's opening screen. As you step through
+ your application, the display remains unchanged until you redraw it by invalidating and
+ then requesting layout for a View.
+</p>
+<p>
+ To redraw a View in the display:
+</p>
+ <ul>
+ <li>
+ Select a View in Tree View. As you move up towards the root of the tree (to the
+ left in the Tree View), you see the highest-level View objects. Redrawing a high-level
+ object usually forces the lower-level objects to redraw as well.
+ </li>
+ <li>
+ Click <strong>Invalidate</strong> at the top of the window. This marks the View as
+ invalid, and schedules it for a redraw at the next point that a layout is requested.
+ </li>
+ <li>
+ Click <strong>Request Layout</strong> to request a layout. The View and its children
+ are redrawn, as well as any other View objects that need to be redrawn.
+ </li>
+ </ul>
+<p>
+ Manually redrawing a View allows you to watch the View object tree and examine the properties of
+ individual View objects one step at a time as you go through breakpoints in your code.
+</p>
+<h3 id="hvoptimize">Optimizing with View Hierarchy</h3>
+<p>
+ View Hierarchy also helps you identify slow render performance. You start by looking at the
+ View nodes with red or yellow performance indicators to identify the slower View objects. As you
+ step through your application, you can judge if a View is consistently slow or slow only in
+ certain circumstances.
+</p>
+<p>
+ Remember that slow performance is not necessarily evidence of a problem, especially for
+ ViewGroup objects. View objects that have more children and more complex View objects render
+ more slowly.
+</p>
+<p>
+ The View Hierarchy window also helps you find performance issues. Just by looking at the
+ performance indicators (the dots) for each View node, you can see which View objects are the
+ slowest to measure, layout, and draw. From that, you can quickly identify the problems you
+ should look at first.
+</p>
+<h2 id="pixelperfect">Examining and Designing User Interfaces with Pixel Perfect</h2>
+<p>
+ Pixel Perfect is a tool for examining pixel properties and laying out UIs from a design drawing.
+</p>
+<h3 id="aboutpixelperfect">About the Pixel Perfect window</h3>
+<p>
+ The Pixel Perfect window displays a magnified image of the screen that is currently
+ visible on the emulator or device. In it, you can examine the properties
+ of individual pixels in the screen image. You can also use the Pixel Perfect window
+ to help you lay out your application UI based on a bitmap design.
+</p>
+<p>
+ To see the Pixel Perfect window, run Hierarchy Viewer, as described in
+ the section <a href="#runhv">Running Hierarchy Viewer and choosing a window</a>. Next, click
+ <strong>Inspect Screenshot</strong> at the top of the device window. The Pixel Perfect window
+ appears.
+</p>
+<p>
+ In it, you see three panes:
+</p>
+<ul>
+ <li>
+ View Object pane: This is a hierarchical list of the View objects that are currently
+ visible on the device or emulator screen, including both the ones in your application and
+ the ones generated by the system. The objects are listed by their View class.
+ To see the class names of a View object's children, expand the View by clicking the
+ arrow to its left. When you click a View, its position is highlighted in the Pixel Perfect
+ pane on the right.
+ </li>
+ <li>
+ Pixel Perfect Loupe pane: This is the magnified screen image. It is overlaid by a grid in
+ which each square represents one pixel. To look at the information for a pixel, click in its
+ square. Its color and X,Y coordinates appear at the bottom of the pane.
+ <p>
+ The magenta crosshair in the pane corresponds to the positioning
+ crosshair in the next pane. It only moves when you move the crosshair in the next pane.
+ </p>
+ <p>
+ To zoom in or out on the image, use the <strong>Zoom</strong> slider at the bottom of
+ the pane, or use your mouse's scroll wheel.
+ </p>
+ <p>
+ When you select a pixel in the Loupe pane, you see the following information at the
+ bottom of the pane:
+ </p>
+ <ul>
+ <li>
+ Pixel swatch: A rectangle filled with the same color as the pixel.
+ </li>
+ <li>
+ HTML color code: The hexadecimal RGB code corresponding to the pixel color
+ </li>
+ <li>
+ RGB color values: A list of the (R), green (G), and blue (B) color values of the
+ pixel color. Each value is in the range 0-255.
+ </li>
+ <li>
+ X and Y coordinates: The pixel's coordinates, in device-specific pixel units.
+ The values are 0-based, with X=0 at the left of the screen and Y=0 at the top.
+ </li>
+ </ul>
+ </li>
+ <li>
+ Pixel Perfect pane: This displays the currently visible screen as it would appear in the
+ emulator.
+ <p>
+ You use the cyan crosshair to do coarse positioning. Drag the crosshair in the image,
+ and the Loupe crosshair will move accordingly. You can also click on a point in the
+ Pixel Perfect pane, and the crosshair will move to that point.
+ </p>
+ <p>
+ The image corresponding to the View object selected in the View Object pane is
+ outlined in a box that indicates the View object's position on the screen. For the
+ selected object, the box is bold red. Sibling and parent View objects have a light
+ red box. View objects that are neither parents nor siblings are in white.
+ </p>
+ <p>
+ The layout box may have other rectangles either inside or outside it, each of which
+ indicates part of the View. A purple or green rectangle indicates the View bounding box.
+ A white or black box inside the layout box represents the <strong>padding</strong>, the
+ defined distance between the View object's content and its bounding box. An outer white
+ or black rectangle represents the <strong>margins</strong>, the distance between the
+ View bounding box and adjacent View objects. The padding and margin boxes are white if
+ the layout background is black, and vice versa.
+ </p>
+ <p>
+ You can save the screen image being displayed in the Pixel Perfect pane as a PNG file.
+ This produces a screenshot of the current screen. To do this, click
+ <strong>Save as PNG</strong> at the top of the window. This displays a dialog,
+ in which you can choose a directory and filename for the file.
+ </p>
+ </li>
+</ul>
+<p>
+ The panes are not automatically refreshed when you change one of the View objects or go to
+ another Activity. To refresh the Pixel Perfect pane and the Loupe pane, click
+ <strong>Refresh Screenshot</strong> at the top of the window. This will change the panes
+ to reflect the current screen image. You still may need to refresh the View Object pane;
+ to do this, click <strong>Refresh Tree</strong> at the top of the window.
+</p>
+<p>
+ To automatically refresh the panes while you are debugging, set
+ <strong>Auto Refresh</strong> at the top of the window, and then set a refresh rate
+ with the <strong>Refresh Rate</strong> slider at the bottom of the Loupe pane.
+</p>
+<h3 id="overlays">Working with Pixel Perfect overlays</h3>
+<p>
+ You often construct a UI based on a design done as a bitmap image. The Pixel Perfect window
+ helps you match up your View layout to a bitmap image by allowing you to load the bitmap as an
+ <strong>overlay</strong> on the screen image.
+</p>
+<p>
+ To use a bitmap image as an overlay:
+</p>
+<ul>
+ <li>
+ Start your application in a device or emulator and navigate to the Activity whose UI you
+ want to work with.
+ </li>
+ <li>
+ Start Hierarchy Viewer and navigate to the Pixel Perfect window.
+ </li>
+ <li>
+ At the top of the window, click <strong>Load Overlay</strong>. A dialog opens, prompting
+ for the image file to load. Load the image file.
+ </li>
+ <li>
+ Pixel Perfect displays the overlay over the screen image in the Pixel Perfect pane. The
+ lower left corner of the bitmap image (X=0, Y=<em>max value</em>) is anchored on the lower
+ leftmost pixel (X=0, Y=<em>max screen</em>) of the screen.
+ <p>
+ By default, the overlay has a 50% transparency, which allows you to see the screen
+ image underneath. You can adjust this with the <strong>Overlay:</strong> slider at the
+ bottom of the Loupe pane.
+ </p>
+ <p>
+ Also by default, the overlay is not displayed in the Loupe pane. To display it,
+ set <strong>Show in Loupe</strong> at the top of the window.
+ </p>
+ </li>
+</ul>
+<p>
+ The overlay is not saved as part of the screenshot when you save the screen image as a PNG
+ file.
+</p>
+<p>
+ A screenshot of the Pixel Perfect window appears in figure 4.
+</p>
+<img id="Fig4" src="{@docRoot}images/developing/hv_pixelperfect.png"
alt=""
- height="509"
- width="700" />
- <p class="img-caption"><strong>Figure 1.</strong> Screenshot of Hierarchy Viewer</p>
+ height="600"/>
+<p class="img-caption"><strong>Figure 4.</strong> The Pixel Perfect window</p>
+<h2 id="layoutopt">Optimizing layouts with layoutopt</h2>
+<p>
+ The <code>layoutopt</code> tool lets you analyze the XML files that define your
+ application's UI to find inefficiencies in the view hierarchy.</p>
- <p>Select a node in the Tree View to display the properties of that element in the Properties
- View. When a node is selected, the Wire-frame View also indicates the bounds of the element with
- a red rectangle. Double click a node in the tree (or select it, and click <strong>Display
- View</strong>) to open a new window with a rendering of that element.</p>
-
- <p>The Layout View includes a couple other helpful features for debugging your layout:
- <strong>Invalidate</strong> and <strong>Request Layout</strong>. These buttons execute the
- respective View calls, {@link android.view.View#invalidate()} and {@link
- android.view.View#requestLayout()}, on the View element currently selected in the tree. Calling
- these methods on any View can be very useful when simultaneously running a debugger on your
- application.</p>
-
- <p>The Tree View can be resized by adjusting the zoom slider, below the diagram. The number of
- View elements in the window is also given here. You should look for ways to minimize the number
- of Views. The fewer View elements there are in a window, the faster it will perform.</p>
-
- <p>If you interact with the device and change the focused View, the diagram will not
- automatically refresh. You must reload the Layout View by clicking <strong>Load View
- Hierarchy</strong>.</p>
-
- <h3 id="pixelperfect">Pixel Perfect View</h3>
-
- <p>The Pixel Perfect View provides a magnified look at the current device window. It helps you
- design your UI better by giving you a closer look at your UI's image quality, alignment, and other
- aesthetic qualities. It has three views:</p>
-
- <ul>
- <li>Explorer View: shows the View hierarchy as a list, on the left.</li>
-
- <li>Normal View: a normal view of the device window, in the middle.</li>
-
- <li>Loupe View: a magnified, pixel-grid view of the device window, on the right.</li>
- </ul><br />
- <img src="{@docRoot}images/hierarchyviewer-pixelperfect.png"
- alt=""
- height="509"
- width="700" />
-
- <p>Click on an element in the Explorer View and a "layout box" will be drawn in the Normal View
- to indicate the layout position of that element. The layout box uses multiple rectangles, to
- indicate the normal bounds, the padding and the margin (as needed). The purple or green rectangle
- indicates the normal bounds of the element (the height and width). The inner white or black
- rectangle indicates the content bounds, when padding is present. A black or white rectangle
- outside the normal purple/green rectangle indicates any present margins. (There are two colors
- for each rectangle, in order to provide the best contrast based on the colors currently in the
- background.)</p>
-
- <p>A very handy feature for designing your UI is the ability to overlay an image in the Normal
- and Loupe Views. For example, you might have a mock-up image of how you'd like to layout your
- interface. By selecting <strong>Load...</strong> from the controls in the Normal View, you can
- choose the image from your computer and it will be placed atop the preview. Your chosen image
- will anchor at the bottom left corner of the screen. You can then adjust the opacity of the
- overlay and begin fine-tuning your layout to match the mock-up.</p>
-
- <p>The Normal View and Loupe View refresh at regular intervals (5 seconds by default), but the
- Explorer View does not. If you navigate away and focus on a different View, then you should
- refresh the Explorer's hierarchy by clicking <strong>Load View Hierarchy</strong>. This is even
- true when you're working in a window that holds multiple Views that are not always visible. If
- you do not, although the previews will refresh, clicking a View in the Explorer will not provide
- the proper layout box in the Normal View, because the hierarchy believes you are still focused on
- the prior View.</p>
-
- <p>Optional controls include:</p>
-
- <ul>
- <li><strong>Overlay</strong>: Load an overlay image onto the view and adjust its opacity.</li>
-
- <li><strong>Refresh Rate</strong>: Adjust how often the Normal and Loupe View refresh their
- display.</li>
-
- <li><strong>Zoom</strong>: Adjust the zoom level of the Loupe View.</li>
- </ul>
-
- <h2 id="layoutopt">Optimizing layouts with layoutopt</h2>
- <p>The <code>layoutopt</code> tool lets you analyze the XML files that represent your application's layout
- and finds ineffiencies in the view hierarchy.</p>
-
- <p>To run the tool, open a terminal and launch <code>layoutopt <resources></code> from your
- SDK <code>tools/</code> directory. In the command, supply a list of uncompiled resource xml files
- or directories that you want to analyze.</p>
-
- <p>When run, the tool loads the specified XML files and analyzes their layout structures and
- hierarchies according to a set of predefined rules. If it detects issues, it outputs information
- about the issues, giving filename, line numbers, description of issue, and for some types of
- issues a suggested resolution.</p>
-
- <p>Here's an example of the output:</p>
- <pre>
+<p>
+ To run the tool, open a terminal and launch <code>layoutopt <xmlfiles></code>
+ from your SDK <code>tools/</code> directory. The <xmlfiles> argument is a space-
+ delimited list of resources you want to analyze, either uncompiled resource xml files or
+ directories of such files.
+</p>
+<p>
+ The tool loads the specified XML files and analyzes their definitions and
+ hierarchies according to a set of predefined rules. For every issue it detects, it
+ displays the following information:
+</p>
+<ul>
+ <li>
+ The filename in which the issue was detected.
+ </li>
+ <li>
+ The line number for the issue.
+ </li>
+ <li>
+ A description of the issue, and for some types of issues it also suggests a resolution.
+ </li>
+</ul>
+<p>The following is a sample of the output from the tool:</p>
+<pre>
$ layoutopt samples/
samples/compound.xml
7:23 The root-level <FrameLayout/> can be replaced with <merge/>
@@ -188,15 +526,3 @@
7:19 The root-level <FrameLayout/> can be replaced with <merge/>
11:17 This LinearLayout layout or its FrameLayout parent is useless
</pre>
-
-<p>
-For more information on running the tool, see the
-<a href="${@docRoot}guide/developing/debugging/debugging-ui.html#layoutopt">layoutopt</a> reference.</p>
-
-
-
-
-
-
-
-
diff --git a/docs/html/guide/developing/devices/emulator.jd b/docs/html/guide/developing/devices/emulator.jd
index f61a437..fe00531 100644
--- a/docs/html/guide/developing/devices/emulator.jd
+++ b/docs/html/guide/developing/devices/emulator.jd
@@ -1,4 +1,6 @@
page.title=Using the Android Emulator
+parent.title=Managing Virtual Devices
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/devices/managing-avds-cmdline.jd b/docs/html/guide/developing/devices/managing-avds-cmdline.jd
index 02fd750..6feeeb6 100644
--- a/docs/html/guide/developing/devices/managing-avds-cmdline.jd
+++ b/docs/html/guide/developing/devices/managing-avds-cmdline.jd
@@ -1,4 +1,6 @@
page.title=Managing AVDs from the Command Line
+parent.title=Managing Virtual Devices
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/devices/managing-avds.jd b/docs/html/guide/developing/devices/managing-avds.jd
index 2913ac9..1817ce7 100644
--- a/docs/html/guide/developing/devices/managing-avds.jd
+++ b/docs/html/guide/developing/devices/managing-avds.jd
@@ -1,4 +1,6 @@
page.title=Managing AVDs with AVD Manager
+parent.title=Managing Virtual Devices
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/projects/projects-cmdline.jd b/docs/html/guide/developing/projects/projects-cmdline.jd
index b12864e..7c3e40e 100644
--- a/docs/html/guide/developing/projects/projects-cmdline.jd
+++ b/docs/html/guide/developing/projects/projects-cmdline.jd
@@ -1,4 +1,6 @@
page.title=Managing Projects from the Command Line
+parent.title=Managing Projects
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/projects/projects-eclipse.jd b/docs/html/guide/developing/projects/projects-eclipse.jd
index aa49663..40c17ed 100644
--- a/docs/html/guide/developing/projects/projects-eclipse.jd
+++ b/docs/html/guide/developing/projects/projects-eclipse.jd
@@ -1,4 +1,6 @@
page.title=Managing Projects from Eclipse with ADT
+parent.title=Managing Projects
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/testing/index.jd b/docs/html/guide/developing/testing/index.jd
index 8ffaf58..8a08959 100644
--- a/docs/html/guide/developing/testing/index.jd
+++ b/docs/html/guide/developing/testing/index.jd
@@ -18,14 +18,14 @@
which guides you through a more complex testing scenario.
</p>
<dl>
- <dt><a href="testing_eclipse.html">Testing in Eclipse, with ADT</a></dt>
+ <dt><a href="testing_eclipse.html">Testing from Eclipse, with ADT</a></dt>
<dd>
The ADT plugin lets you quickly set up and manage test projects directly in
the Eclipse UI. Once you have written your tests, you can build and run them and
then see the results in the Eclipse JUnit view. You can also use the SDK command-line
tools to execute your tests if needed.
</dd>
- <dt><a href="testing_otheride.html">Testing in Other IDEs</a></dt>
+ <dt><a href="testing_otheride.html">Testing from Other IDEs</a></dt>
<dd>
The SDK command-line tools provide the same capabilities as the ADT plugin. You can
use them to set up and manage test projects, build your test application,
diff --git a/docs/html/guide/developing/testing/testing_eclipse.jd b/docs/html/guide/developing/testing/testing_eclipse.jd
index 2a5b771..4e9ecca 100644
--- a/docs/html/guide/developing/testing/testing_eclipse.jd
+++ b/docs/html/guide/developing/testing/testing_eclipse.jd
@@ -1,4 +1,6 @@
page.title=Testing from Eclipse with ADT
+parent.title=Testing
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
<div id="qv">
@@ -16,8 +18,8 @@
basic processes for creating and running applications with ADT, as described in
<a href="{@docRoot}guide/developing/projects/projects-eclipse.html">Managing Projects from
Eclipse</a>
- and <a href="guide/developing/building/building-eclipse.html">Building and Running from
-Eclipse</a>.
+ and <a href="{@docRoot}guide/developing/building/building-eclipse.html">Building and Running
+from Eclipse</a>.
You may also want to read
<a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>,
which provides an overview of the Android testing framework.
diff --git a/docs/html/guide/developing/testing/testing_otheride.jd b/docs/html/guide/developing/testing/testing_otheride.jd
index 50cc4fa..93af979 100644
--- a/docs/html/guide/developing/testing/testing_otheride.jd
+++ b/docs/html/guide/developing/testing/testing_otheride.jd
@@ -1,4 +1,6 @@
page.title=Testing from Other IDEs
+parent.title=Testing
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/tools/MonkeyDevice.jd b/docs/html/guide/developing/tools/MonkeyDevice.jd
index 34bbba9..abcf8fd 100644
--- a/docs/html/guide/developing/tools/MonkeyDevice.jd
+++ b/docs/html/guide/developing/tools/MonkeyDevice.jd
@@ -1,4 +1,6 @@
page.title=MonkeyDevice
+parent.title=monkeyrunner
+parent.link=index.html
@jd:body
<style>
h4.jd-details-title {background-color: #DEE8F1;}
diff --git a/docs/html/guide/developing/tools/MonkeyImage.jd b/docs/html/guide/developing/tools/MonkeyImage.jd
index ae85cb5..2efc373 100644
--- a/docs/html/guide/developing/tools/MonkeyImage.jd
+++ b/docs/html/guide/developing/tools/MonkeyImage.jd
@@ -1,4 +1,6 @@
page.title=MonkeyImage
+parent.title=monkeyrunner
+parent.link=index.html
@jd:body
<style>
h4.jd-details-title {background-color: #DEE8F1;}
diff --git a/docs/html/guide/developing/tools/MonkeyRunner.jd b/docs/html/guide/developing/tools/MonkeyRunner.jd
index 871e06d..ea8d69e 100644
--- a/docs/html/guide/developing/tools/MonkeyRunner.jd
+++ b/docs/html/guide/developing/tools/MonkeyRunner.jd
@@ -1,5 +1,8 @@
page.title=MonkeyRunner
+parent.title=monkeyrunner
+parent.link=index.html
@jd:body
+
<style>
h4.jd-details-title {background-color: #DEE8F1;}
</style>
diff --git a/docs/html/guide/developing/tools/adb.jd b/docs/html/guide/developing/tools/adb.jd
index 26839a1..e891ccd 100644
--- a/docs/html/guide/developing/tools/adb.jd
+++ b/docs/html/guide/developing/tools/adb.jd
@@ -1,4 +1,6 @@
page.title=Android Debug Bridge
+parent.title=Tools
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/tools/aidl.jd b/docs/html/guide/developing/tools/aidl.jd
index d3da285..731aef7 100644
--- a/docs/html/guide/developing/tools/aidl.jd
+++ b/docs/html/guide/developing/tools/aidl.jd
@@ -1,4 +1,4 @@
-page.title=Designing a Remote Interface Using AIDL
+page.title=Android Interface Definition Language (AIDL)
@jd:body
@@ -6,209 +6,367 @@
<div id="qv">
<h2>In this document</h2>
<ol>
- <li><a href="#implementing">Implementing IPC Using AIDL</a>
+ <li><a href="#Defining">Defining an AIDL Interface</a>
<ol>
- <li><a href="#aidlsyntax">Create an .aidl File</a></li>
- <li><a href="#implementtheinterface">Implementing the Interface</a></li>
- <li><a href="#exposingtheinterface">Exposing Your Interface to Clients</a></li>
- <li><a href="#parcelable">Pass by value Parameters using Parcelables</a></li>
+ <li><a href="#Create">Create the .aidl file</a></li>
+ <li><a href="#Implement">Implement the interface</a></li>
+ <li><a href="#Expose">Expose the interface to clients</a></li>
</ol>
</li>
- <li><a href="#calling">Calling an IPC Method</a></li>
+ <li><a href="#PassingObjects">Passing Objects over IPC</a></li>
+ <li><a href="#Calling">Calling an IPC Method</a></li>
</ol>
-</div>
-</div>
-
-<p>Since each application runs in its own process, and you can write a service that
-runs in a different process from your Application's UI, sometimes you need to pass objects
-between processes. On the Android platform, one process can not normally access the memory
-of another process. So to talk, they need to decompose their objects into primitives that
-the operating system can understand, and "marshall" the object across that boundary for you.</p>
-
-<p>The code to do that marshalling is tedious to write, so we provide the AIDL tool to do it
-for you.</p>
-
-<p>AIDL (Android Interface Definition Language) is an <a
-href="http://en.wikipedia.org/wiki/Interface_description_language">IDL</a>
-language used to generate code that enables two processes on an Android-powered device
-to talk using interprocess communication (IPC). If you have code
-in one process (for example, in an Activity) that needs to call methods on an
-object in another process (for example, a Service), you would use AIDL to
-generate code to marshall the parameters.</p>
-<p>The AIDL IPC mechanism
- is interface-based, similar to COM or Corba, but lighter weight. It uses a proxy
- class to pass values between the client and the implementation. </p>
-
-
-<h2 id="implementing">Implementing IPC Using AIDL</h2>
-<p>Follow these steps to implement an IPC service using AIDL.</p>
+<h2>See also</h2>
<ol>
- <li><strong><a href="#aidlsyntax">Create your .aidl file</a> </strong>- This
- file defines an interface (<em>YourInterface</em>.aidl) that defines the
- methods and fields available to a client. </li>
- <li><strong>Add the .aidl file to your makefile</strong> - (the ADT Plugin for Eclipse
- manages this for you). Android includes the compiler, called
- AIDL, in the <code>tools/</code> directory. </li>
- <li><strong><a href="#implementtheinterface">Implement your interface methods</a></strong> -
- The AIDL compiler creates an interface in the Java programming language from your AIDL interface.
- This interface has an inner abstract class named Stub that inherits the
- interface (and implements a few additional methods necessary for the IPC
- call). You must create a class that extends <em>YourInterface</em>.Stub
- and implements the methods you declared in your .aidl file. </li>
- <li><strong><a href="#exposingtheinterface">Expose your interface to clients</a></strong> -
- If you're writing a service, you should extend {@link
- android.app.Service Service} and override {@link android.app.Service#onBind
- Service.onBind(Intent)} to return an instance of your class that implements your
- interface. </li>
+ <li><a href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a></li>
</ol>
-<h3 id="aidlsyntax">Create an .aidl File</h3>
-<p>AIDL is a simple syntax that lets you declare an interface with one or more
- methods, that can take parameters and return values. These parameters and return
- values can be of any type, even other AIDL-generated interfaces. <em>However, it
- is important to note</em> that you <em>must</em> import all non-built-in types,
- <em>even if they are defined in the same package as your interface</em>.
- Here are the data types that AIDL can support: </p>
+</div>
+</div>
+
+
+<p>AIDL (Android Interface Definition Language) is similar to other IDLs you might have
+worked with. It allows you to define the programming interface that both
+the client and service agree upon in order to communicate with each other using
+interprocess communication (IPC). On Android, one process cannot normally access the
+memory of another process. So to talk, they need to decompose their objects into primitives that the
+operating system can understand, and marshall the objects across that boundary for you. The code to
+do that marshalling is tedious to write, so Android handles it for you with AIDL.</p>
+
+<p class="note"><strong>Note:</strong> Using AIDL is necessary only if you allow clients from
+different applications to access your service for IPC and want to handle multithreading in your
+service. If you do not need to perform concurrent IPC across
+different applications, you should create your interface by <a
+href="{@docRoot}guide/topics/fundamentals/bound-services.html#Binder">implementing a
+Binder</a> or, if you want to perform IPC, but do <em>not</em> need to handle multithreading,
+implement your interface <a
+href="{@docRoot}guide/topics/fundamentals/bound-services.html#Messenger">using a Messenger</a>.
+Regardless, be sure that you understand <a
+href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a> before
+implementing an AIDL.</p>
+
+<p>Before you begin designing your AIDL interface, be aware that calls to an AIDL interface are
+direct function calls. You should not make assumptions about the thread in which the call
+occurs. What happens is different depending on whether the call is from a thread in the
+local process or a remote process. Specifically:</p>
+
<ul>
- <li>Primitive Java programming language types (int, boolean, etc)
- — No <code>import</code> statement is needed. </li>
- <li>One of the following classes (no <code>import</code> statements needed):
- <ul>
- <li><strong>String</strong></li>
- <li><strong>List</strong> - All elements in the List must be one of the types
- in this list, including other AIDL-generated interfaces and
- parcelables. List may optionally be used as a "generic" class (e.g.
- List<String>).
- The actual concrete class that the other side will receive
- will always be an ArrayList, although the method will be generated
- to use the List interface. </li>
- <li><strong>Map</strong> - All elements in the Map must be of one of the
- types in this list, including other AIDL-generated interfaces and
- parcelables. Generic maps, (e.g. of the form Map<String,Integer>
- are not supported.
- The actual concrete class that the other side will receive
- will always be a HashMap, although the method will be generated
- to use the Map interface.</li>
- <li><strong>CharSequence</strong> - This is useful for the CharSequence
- types used by {@link android.widget.TextView TextView} and other
- widget objects. </li>
- </ul>
- </li>
- <li>Other AIDL-generated interfaces, which are always passed by reference.
- An <code>import</code> statement is always needed for these.</li>
- <li>Custom classes that implement the <a href="#parcelable">Parcelable
- protocol</a> and are passed by value.
- An <code>import</code> statement is always needed for these.</li>
+<li>Calls made from the local process are executed in the same thread that is making the call. If
+this is your main UI thread, that thread continues to execute in the AIDL interface. If it is
+another thread, that is the one that executes your code in the service. Thus, if only local
+threads are accessing the service, you can completely control which threads are executing in it (but
+if that is the case, then you shouldn't be using AIDL at all, but should instead create the
+interface by <a href="{@docRoot}guide/topics/fundamentals/bound-services.html#Binder">implementing a
+Binder</a>).</li>
+
+<li>Calls from a remote process are dispatched from a thread pool the platform maintains inside of
+your own process. You must be prepared for incoming calls from unknown threads, with multiple calls
+happening at the same time. In other words, an implementation of an AIDL interface must be
+completely thread-safe.</li>
+
+<li>The {@code oneway} keyword modifies the behavior of remote calls. When used, a remote call does
+not block; it simply sends the transaction data and immediately returns.
+The implementation of the interface eventually receives this as a regular call from the {@link
+android.os.Binder} thread pool as a normal remote call. If {@code oneway} is used with a local call,
+there is no impact and the call is still synchronous.</li>
</ul>
-<p>Here is the basic AIDL syntax:</p>
-<pre>// My AIDL file, named <em>SomeClass</em>.aidl
-// Note that standard comment syntax is respected.
-// Comments before the import or package statements are not bubbled up
-// to the generated interface, but comments above interface/method/field
-// declarations are added to the generated interface.
-// Include your fully-qualified package statement.
-package com.android.sample;
-// See the list above for which classes need
-// import statements (hint--most of them)
-import com.android.sample.IAtmService;
+<h2 id="Defining">Defining an AIDL Interface</h2>
-// Declare the interface.
-interface IBankAccountService {
-
- // Methods can take 0 or more parameters, and
- // return a value or void.
- int getAccountBalance();
- void setOwnerNames(in List<String> names);
-
- // Methods can even take other AIDL-defined parameters.
- BankAccount createAccount(in String name, int startingDeposit, in IAtmService atmService);
+<p>You must define your AIDL interface in an {@code .aidl} file using the Java
+programming language syntax, then save it in the source code (in the {@code src/} directory) of both
+the application hosting the service and any other application that binds to the service.</p>
- // All non-Java primitive parameters (e.g., int, bool, etc) require
- // a directional tag indicating which way the data will go. Available
- // values are in, out, inout. (Primitives are in by default, and cannot be otherwise).
- // Limit the direction to what is truly needed, because marshalling parameters
- // is expensive.
- int getCustomerList(in String branch, out String[] customerList);
-}</pre>
+<p>When you build each application that contains the {@code .aidl} file, the Android SDK tools
+generate an {@link android.os.IBinder} interface based on the {@code .aidl} file and save it in
+the project's {@code gen/} directory. The service must implement the {@link android.os.IBinder}
+interface as appropriate. The client applications can then bind to the service and call methods from
+the {@link android.os.IBinder} to perform IPC.</p>
-<h3 id="implementtheinterface">Implementing the Interface</h3>
-<p>AIDL generates an interface file for you with the same name as your .aidl
- file. If you are using the Eclipse plugin, AIDL will automatically be run as part of
- the build process (you don't need to run AIDL first and then build your project).
- If you are not using the plugin, you should run AIDL first. </p>
-<p>The generated interface
- includes an abstract inner class named Stub that declares all the methods
- that you declared in your .aidl file. Stub also defines a few helper methods,
- most notably asInterface(), which takes an IBinder (passed to a client's onServiceConnected()
- implementation when applicationContext.bindService() succeeds), and returns an
- instance of the interface used to call the IPC methods. See the section
- <a href="#calling">Calling an IPC Method</a> for more details on how to make this cast.</p>
-<p>To implement your interface, extend <em>YourInterface</em>.Stub,
- and implement the methods. (You can create the .aidl file and implement the stub
- methods without building between--the Android build process will process .aidl
-files before .java files.) </p>
-<p>Here is an example of implementing an interface called IRemoteService, which exposes
- a single method, getPid(), using an anonymous instance:</p>
-<pre>// No need to import IRemoteService if it's in the same project.
-private final IRemoteService.Stub mBinder = new IRemoteService.Stub(){
+<p>To create a bounded service using AIDL, follow these steps:</p>
+<ol>
+ <li><a href="#CreateAidl">Create the .aidl file</a>
+ <p>This file defines the programming interface with method signatures.</p>
+ </li>
+ <li><a href="#ImplementTheInterface">Implement the interface</a>
+ <p>The Android SDK tools generate an interface in the Java programming language, based on your
+{@code .aidl} file. This interface has an inner abstract class named {@code Stub} that extends
+{@link android.os.Binder} and implements methods from your AIDL interface. You must extend the
+{@code Stub} class and implement the methods.</p>
+ </li>
+ <li><a href="#ExposeTheInterface">Expose the interface to clients</a>
+ <p>Implement a {@link android.app.Service Service} and override {@link
+android.app.Service#onBind onBind()} to return your implementation of the {@code Stub}
+class.</p>
+ </li>
+</ol>
+
+<p class="caution"><strong>Caution:</strong> Any changes that you make to your AIDL interface after
+your first release must remain backward compatible in order to avoid breaking other applications
+that use your service. That is, because your {@code .aidl} file must be copied to other applications
+in order for them to access your service's interface, you must maintain support for the original
+interface.</p>
+
+
+<h3 id="Create">1. Create the .aidl file</h3>
+
+<p>AIDL uses a simple syntax that lets you declare an interface with one or more methods that can
+take parameters and return values. The parameters and return values can be of any type, even other
+AIDL-generated interfaces.</p>
+
+<p>You must construct the {@code .aidl} file using the Java programming language. Each {@code .aidl}
+file must define a single interface and requires only the interface declaration and method
+signatures.</p>
+
+<p>By default, AIDL supports the following data types:</p>
+
+<ul>
+ <li>All primitive types in the Java programming language (such as {@code int}, {@code long},
+{@code char}, {@code boolean}, and so on)</li>
+ <li>{@link java.lang.String}</li>
+ <li>{@link java.lang.CharSequence}</li>
+ <li>{@link java.util.List}
+ <p>All elements in the {@link java.util.List} must be one of the supported data types in this
+list or one of the other AIDL-generated interfaces or parcelables you've declared. A {@link
+java.util.List} may optionally be used as a "generic" class (for example,
+<code>List<String></code>).
+The actual concrete class that the other side receives is always an {@link
+java.util.ArrayList}, although the method is generated to use the {@link
+java.util.List} interface.</p>
+ </li>
+ <li>{@link java.util.Map}
+ <p>All elements in the {@link java.util.Map} must be one of the supported data types in this
+list or one of the other AIDL-generated interfaces or parcelables you've declared. Generic maps,
+(such as those of the form
+{@code Map<String,Integer>} are not supported. The actual concrete class that the other side
+receives is always a {@link java.util.HashMap}, although the method is generated to
+use the {@link java.util.Map} interface.</p>
+ </li>
+</ul>
+
+<p>You must include an {@code import} statement for each additional type not listed above, even if
+they are defined in the same package as your interface.</p>
+
+<p>When defining your service interface, be aware that:</p>
+<ul>
+ <li>Methods can take zero or more parameters, and return a value or void.</li>
+ <li>All non-primitive parameters require a directional tag indicating which way the data goes.
+Either <code>in</code>, <code>out</code>, or <code>inout</code> (see the example below).
+ <p>Primitives are <code>in</code> by default, and cannot be otherwise.</p>
+ <p class="caution"><strong>Caution:</strong> You should limit the direction to what is truly
+needed, because marshalling parameters is expensive.</p></li>
+ <li>All code comments included in the {@code .aidl} file are included in the generated {@link
+android.os.IBinder} interface (except for comments before the import and package
+statements).</li>
+ <li>Only methods are supported; you cannot expose static fields in AIDL.</li>
+</ul>
+
+<p>Here is an example {@code .aidl} file:</p>
+
+<pre>
+// IRemoteService.aidl
+package com.example.android;
+
+// Declare any non-default types here with import statements
+
+/** Example service interface */
+interface IRemoteService {
+ /** Request the process ID of this service, to do evil things with it. */
+ int getPid();
+
+ /** Demonstrates some basic types that you can use as parameters
+ * and return values in AIDL.
+ */
+ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
+ double aDouble, String aString);
+}
+</pre>
+
+<p>Simply save your {@code .aidl} file in your project's {@code src/} directory and when you
+build your application, the SDK tools generate the {@link android.os.IBinder} interface file in your
+project's {@code gen/} directory. The generated file name matches the {@code .aidl} file name, but
+with a {@code .java} extension (for example, {@code IRemoteService.aidl} results in {@code
+IRemoteService.java}).</p>
+
+<p>If you use Eclipse, the incremental build generates the binder class almost immediately. If you
+do not use Eclipse, then the Ant tool generates the binder class next time you build your
+application—you should build your project with <code>ant debug</code> (or <code>ant
+release</code>) as soon as you're finished writing the {@code .aidl} file, so that your code can
+link against the generated class.</p>
+
+
+<h3 id="Implement">2. Implement the interface</h3>
+
+<p>When you build your application, the Android SDK tools generate a {@code .java} interface file
+named after your {@code .aidl} file. The generated interface includes a subclass named {@code Stub}
+that is an abstract implementation of its parent interface (for example, {@code
+YourInterface.Stub}) and declares all the methods from the {@code .aidl} file.</p>
+
+<p class="note"><strong>Note:</strong> {@code Stub} also
+defines a few helper methods, most notably {@code asInterface()}, which takes an {@link
+android.os.IBinder} (usually the one passed to a client's {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method) and
+returns an instance of the stub interface. See the section <a href="#calling">Calling an IPC
+Method</a> for more details on how to make this cast.</p>
+
+<p>To implement the interface generated from the {@code .aidl}, extend the generated {@link
+android.os.Binder} interface (for example, {@code YourInterface.Stub}) and implement the methods
+inherited from the {@code .aidl} file.</p>
+
+<p>Here is an example implementation of an interface called {@code IRemoteService} (defined by the
+{@code IRemoteService.aidl} example, above) using an anonymous instance:</p>
+
+<pre>
+private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
public int getPid(){
return Process.myPid();
}
-}</pre>
-<p>A few rules about implementing your interface: </p>
+ public void basicTypes(int anInt, long aLong, boolean aBoolean,
+ float aFloat, double aDouble, String aString) {
+ // Does nothing
+ }
+};
+</pre>
+
+<p>Now the {@code mBinder} is an instance of the {@code Stub} class (a {@link android.os.Binder}),
+which defines the RPC interface for the service. In the next step, this instance is exposed to
+clients so they can interact with the service.</p>
+
+<p>There are a few rules you should be aware of when implementing your AIDL interface: </p>
<ul>
- <li>No exceptions that you throw will be sent back to the caller.</li>
- <li>By default, IPC calls are synchronous. If you know that an IPC service takes more than
- a few milliseconds to complete, you should not call it in the Activity/View thread,
- because it might hang the application (Android might display an "Application
- is Not Responding" dialog).
- Try to call them in a separate thread. </li>
- <li>Only methods are supported; you cannot declare static fields in an AIDL interface.</li>
+ <li>Incoming calls are not guaranteed to be executed on the main thread, so you need to think
+about multithreading from the start and properly build your service to be thread-safe.</li>
+ <li>By default, RPC calls are synchronous. If you know that the service takes more than a few
+milliseconds to complete a request, you should not call it from the activity's main thread, because
+it might hang the application (Android might display an "Application is Not Responding"
+dialog)—you should usually call them from a separate thread in the client. </li>
+ <li>No exceptions that you throw are sent back to the caller.</li>
</ul>
-<h3 id="exposingtheinterface">Exposing Your Interface to Clients</h3>
-<p>Now that you've got your interface implementation, you need to expose it to clients.
- This is known as "publishing your service." To publish a service,
- inherit {@link android.app.Service Service} and implement {@link android.app.Service#onBind
- Service.onBind(Intent)} to return an instance of the class that implements your interface.
- Here's a code snippet of a service that exposes the IRemoteService
- interface to clients. </p>
-<pre>public class RemoteService extends Service {
-...
-{@include development/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java
- exposing_a_service}
-}</pre>
+
+<h3 id="Expose">3. Expose the interface to clients</h3>
+
+<p>Once you've implemented the interface for your service, you need to expose it to
+clients so they can bind to it. To expose the interface
+for your service, extend {@link android.app.Service Service} and implement {@link
+android.app.Service#onBind onBind()} to return an instance of your class that implements
+the generated {@code Stub} (as discussed in the previous section). Here's an example
+service that exposes the {@code IRemoteService} example interface to clients. </p>
+
+<pre>
+public class RemoteService extends Service {
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ // Return the interface
+ return mBinder;
+ }
+
+ private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
+ public int getPid(){
+ return Process.myPid();
+ }
+ public void basicTypes(int anInt, long aLong, boolean aBoolean,
+ float aFloat, double aDouble, String aString) {
+ // Does nothing
+ }
+ };
+}
+</pre>
+
+<p>Now, when a client (such as an activity) calls {@link android.content.Context#bindService
+bindService()} to connect to this service, the client's {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback receives the
+{@code mBinder} instance returned by the service's {@link android.app.Service#onBind onBind()}
+method.</p>
+
+<p>The client must also have access to the interface class, so if the client and service are in
+separate applications, then the client's application must have a copy of the {@code .aidl} file
+in its {@code src/} directory (which generates the {@code android.os.Binder}
+interface—providing the client access to the AIDL methods).</p>
+
+<p>When the client receives the {@link android.os.IBinder} in the {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback, it must call
+<code><em>YourServiceInterface</em>.Stub.asInterface(service)</code> to cast the returned
+parameter to <code><em>YourServiceInterface</em></code> type. For example:</p>
+
+<pre>
+IRemoteService mIRemoteService;
+private ServiceConnection mConnection = new ServiceConnection() {
+ // Called when the connection with the service is established
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // Following the example above for an AIDL interface,
+ // this gets an instance of the IRemoteInterface, which we can use to call on the service
+ mIRemoteService = IRemoteService.Stub.asInterface(service);
+ }
+
+ // Called when the connection with the service disconnects unexpectedly
+ public void onServiceDisconnected(ComponentName className) {
+ Log.e(TAG, "Service has unexpectedly disconnected");
+ mIRemoteService = null;
+ }
+};
+</pre>
+
+<p>For more sample code, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
+RemoteService.java}</a> class in <a
+href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
-<h3 id="parcelable">Pass by value Parameters using Parcelables</h3>
+
+
+
+
+
+
+<h2 id="PassingObjects">Passing Objects over IPC</h2>
<p>If you have a class that you would like to send from one process to another through
-an AIDL interface, you can do that. You must ensure that the code for your class is available
-to the other side of the IPC. Generally, that means that you're talking to a service that you
-started.</p>
-<p>There are five parts to making a class support the Parcelable protocol:</b>
+an IPC interface, you can do that. However, you must ensure that the code for your class is
+available to the other side of the IPC channel and your class must support the {@link
+android.os.Parcelable} interface. Supporting the {@link android.os.Parcelable} interface is
+important because it allows the Android system to decompose objects into primitives that can be
+marshalled across processes.</p>
+
+<p>To create a class that supports the {@link android.os.Parcelable} protocol, you must do the
+following:</b>
<ol>
<li>Make your class implement the {@link android.os.Parcelable} interface.</li>
-<li>Implement the method <code>public void writeToParcel(Parcel out)</code> that takes the
-current state of the object and writes it to a parcel.</li>
-value in a parcel into your object.</li>
+<li>Implement {@link android.os.Parcelable#writeToParcel writeToParcel}, which takes the
+current state of the object and writes it to a {@link android.os.Parcel}.</li>
<li>Add a static field called <code>CREATOR</code> to your class which is an object implementing
the {@link android.os.Parcelable.Creator Parcelable.Creator} interface.</li>
-<li>Last but not least, create an aidl file
-that declares your parcelable class (as shown below). If you are using a custom build process,
-do not add the aidl file to your build. Similar to a header file in C, the aidl file isn't
-compiled.</li>
+<li>Finally, create an {@code .aidl} file that declares your parcelable class (as shown for the
+{@code Rect.aidl} file, below).
+ <p>If you are using a custom build process, do <em>not</em> add the {@code .aidl} file to your
+build. Similar to a header file in the C language, this {@code .aidl} file isn't compiled.</p></li>
</ol>
-<p>AIDL will use these methods and fields in the code it generates to marshall and unmarshall
+<p>AIDL uses these methods and fields in the code it generates to marshall and unmarshall
your objects.</p>
-<p>Here is an example of how the {@link android.graphics.Rect} class implements the
-Parcelable protocol.</p>
-<pre class="prettyprint">
+<p>For example, here is a {@code Rect.aidl} file to create a {@code Rect} class that's
+parcelable:</p>
+
+<pre>
+package android.graphics;
+
+// Declare Rect so AIDL can find it and knows that it implements
+// the parcelable protocol.
+parcelable Rect;
+</pre>
+
+<p>And here is an example of how the {@link android.graphics.Rect} class implements the
+{@link android.os.Parcelable} protocol.</p>
+
+<pre>
import android.os.Parcel;
import android.os.Parcelable;
@@ -218,7 +376,8 @@
public int right;
public int bottom;
- public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() {
+ public static final Parcelable.Creator<Rect> CREATOR = new
+Parcelable.Creator<Rect>() {
public Rect createFromParcel(Parcel in) {
return new Rect(in);
}
@@ -251,43 +410,42 @@
}
</pre>
-<p>Here is Rect.aidl for this example</p>
-
-<pre class="prettyprint">
-package android.graphics;
-
-// Declare Rect so AIDL can find it and knows that it implements
-// the parcelable protocol.
-parcelable Rect;
-</pre>
-
-<p>The marshalling in the Rect class is pretty simple. Take a look at the other
+<p>The marshalling in the {@code Rect} class is pretty simple. Take a look at the other
methods on {@link android.os.Parcel} to see the other kinds of values you can write
to a Parcel.</p>
-<p class="warning"><b>Warning:</b> Don't forget the security implications of receiving data from
-other processes. In this case, the rect will read four numbers from the parcel,
-but it is up to you to ensure that these are within the acceptable range of
-values for whatever the caller is trying to do. See
-<a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> for more
-on how to keep your application secure from malware.</p>
+<p class="warning"><strong>Warning:</strong> Don't forget the security implications of receiving
+data from other processes. In this case, the {@code Rect} reads four numbers from the {@link
+android.os.Parcel}, but it is up to you to ensure that these are within the acceptable range of
+values for whatever the caller is trying to do. See <a
+href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> for more
+information about how to keep your application secure from malware.</p>
-<h2 id="calling">Calling an IPC Method</h2>
-<p>Here are the steps a calling class should make to call your remote interface: </p>
+
+
+<h2 id="Calling">Calling an IPC Method</h2>
+
+<p>Here are the steps a calling class must take to call a remote interface defined with AIDL: </p>
<ol>
- <li>Declare a variable of the interface type that your .aidl file defined. </li>
+ <li>Include the {@code .aidl} file in the project {@code src/} directory.</li>
+ <li>Declare an instance of the {@link android.os.IBinder} interface (generated based on the
+AIDL). </li>
<li>Implement {@link android.content.ServiceConnection ServiceConnection}. </li>
- <li>Call {@link android.content.Context#bindService(android.content.Intent,android.content.ServiceConnection,int)
- Context.bindService()}, passing in your ServiceConnection implementation. </li>
- <li>In your implementation of {@link android.content.ServiceConnection#onServiceConnected(android.content.ComponentName,android.os.IBinder)
- ServiceConnection.onServiceConnected()}, you will receive an {@link android.os.IBinder
- IBinder} instance (called <em>service</em>). Call <code><em>YourInterfaceName</em>.Stub.asInterface((IBinder)<em>service</em>)</code> to
+ <li>Call {@link
+android.content.Context#bindService(android.content.Intent,android.content.ServiceConnection,int)
+ Context.bindService()}, passing in your {@link
+android.content.ServiceConnection} implementation. </li>
+ <li>In your implementation of {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()},
+you will receive an {@link android.os.IBinder} instance (called <code>service</code>). Call
+<code><em>YourInterfaceName</em>.Stub.asInterface((IBinder)<em>service</em>)</code> to
cast the returned parameter to <em>YourInterface</em> type.</li>
<li>Call the methods that you defined on your interface. You should always trap
{@link android.os.DeadObjectException} exceptions, which are thrown when
the connection has broken; this will be the only exception thrown by remote
methods.</li>
- <li>To disconnect, call {@link android.content.Context#unbindService(android.content.ServiceConnection)
+ <li>To disconnect, call {@link
+android.content.Context#unbindService(android.content.ServiceConnection)
Context.unbindService()} with the instance of your interface. </li>
</ol>
<p>A few comments on calling an IPC service:</p>
@@ -296,10 +454,12 @@
<li>You can send anonymous objects
as method arguments. </li>
</ul>
+
+<p>For more information about binding to a service, read the <a
+href="{@docRoot}guide/topics/fundamentals/bound-services.html#Binding">Bound Services</a>
+document.</p>
+
<p>Here is some sample code demonstrating calling an AIDL-created service, taken
from the Remote Service sample in the ApiDemos project.</p>
<p>{@sample development/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java
calling_a_service}</p>
-
-
-
diff --git a/docs/html/guide/developing/tools/android.jd b/docs/html/guide/developing/tools/android.jd
index 15cf8e0..a67012f 100644
--- a/docs/html/guide/developing/tools/android.jd
+++ b/docs/html/guide/developing/tools/android.jd
@@ -1,4 +1,6 @@
page.title=android
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>{@code android} is an important development tool that lets you:</p>
diff --git a/docs/html/guide/developing/tools/bmgr.jd b/docs/html/guide/developing/tools/bmgr.jd
index 57deb25..d63dcf2 100644
--- a/docs/html/guide/developing/tools/bmgr.jd
+++ b/docs/html/guide/developing/tools/bmgr.jd
@@ -1,4 +1,6 @@
page.title=bmgr
+parent.title=Tools
+parent.link=index.html
@jd:body
<!-- quickview box content here -->
diff --git a/docs/html/guide/developing/tools/dmtracedump.jd b/docs/html/guide/developing/tools/dmtracedump.jd
index 492a049..cb9ad26 100644
--- a/docs/html/guide/developing/tools/dmtracedump.jd
+++ b/docs/html/guide/developing/tools/dmtracedump.jd
@@ -1,4 +1,6 @@
page.title=dmtracedump
+parent.title=Tools
+parent.link=index.html
@jd:body
diff --git a/docs/html/guide/developing/tools/draw9patch.jd b/docs/html/guide/developing/tools/draw9patch.jd
index 4d8043b..1d9de4f 100644
--- a/docs/html/guide/developing/tools/draw9patch.jd
+++ b/docs/html/guide/developing/tools/draw9patch.jd
@@ -1,4 +1,6 @@
page.title=Draw 9-patch
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>The Draw 9-patch tool allows you to easily create a
diff --git a/docs/html/guide/developing/tools/emulator.jd b/docs/html/guide/developing/tools/emulator.jd
index 748a8b1..ff667f2 100644
--- a/docs/html/guide/developing/tools/emulator.jd
+++ b/docs/html/guide/developing/tools/emulator.jd
@@ -1,6 +1,8 @@
page.title=Android Emulator
+parent.title=Tools
+parent.link=index.html
@jd:body
-<p>
+
<p>The Android SDK includes a mobile device emulator — a virtual mobile device
that runs on your computer. The emulator lets you develop and test
Android applications without using a physical device.</p>
diff --git a/docs/html/guide/developing/tools/hierarchy-viewer.jd b/docs/html/guide/developing/tools/hierarchy-viewer.jd
index ce660fc..3d3191b 100644
--- a/docs/html/guide/developing/tools/hierarchy-viewer.jd
+++ b/docs/html/guide/developing/tools/hierarchy-viewer.jd
@@ -1,4 +1,6 @@
page.title=Hierarchy Viewer
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>Hierarchy Viewer allows you to debug and optimize your user
diff --git a/docs/html/guide/developing/tools/hprof-conv.jd b/docs/html/guide/developing/tools/hprof-conv.jd
index 27000b4..f96def2 100644
--- a/docs/html/guide/developing/tools/hprof-conv.jd
+++ b/docs/html/guide/developing/tools/hprof-conv.jd
@@ -1,4 +1,6 @@
page.title=HPROF Converter
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>
diff --git a/docs/html/guide/developing/tools/layoutopt.jd b/docs/html/guide/developing/tools/layoutopt.jd
index e8f623d..cb0b505 100644
--- a/docs/html/guide/developing/tools/layoutopt.jd
+++ b/docs/html/guide/developing/tools/layoutopt.jd
@@ -1,4 +1,6 @@
page.title=layoutopt
+parent.title=Tools
+parent.link=index.html
@jd:body
<p><code>layoutopt</code> is a command-line tool that helps you optimize the
diff --git a/docs/html/guide/developing/tools/logcat.jd b/docs/html/guide/developing/tools/logcat.jd
index 9603b9f..d4ee68a 100644
--- a/docs/html/guide/developing/tools/logcat.jd
+++ b/docs/html/guide/developing/tools/logcat.jd
@@ -1,4 +1,6 @@
page.title=logcat
+parent.title=Tools
+parent.link=index.html
@jd:body
<div></div>
diff --git a/docs/html/guide/developing/tools/mksdcard.jd b/docs/html/guide/developing/tools/mksdcard.jd
index 0ec69d2..0a80454 100644
--- a/docs/html/guide/developing/tools/mksdcard.jd
+++ b/docs/html/guide/developing/tools/mksdcard.jd
@@ -1,4 +1,6 @@
page.title=mksdcard
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>The <code>mksdcard</code> tool lets you quickly create a FAT32 disk image that you can load in the
diff --git a/docs/html/guide/developing/tools/monkey.jd b/docs/html/guide/developing/tools/monkey.jd
index 6c05934..a7e539c 100644
--- a/docs/html/guide/developing/tools/monkey.jd
+++ b/docs/html/guide/developing/tools/monkey.jd
@@ -1,4 +1,6 @@
page.title=UI/Application Exerciser Monkey
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>The Monkey is a program that runs on your
diff --git a/docs/html/guide/developing/tools/monkeyrunner_concepts.jd b/docs/html/guide/developing/tools/monkeyrunner_concepts.jd
index d648b93..97c7c1f 100644
--- a/docs/html/guide/developing/tools/monkeyrunner_concepts.jd
+++ b/docs/html/guide/developing/tools/monkeyrunner_concepts.jd
@@ -1,4 +1,6 @@
page.title=monkeyrunner
+parent.title=Tools
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
@@ -110,8 +112,17 @@
# to see if the installation worked.
device.installPackage('myproject/bin/MyApplication.apk')
-# Runs an activity in the application
-device.startActivity(component='com.example.android.myapplication.MainActivity')
+# sets a variable with the package's internal name
+package = 'com.example.android.myapplication'
+
+# sets a variable with the name of an Activity in the package
+activity = 'com.example.android.myapplication.MainActivity'
+
+# sets the name of the component to start
+runComponent = package + '/' + activity
+
+# Runs the component
+device.startActivity(component=runComponent)
# Presses the Menu button
device.press('KEYCODE_MENU','DOWN_AND_UP')
diff --git a/docs/html/guide/developing/tools/proguard.jd b/docs/html/guide/developing/tools/proguard.jd
index e75a8cd..b97babe 100644
--- a/docs/html/guide/developing/tools/proguard.jd
+++ b/docs/html/guide/developing/tools/proguard.jd
@@ -1,4 +1,6 @@
page.title=ProGuard
+parent.title=Tools
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/developing/tools/sqlite3.jd b/docs/html/guide/developing/tools/sqlite3.jd
index 71e614f..9cc7e98 100644
--- a/docs/html/guide/developing/tools/sqlite3.jd
+++ b/docs/html/guide/developing/tools/sqlite3.jd
@@ -1,4 +1,6 @@
page.title=sqlite3
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>From a remote shell to your device or from your host machine, you can use the <a href=
diff --git a/docs/html/guide/developing/tools/traceview.jd b/docs/html/guide/developing/tools/traceview.jd
index 422fe00..aa37481 100644
--- a/docs/html/guide/developing/tools/traceview.jd
+++ b/docs/html/guide/developing/tools/traceview.jd
@@ -1,4 +1,6 @@
page.title=Traceview
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>Traceview is a graphical viewer for execution logs saved by your application.
diff --git a/docs/html/guide/developing/tools/zipalign.jd b/docs/html/guide/developing/tools/zipalign.jd
index 6231798..ebf177b 100644
--- a/docs/html/guide/developing/tools/zipalign.jd
+++ b/docs/html/guide/developing/tools/zipalign.jd
@@ -1,4 +1,6 @@
page.title=zipalign
+parent.title=Tools
+parent.link=index.html
@jd:body
<p>zipalign is an archive alignment tool that provides important
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index c52fd6a..aac04b3c 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -60,14 +60,16 @@
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/fundamentals/activities.html">
<span class="en">Activities</span>
- </a></div>
+ </a> <span class="new-child">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/fundamentals/fragments.html">
<span class="en">Fragments</span>
</a> <span class="new">new!</span></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/fundamentals/loaders.html">
+ <span class="en">Loaders</span>
+ </a> <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>guide/topics/fundamentals/tasks-and-back-stack.html">
- <span class="en">Tasks and Back Stack</span>
- </a></li>
+ <span class="en">Tasks and Back Stack</span></a></li>
</ul>
</li>
<li class="toggle-list">
@@ -95,8 +97,9 @@
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/ui/index.html">
- <span class="en">User Interface</span>
- </a></div>
+ <span class="en">User Interface</span>
+ </a>
+ <span class="new-child">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/ui/declaring-layout.html">
<span class="en">Declaring Layout</span>
@@ -125,7 +128,11 @@
<span class="en">Creating Status Bar Notifications</span>
</a></li>
</ul>
- </li><!-- end of notifying the user -->
+ </li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/drag-drop.html">
+ <span class="en">Dragging and Dropping</span>
+ </a> <span class="new">new!</span>
+ </li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/themes.html">
<span class="en">Applying Styles and Themes</span>
</a></li>
@@ -202,6 +209,7 @@
<li><a href="<?cs var:toroot ?>guide/topics/manifest/activity-alias-element.html"><activity-alias></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/application-element.html"><application></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/category-element.html"><category></a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/manifest/compatible-screens-element.html"><compatible-screens></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/data-element.html"><data></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/instrumentation-element.html"><instrumentation></a></li>
@@ -228,8 +236,9 @@
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/graphics/index.html">
- <span class="en">Graphics</span>
- </a></div>
+ <span class="en">Graphics</span>
+ </a>
+ <span class="new-child">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/2d-graphics.html">
<span class="en">2D Graphics</span>
@@ -239,10 +248,10 @@
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/renderscript.html">
<span class="en">3D with Renderscript</span>
- </a><span class="new">new!</span></li>
+ </a> <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/animation.html">
<span class="en">Property Animation</span>
- </a><span class="new">new!</span></li>
+ </a> <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/view-animation.html">
<span class="en">View Animation</span>
</a></li>
@@ -251,6 +260,12 @@
<li><a href="<?cs var:toroot ?>guide/topics/media/index.html">
<span class="en">Audio and Video</span>
</a></li>
+ <li>
+ <a href="<?cs var:toroot ?>guide/topics/clipboard/copy-paste.html">
+ <span class="en">Copy and Paste</span>
+ </a>
+ <span class="new">new!</span>
+ </li>
<!--<li class="toggle-list">
<div><a style="color:gray;">Sensors</a></div>
<ul>
@@ -282,6 +297,9 @@
<li><a href="<?cs var:toroot?>guide/topics/wireless/bluetooth.html">
<span class="en">Bluetooth</span>
</a></li>
+ <li><a href="<?cs var:toroot?>guide/topics/nfc/index.html">
+ <span class="en">Near Field Communication</span></a>
+ <span class="new">new!</span></li>
<li><a href="<?cs var:toroot?>guide/topics/network/sip.html">
<span class="en">Session Initiation Protocol</span></a>
<span class="new">new!</span>
@@ -399,24 +417,24 @@
<li class="toggle-list">
<div>
<a href="<?cs var:toroot ?>guide/developing/devices/index.html">
- <span class="en">Managing Virtual Devices</span>
- </a>
+ <span class="en">Managing Virtual Devices</span>
+ </a>
</div>
<ul>
<li>
<a href="<?cs var:toroot ?>guide/developing/devices/managing-avds.html">
<span class="en">With AVD Manager</span>
- </a>
+ </a>
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/devices/managing-avds-cmdline.html">
<span class="en">From the Command Line</span>
- </a>
+ </a>
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/devices/emulator.html">
- <span class="en">Using the Android Emulator</span>
- </a>
+ <span class="en">Using the Android Emulator</span>
+ </a>
</li>
</ul>
</li>
@@ -425,7 +443,7 @@
<span class="en">Using Hardware Devices</span>
</a>
</li>
-
+
<li class="toggle-list">
<div>
<a href="<?cs var:toroot ?>guide/developing/projects/index.html">
@@ -440,7 +458,7 @@
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/projects/projects-cmdline.html">
- <span class="en">From the Command Line</span>
+ <span class="en">From the Command Line</span>
</a>
</li>
</ul>
@@ -470,12 +488,12 @@
<ul>
<li>
<a href="<?cs var:toroot ?>guide/developing/debugging/debugging-projects.html">
- <span class="en">From Eclipse with ADT</span>
+ <span class="en">From Eclipse with ADT</span>
</a>
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/debugging/debugging-projects-cmdline.html">
- <span class="en">From Other IDEs</span>
+ <span class="en">From Other IDEs</span>
</a>
</li>
<li>
@@ -485,23 +503,23 @@
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/debugging/debugging-log.html">
- <span class="en">Reading and Writing Logs</span>
+ <span class="en">Reading and Writing Logs</span>
</a>
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/debugging/debugging-ui.html">
- <span class="en">Debugging and Profiling UIs</span>
- </a>
+ <span class="en">Debugging and Profiling UIs</span>
+ </a>
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/debugging/debugging-tracing.html">
- <span class="en">Profiling with Traceview and dmtracedump</span>
- </a>
+ <span class="en">Profiling with Traceview and dmtracedump</span>
+ </a>
</li>
<li>
<a href="<?cs var:toroot ?>guide/developing/debugging/debugging-devtools.html">
- <span class="en">Using the Dev Tools App</span>
- </a>
+ <span class="en">Using the Dev Tools App</span>
+ </a>
</li>
</ul>
</li>
@@ -534,7 +552,6 @@
<ul>
<li><a href="<?cs var:toroot ?>guide/developing/tools/adb.html">adb</a></li>
<li><a href="<?cs var:toroot ?>guide/developing/tools/android.html">android</a></li>
- <li><a href="<?cs var:toroot ?>guide/developing/tools/aidl.html">aidl</a></li>
<li><a href="<?cs var:toroot ?>guide/developing/tools/bmgr.html">bmgr</a>
<li><a href="<?cs var:toroot ?>guide/developing/tools/dmtracedump.html">dmtracedump</a></li>
<li><a href="<?cs var:toroot ?>guide/developing/tools/draw9patch.html" >Draw 9-Patch</a></li>
@@ -635,6 +652,9 @@
<li><a href="<?cs var:toroot ?>guide/practices/screens_support.html">
<span class="en">Supporting Multiple Screens</span>
</a></li>
+ <li><a href="<?cs var:toroot ?>guide/practices/optimizing-for-3.0.html">
+ <span class="en">Optimizing Apps for Android 3.0</span>
+ </a> <span class="new">new!</span></li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/index.html">
<span class="en">UI Guidelines</span>
@@ -735,6 +755,7 @@
<li><a href="<?cs var:toroot ?>guide/appendix/g-app-intents.html">
<span class="en">Intents List: Google Apps</span>
</a></li>
+ <li><a href="<?cs var:toroot ?>guide/developing/tools/aidl.html">AIDL</a></li>
<li><a href="<?cs var:toroot ?>guide/appendix/glossary.html">
<span class="en">Glossary</span>
</a></li>
diff --git a/docs/html/guide/market/billing/billing_about.jd b/docs/html/guide/market/billing/billing_about.jd
index 9c027ca..dac9738 100755
--- a/docs/html/guide/market/billing/billing_about.jd
+++ b/docs/html/guide/market/billing/billing_about.jd
@@ -1,4 +1,6 @@
page.title=About this Release
+parent.title=In-app Billing
+parent.link=index.html
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/market/billing/billing_admin.jd b/docs/html/guide/market/billing/billing_admin.jd
index cc5cb59..cd8f960 100755
--- a/docs/html/guide/market/billing/billing_admin.jd
+++ b/docs/html/guide/market/billing/billing_admin.jd
@@ -1,4 +1,6 @@
page.title=Administering In-app Billing
+parent.title=In-app Billing
+parent.link=index.html
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/market/billing/billing_best_practices.jd b/docs/html/guide/market/billing/billing_best_practices.jd
index fd67e80..4743e88 100755
--- a/docs/html/guide/market/billing/billing_best_practices.jd
+++ b/docs/html/guide/market/billing/billing_best_practices.jd
@@ -1,4 +1,6 @@
page.title=Security and Design
+parent.title=In-app Billing
+parent.link=index.html
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/market/billing/billing_integrate.jd b/docs/html/guide/market/billing/billing_integrate.jd
index 0f081a5..0cac2eb 100755
--- a/docs/html/guide/market/billing/billing_integrate.jd
+++ b/docs/html/guide/market/billing/billing_integrate.jd
@@ -1,4 +1,6 @@
page.title=Implementing In-app Billing
+parent.title=In-app Billing
+parent.link=index.html
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/market/billing/billing_overview.jd b/docs/html/guide/market/billing/billing_overview.jd
index 675fe2a..b899b9b 100755
--- a/docs/html/guide/market/billing/billing_overview.jd
+++ b/docs/html/guide/market/billing/billing_overview.jd
@@ -1,4 +1,6 @@
-page.title=Overview of In-app Billing
+page.title=In-app Billing Overview
+parent.title=In-app Billing
+parent.link=index.html
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/market/billing/billing_reference.jd b/docs/html/guide/market/billing/billing_reference.jd
index c91ca89..2e5c9c6 100755
--- a/docs/html/guide/market/billing/billing_reference.jd
+++ b/docs/html/guide/market/billing/billing_reference.jd
@@ -1,4 +1,6 @@
page.title=In-app Billing Reference
+parent.title=In-app Billing
+parent.link=index.html
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/market/billing/billing_testing.jd b/docs/html/guide/market/billing/billing_testing.jd
index 4a36588..5ced9c7 100755
--- a/docs/html/guide/market/billing/billing_testing.jd
+++ b/docs/html/guide/market/billing/billing_testing.jd
@@ -1,4 +1,6 @@
page.title=Testing In-app Billing
+parent.title=In-app Billing
+parent.link=index.html
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/market/billing/index.jd b/docs/html/guide/market/billing/index.jd
index f5d001d..6985179 100755
--- a/docs/html/guide/market/billing/index.jd
+++ b/docs/html/guide/market/billing/index.jd
@@ -1,4 +1,4 @@
-page.title=Adding In-app Billing to Your Applications
+page.title=In-app Billing
@jd:body
<style type="text/css">
diff --git a/docs/html/guide/practices/optimizing-for-3.0.jd b/docs/html/guide/practices/optimizing-for-3.0.jd
new file mode 100644
index 0000000..a22e69a
--- /dev/null
+++ b/docs/html/guide/practices/optimizing-for-3.0.jd
@@ -0,0 +1,397 @@
+page.title=Optimizing Apps for Android 3.0
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+<li><a href="#Setup">Set Up Your SDK with Android 3.0</a></li>
+<li><a href="#SearchableConfiguration">Optimize Your App for Tablets and Similar Devices</a></li>
+<li><a href="#SearchableActivity">Upgrade or Develop a New App for Tablets and Similar
+Devices</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>If you're developing an Android application, Android 3.0 introduces several features that allow
+you to enhance your user's experience on tablets and similar devices. Any application you've already
+published is compatible with devices running Android 3.0, by default, because Android applications
+are forward-compatible. However, there are some simple changes you should make to optimize your
+application for tablet-type devices.</p>
+
+<p>This document shows how you can optimize your existing application for Android 3.0 and
+maintain compatibility with older versions or upgrade your application completely with new APIs.</p>
+
+
+<p><b>To get started:</b></p>
+
+<ol>
+ <li><a href="#Setup">Set up your SDK with Android 3.0</a>.</li>
+ <li>Then choose to either optimize or upgrade:
+ <ol type="a">
+ <li><a href="#Optimize">Optimize Your App for Tablets and Similar Devices</a>.
+ <p>When you have an existing application and want to maintain compatibility with
+older versions of Android.</p>
+ </li>
+ <li><a href="#Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</a>.
+ <p>When you want to upgrade your application to use APIs introduced in Android 3.0 or
+ create a new application targeted to tablets and similar devices.</p></li>
+ </ol>
+ </li>
+</ol>
+
+
+<h2 id="Setup">Set Up Your SDK with Android 3.0</h2>
+
+<p>To start testing and developing your application on Android 3.0, set up your existing Android
+SDK with the new platform:</p>
+
+<p>(If you don't have an existing Android SDK, <a href="{@docRoot}sdk/index.html">download the
+SDK starter package now</a>.)</p>
+
+<ol>
+ <li><a href="{@docRoot}sdk/adding-components.html#launching">Launch the Android SDK and AVD
+Manager</a> and install the following:
+ <ul>
+ <li>SDK Platform Android 3.0</li>
+ <li>Android SDK Tools, revision 10</li>
+ <li>Android SDK Platform-tools, revision 3</li>
+ <li>Documentation for Android SDK, API 11</li>
+ <li>Samples for SDK API 11</li>
+ </ul>
+ </li>
+ <li><a href="{@docRoot}guide/developing/other-ide.html#AVD">Create an AVD</a> for a tablet-type
+device:
+ <p>Set the target to "Android 3.0" and the skin to "WXGA" (the default skin).</p></li>
+</ol>
+
+
+<h3>About emulator performance</h3>
+
+<p>Because the Android emulator must simulate the ARM instruction set on your computer
+and the WXGA screen is significantly larger than a typical virtual device, emulator performance is
+much slower than a real device.</p>
+
+<p>In particular, initializing the emulator can be slow and can take several minutes, depending on
+your hardware. When the emulator is booting, there is limited user feedback, so please be patient
+and wait until you see the home screen (or lock screen) appear. </p>
+
+<p>However, you don't need to boot the emulator each time you rebuild your
+application—typically you only need to boot at the start of a session and keep it running.
+Also see the tip below for information about using a snapshot to drastically reduce startup time
+after the first initialization. </p>
+
+<p>We're working hard to resolve the performance issues and it will improve in future tools
+releases. For the time being, the emulator is still best way to evaluate your application's
+appearance and functionality on Android 3.0 without a real device.</p>
+
+<p class="note"><strong>Tip:</strong> To improve the startup time for the emulator, enable snapshots
+for the AVD when you create it with the SDK and AVD Manager (there's a checkbox in the AVD creator
+to <strong>Enable</strong> snapshots). Then, start the AVD from the AVD manager and check <b>Launch
+from snapshot</b> and <b>Save to snapshot</b>. This way, when you close the emulator, a snapshot of
+the AVD state is saved and used to quickly relaunch the AVD next time. However, when you choose to
+save a snapshot, the emulator will be slow to close, so you might want to disable <b>Save to
+snapshot</b> after you've acquired an initial snapshot (after you close the AVD for the first
+time).</p>
+
+
+
+<h2 id="Optimize">Optimize Your Application for Tablets and Similar Devices</h2>
+
+<p>If you've already developed an application for an earlier version of Android, there are a few
+things you can do to optimize it for a tablet-style experience on Android 3.0 without changing the
+minimum version required (you don't need to change your manifest's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a>).</p>
+
+<p class="note"><strong>Note:</strong> All Android applications are forward-compatible, so
+there's nothing you <em>have to</em> do—if your application is a good citizen of the Android
+APIs, your app should work fine on devices running Android 3.0. However, in order to provide users
+a better experience when using your app on an Android 3.0 tablet or similar-size device, you
+should update your application to inherit the new system theme and provide some optimizations for
+larger screens.</p>
+
+<p>Here are a few things you can do to optimize your application for devices running Android
+3.0:</p>
+
+<ol>
+ <li><b>Test your current application on Android 3.0</b>
+ <ol>
+ <li>Build your application as-is and install it on your Android 3.0 AVD (created above during
+<a href="#Setup">setup</a>).</li>
+ <li>Perform your usual tests to be sure everything works and looks as expected.</li>
+ </ol>
+ </li>
+
+ <li><b>Apply the new "holographic" theme to your application</b>
+ <ol>
+ <li>Open your manifest file and update the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element to
+set <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+android:targetSdkVersion}</a> to {@code "11"}. For example:
+<pre>
+<manifest ... >
+ <uses-sdk android:minSdkVersion="4"
+ android:targetSdkVersion="11" />
+ <application ... >
+ ...
+ <application>
+</manifest>
+</pre>
+ <p>By targeting the Android 3.0 platform, the system automatically applies the holographic theme
+to each activity when your application runs on an Android 3.0 device. The holographic theme
+provides a new design for widgets, such as buttons and text boxes, and restyles other
+visual elements. This is the standard theme in applications built for Android 3.0, so your
+application will look more at home by enabling the theme.</p>
+ <p>Additionally, the holographic theme enables the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> in your activities when running on an
+Android 3.0 device. The Action Bar replaces the traditional title bar at the top of the activity
+window and provides the user access to the activity's Options Menu.</p>
+ </li>
+ <li>Continue to build your application against the minimum version specified by <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>,
+but install it on the Android 3.0 AVD. Repeat your tests to be sure that your user interface works
+well with the holographic theme.
+ <p class="note"><strong>Note:</strong> If you have applied other themes directly to your
+activities, they will override the inherited holographic theme. To resolve this, you can use
+the <a href="{@docRoot}guide/topics/resources/providing-resources.html#VersionQualifier">system
+version qualifier</a> to provide an alternative theme for Android 3.0 devices that's based on the
+holographic theme. For more information, read how to <a
+href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based on platform
+version</a>.</p>
+ </ol>
+ </li>
+
+ <li><b>Supply alternative layout resources for xlarge screens</b>
+ <p>By providing <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
+resources</a> when running on extra large screens (using the <code>xlarge</code> resource
+qualifier), you can improve the user experience of your application on tablet-type devices without
+using new APIs.</p>
+ <p>For example, here are some things to consider when creating a new layout for extra large
+screens:</p>
+ <ul>
+ <li>Landscape layout: The "normal" orientation for tablet-type devices is usually landscape
+(wide), so you should be sure that your activities offer a layout that's optimized for a wide
+viewing area. <p>You can specify landscape resources with the <code>land</code> resource
+qualifier, but if you want alternative resources for an extra large landscape screen, you
+should use both <code>xlarge</code> and <code>land</code> qualifiers. For example, {@code
+res/layout-xlarge-land/}. The order of the qualifier names is important; see <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+Providing Alternative Resources</a> for more information.</p></li>
+ <li>Button position: Consider whether the position of the most common buttons in your UI are
+easily accessible while holding a tablet with two hands.</li>
+ <li>Font sizes: Be sure your application uses {@code sp} units when setting font
+sizes. This alone should ensure a readable experience on tablet-style devices. In some cases,
+however, you might want to consider larger font sizes for <code>xlarge</code> configurations.</li>
+ </ul>
+ <p>In general, always be sure that your application follows the <a
+href="{@docRoot}guide/practices/screens_support.html#screen-independence">Best Practices
+for Screen Independence</a>.</p>
+ </li>
+</ol>
+
+
+
+
+
+<h2 id="Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</h2>
+
+<p>If you want to develop an application that's fully enhanced for tablet-type devices running
+Android 3.0, then you need to use new APIs in Android 3.0. This section introduces some of
+the new features you should use.</p>
+
+
+<h3>Declare the minimum system version</h3>
+
+<p>The first thing to do when you create a project for Android 3.0 is set your manifest's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
+to {@code "11"}. For example:</p>
+
+<pre>
+<manifest ... >
+ <uses-sdk android:minSdkVersion="11" />
+ <application ... >
+ ...
+ <application>
+</manifest>
+</pre>
+
+<p>By targeting the Android 3.0 platform, the system automatically applies the new holographic theme
+to each of your activities.</p>
+
+<p>Additionally, the holographic theme enables the Action Bar for each activity.</p>
+
+
+<h3>Use the Action Bar</h3>
+
+<p>The Action Bar is a widget for activities that replaces the traditional title bar at the top of
+the screen. By default, the Action Bar includes the application logo on the left side, followed by
+the activity title, and any available items from the Options Menu on the right side.</p>
+
+<p>You can enable items from your activity's Options Menu to appear directly in the Action Bar as
+"action items" by adding {@code showAsAction="ifRoom"} to specific items in your <a
+href="{@docRoot}guide/topics/resources/menu-resource.html">menu resource</a>. You can also add
+navigation features to the Action Bar, such as tabs, and use the application icon to navigate to
+your application's "home" activity or "up" the activity hierarchy.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/ui/actionbar.html">Using the
+Action Bar</a>.</p>
+
+
+
+<h3>Divide your activities into fragments</h3>
+
+<p>A fragment represents a behavior or a portion of user interface in an activity. You can combine
+multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple
+activities. You can think of a fragment as a modular section of an activity, which has its own
+lifecycle, receives its own input events, and which you can add or remove while the activity is
+running.</p>
+
+<p>For example, a news application can use one fragment to show a list of articles on the left and
+another fragment to display an article on the right—both fragments appear in one activity,
+side by side, and each fragment has its own set of lifecycle callback methods and handles its own
+input events. Thus, instead of using one activity to select an article and another activity to
+read the article, the user can select an article and read it all within the same activity.</p>
+
+<p>For more information, read the <a
+href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> document.</p>
+
+
+<h3>Use new animation APIs for transitions</h3>
+
+<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
+(View, Drawable, Fragment, Object, or anything else). You can define several animation aspects
+(such as duration, repeat, interpolation, and more) for an object's int, float, and hexadecimal
+color values, by default. That is, when an object has a property field for one of these types, you
+can change its value over time to affect an animation.</p>
+
+<p>The {@link android.view.View} class also provides new APIs that leverage the new animation
+framework, allowing you to easily apply 2D and 3D transformations to views in your activity layout.
+New transformations are made possible with a set of object properties that define the view's layout
+position, orientation, transparency and more.</p>
+
+<p>For more information, read the <a
+href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a> document.</p>
+
+
+<h3>Enable hardware acceleration</h3>
+
+<p>You can now enable the OpenGL renderer for your application by setting {@code
+android:hardwareAccelerated="true"} in your manifest's <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+element or for individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+<activity>}</a> elements. Hardware acceleration results in smoother animations, smoother
+scrolling, and overall better performance and response to user interaction. When enabled, be sure
+that you thoroughly test your application on a device that supports hardware acceleration.</p>
+
+
+<h3>Enhance your app widgets</h3>
+
+<p>App widgets allow users to access information from your application directly from the Home
+screen and interact with ongoing services (such as preview their email and control music playback).
+Android 3.0 enhances these capabilities by enabling collections, created with widgets such as
+{@link android.widget.ListView}, {@link android.widget.GridView}, and the new {@link
+android.widget.StackView}. These widgets allow you to create more interactive app
+widgets, such as one with a scrolling list, and can automatically update their data through a {@link
+android.widget.RemoteViewsService}.</p>
+
+<p>Additionally, you should create a preview image of your app widget using the Widget Preview
+application (pre-installed in an Android 3.0 AVD) and reference it with the {@link
+android.appwidget.AppWidgetProviderInfo#previewImage android:previewImage} attribute, so that users
+can see what the app widget looks like before adding it to their Home screen.</p>
+
+
+<h3>Add other new features</h3>
+
+<p>Android 3.0 introduces many more APIs that you might find valuable for your
+application, such as drag and drop APIs, new Bluetooth APIs, a system-wide clipboard framework, a
+new graphics engine called Renderscript, and more.</p>
+
+<p>To learn more about the APIs mentioned above and more, see the <a
+href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
+
+
+<h3>Publish your app for extra large screens</h3>
+
+<p>You should also decide whether your application is <em>only</em> for
+tablet-type devices (specifically, <em>xlarge</em> devices) or for all types of screen sizes.</p>
+
+<p>If you want your application to be available to all screen sizes (for example, for all
+phones and tablets), there's nothing you need to do. By default, an application with <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a> set to {@code "4"} or higher will resize to fit any screen size.</p>
+
+<p>If your application is <em>only</em> for <em>xlarge</em> screens, include the <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+<supports-screens>}</a> element in your manifest and declare that the application supports
+only <em>xlarge</em> screens, by declaring all other sizes {@code "false"}. For example:</p>
+
+<pre>
+<manifest ... >
+ ...
+ <supports-screens android:smallScreens="false"
+ android:normalScreens="false"
+ android:largeScreens="false"
+ android:xlargeScreens="true" />
+ <application ... >
+ ...
+ <application>
+</manifest>
+</pre>
+
+<p>With this declaration, you indicate that your application does not support any screen size except
+extra large. External services such as Android Market may then use this information to filter your
+application from devices that do not have an extra large screen.</p>
+
+
+
+<h3>Look at some samples</h3>
+
+<p>Many of the new features and APIs that are described in the <a
+href="{@docRoot}sdk/android-3.0.html#api">Android 3.0 Platform Preview</a> also have accompanying
+samples that can help you understand how to use them. To get the samples, download them from the SDK
+repository using the Android SDK Manager. After downloading the samples ("Samples for SDK API 11"),
+you can find them in <code><sdk_root>/samples/android-11/</code>. The links below can help you
+find samples for the features you are interested in:</p>
+
+<ul>
+ <li><a href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>:
+Demonstrates many new APIs in Android 3.0, including fragments, the action bar, drag and drop, and
+animations.</li>
+ <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
+Fragments</a>: Various samples that demonstrate fragment layouts, back stack, restoring state, and
+more.</li>
+ <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html"
+>Action Bar</a>: Samples that demonstrate various Action Bar features, such as tabs, logos, and
+action items.</li>
+ <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.
+html">Clipboard</a>: An example of how to use the clipboard for copy and paste operations.</li>
+ <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">
+Drag and Drop</a>: An example of how to perform drag and drop with new View events.</li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">
+Multi-choice List</a>: An example of how to provide multiple-choice selection for ListView and
+GridView.</li>
+ <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
+Content Loaders</a>: An example using new Loader APIs to asynchronously load data.</li>
+ <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">
+Property Animation</a>: Several samples using the new animation APIs to animate object
+properties.</li>
+ <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.
+html">Search View Widget</a>: Example using the new search widget in the Action Bar (as an
+"action view").</li>
+ <li><a
+href="{@docRoot}resources/samples/Renderscript/index.html">Renderscript</a>: Contains several
+different applications that demonstrate using renderscript APIs for computations and 3D
+graphics.</li>
+</ul>
+
diff --git a/docs/html/guide/publishing/licensing.jd b/docs/html/guide/publishing/licensing.jd
index 5551384..4184ecb 100644
--- a/docs/html/guide/publishing/licensing.jd
+++ b/docs/html/guide/publishing/licensing.jd
@@ -1,4 +1,4 @@
-page.title=Licensing Your Applications
+page.title=Application Licensing
@jd:body
<div id="qv-wrapper">
@@ -518,7 +518,7 @@
</ol>
<p>If you are not familiar with AVDs or how to use them, see <a
-href="{@docRoot}guide/developing/devices/index.html">Creating and Managing Virtual Devices</a>.</p>
+href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a>.</p>
<h4 id="project-update">Updating your project configuration</h4>
@@ -629,7 +629,7 @@
<p style="margin-top:.5em;">If you aren't familiar with library projects or how
to use them, see <a href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">
-Creating and Managing Projects</a>.
+Managing Projects</a>.
</p>
</div>
</div>
@@ -666,8 +666,9 @@
no further configuration is needed. </p>
<p>For more information about how to create an application project or work with
-library projects in Eclipse, see <a href="{@docRoot}guide/developing/projects/projects-eclipse.html">
-Creating and Managing Projects in Eclipse</a></p>.
+library projects in Eclipse, see <a
+href="{@docRoot}guide/developing/projects/projects-eclipse.html">Managing Projects from
+Eclipse with ADT</a></p>.
<h4>Copying the LVL sources to your application</h4>
@@ -698,8 +699,8 @@
Select the "Android" properties group and click <strong>Add</strong>, then
choose the LVL library project (com_android_vending_licensing) and click
<strong>OK</strong>. For more information, see
-<a href="{@docRoot}developing/projects/projects-eclipse.html#SettingUpLibraryProject">
-Creating and Managing Projects in Eclipse</a></p>.
+<a href="{@docRoot}guide/developing/projects/projects-eclipse.html#SettingUpLibraryProject">
+Managing Projects from Eclipse with ADT</a></p>.
<div style="margin-bottom:2em;">
@@ -727,8 +728,8 @@
</pre>
<p>For more information about working with library projects,
-see <a href="{@docRoot}developing/projects/projects-cmdline.html#SettingUpLibraryProject">
-Creating and Managing Projects on the Command Line</a></p>.
+see <a href="{@docRoot}guide/developing/projects/projects-cmdline.html#SettingUpLibraryProject">
+Managing Projects from the Command Line</a></p>.
<h2 id="app-integration">Integrating the LVL with Your Application</h2>
diff --git a/docs/html/guide/topics/advanced/aidl.jd b/docs/html/guide/topics/advanced/aidl.jd
deleted file mode 100644
index fef46ec..0000000
--- a/docs/html/guide/topics/advanced/aidl.jd
+++ /dev/null
@@ -1,387 +0,0 @@
-page.title=Android Interface Definition Language (AIDL)
-@jd:body
-
-
-
-<p>AIDL (Android Interface Definition Language) is similar to other IDLs you might have
-worked with. It allows you to define the programming interface that both
-the client and service agree upon in order to communicate with each other and allows for
-interprocess communication (IPC). On Android, one process can not normally access the
-memory of another process. So to talk, they need to decompose their objects into primitives that the
-operating system can understand, and "marshall" the object across that boundary for you. The code to
-do that marshalling is tedious to write, so Android handles it for you with AIDL.</p>
-
-<p class="note"><strong>Note:</strong> Using AIDL is necessary only if you allow clients from
-different applications to access your service for IPC and want to handle multithreading in your
-service. If you do not need to perform IPC across
-different applications, you should create your interface <a href="Binder">implementing a
-Binder</a> or, if you want to perform IPC, but do not need to handle multithreading, then you
-should implement your interface <a href="#Messenger">using a Messenger</a>.</p>
-
-<p>Before you begin designing your AIDL interface, be aware that calls on to an AIDL interface are
-direct function calls. You can not generally make assumptions about the thread in which the call
-will happen. What happens is different depending on whether the call is from a thread in the
-local process, or coming from a remote process. Specifically:</p>
-
-<ul>
-<li>Calls from the local process are executed in the same thread that is making the call. If this is
-your main UI thread, that thread will continue executing into the aidl interface. If it is another
-thread, that is one that will be executing your code. Thus if only local threads are accessing the
-interface, you can completely control which threads are executing in it (but if that is the case,
-why are you defining an aidl interface at all?).</li>
-
-<li>Calls from a remote process are dispatched from a thread pool the platform maintains inside of
-your own process. You must be prepared for incoming calls from unknown threads, with multiple calls
-happening at the same time. In other words, an implementation of an aidl interface must be
-completely thread-safe.</li>
-
-<li>The "oneway" keyword modifies the behavior of remote calls. When used, a remote call will not
-block until its call completes; it simply sends the transaction data and immediately returns. The
-implementation of the interface will eventually receive this as a regular call from the {@link
-android.os.Binder} thread pool as a normal remote call. If "oneway" is used with a local call,
-there is no impact and the call is still synchronous.</li>
-</ul>
-
-
-<h2 id="Defining">Defining an AIDL Interface</h2>
-
-<p>You must define your AIDL interface in an {@code .aidl} file using the Java
-programming language syntax, then save it in the source code (in the {@code src/} directory) of both
-the application hosting the service and any other application that will bind to the service.</p>
-
-<p>When you build the projects containing the {@code .aidl} file, the Android SDK tools generate an
-{@link android.os.IBinder} class based on your AIDL interface (and saves the file in the {@code
-gen/} directory). This class defines the APIs you can call to perform RPC as an interface—you
-must implement the interface in your service.</p>
-
-<p>To create a bounded service using AIDL, follow these steps:</p>
-<ol>
- <li><a href="#CreateAidl">Create the .aidl file</a>
- <p>This file defines the programming interface with method signatures.</p>
- </li>
- <li><a href="#ImplementTheInterface">Implement the interface</a>
- <p>The Android SDK tools generate an interface in the Java programming language, based on your
-{@code .aidl} file. This interface has an inner abstract class named {@code Stub} that extends
-{@link android.os.Binder} and implements methods from your AIDL interface. You must extend the
-{@code Stub} class and implement the methods.</p>
- </li>
- <li><a href="#ExposeTheInterface">Expose the interface to clients</a>
- <p>Implement a {@link android.app.Service Service} and override {@link
-android.app.Service#onBind onBind()} to return your implementation of the {@code Stub}
-class.</p>
- </li>
-</ol>
-
-<p class="caution"><strong>Caution:</strong> Any changes that you make to your AIDL interface after
-your first release must remain backward compatible in order to avoid breaking other applications
-that use your service. That is, because your {@code .aidl} file must be copied to other applications
-in order for them to access your service's interface, you must maintain support for the original
-interface.</p>
-
-
-<h3 id="CreateAidl">1. Create the .aidl file</h3>
-
-<p>AIDL uses a simple syntax that lets you declare an interface with one or more methods that can
-take parameters and return values. The parameters and return values can be of any type, even other
-AIDL-generated interfaces.</p>
-
-<p>The syntax for the {@code .aidl} file uses the Java programming language. The file defines a
-single interface and requires only the interface declaration and method signatures.</p>
-
-<p>By default, AIDL supports the following data types:</p>
-
-<ul>
- <li>All primitive types in the Java programming language ({@code int}, {@code long}, {@code
-char}, {@code boolean}, etc.)</li>
- <li>{@link java.lang.String}</li>
- <li>{@link java.lang.CharSequence}</li>
- <li>{@link java.util.List}
- <p>All elements in the {@link java.util.List} must be one of the supported data types in this
-list or one of the other AIDL-generated interfaces or parcelables you've declared. A {@link
-java.util.List} may optionally be used as a "generic" class (e.g. <code>List<String></code>).
-The actual concrete class that the other side will receive will always be an {@link
-java.util.ArrayList}, although the method will be generated to use the {@link
-java.util.List} interface.</p>
- </li>
- <li>{@link java.util.Map}
- <p>All elements in the {@link java.util.Map} must be one of the supported data types in this
-list or one of the other AIDL-generated interfaces or parcelables you've declared. Generic maps,
-(such as those of the form
-{@code Map<String,Integer>} are not supported. The actual concrete class that the other side
-will receive will always be a {@link java.util.HashMap}, although the method will be generated to
-use the {@link java.util.Map} interface.</p>
- </li>
-</ul>
-
-<p>You must include an {@code import} statement for each additional type not listed above, even if
-they are defined in the same package as your interface.</p>
-
-<p>When defining methods for your service interface, be aware that:</p>
-<ul>
- <li>Methods can take zero or more parameters, and return a value or void.</li>
- <li>All non-primitive parameters require a directional tag indicating which way the data will go.
-Either <code>in</code>, <code>out</code>, or <code>inout</code> (see the example below).
- <p>Primitives are <code>in</code> by default, and cannot be otherwise.</p>
- <p class="caution"><strong>Caution:</strong> You should limit the direction to what is truly
-needed, because marshalling parameters is expensive.</p></li>
- <li>All code comments included in the {@code .aidl} file are included in the generated {@link
-android.os.IBinder} interface (except for comments before the import and package
-statements).</li>
-</ul>
-
-<p>Here is an example {@code .aidl} file:</p>
-
-<pre>
-// IRemoteService.aidl
-package com.example.android;
-
-// Declare any non-default types here with import statements
-
-/** Example service interface */
-interface IRemoteService {
- /** Request the process ID of this service, to do evil things with it. */
- int getPid();
-
- /** Demonstrates some basic types that you can use as parameters
- * and return values in AIDL.
- */
- void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
- double aDouble, String aString);
-}
-</pre>
-
-<p>Simply save your {@code .aidl} file in your project's {@code src/} directory and when you
-build your application, the SDK tools will generate the binder class file in your project's
-{@code gen/} directory. The generated file name matches the {@code .aidl} file name, but with a
-{@code .java} extension (for example, {@code IRemoteService.aidl} results in {@code
-IRemoteService.java}).</p>
-
-<p>If you use Eclipse, the incremental build generates the binder class almost immediately. If you
-do not use Eclipse, then the Ant tool generates the binder class next time you build your
-application—you should build your project with <code>ant debug</code> (or <code>ant
-release</code>) as soon as you're finished writing the {@code .aidl} file, so that your code can
-link against the generated class.</p>
-
-
-<h3 id="ImplementTheInterface">2. Implement the interface</h3>
-
-<p>When you build your application, the Android SDK tools generate a {@code .java} interface file
-named after your {@code .aidl} file. The generated interface includes a subclass named {@code Stub}
-that is an abstract implementation of its parent interface (for example, {@code
-YourInterface.Stub}) and declares all the methods from the {@code .aidl} file.</p>
-
-<p class="note"><strong>Note:</strong> {@code Stub} also
-defines a few helper methods, most notably {@code asInterface()}, which takes an {@link
-android.os.IBinder} (usually the one passed to a client's {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method) and
-returns an instance of the stub interface. See the section <a href="#calling">Calling an IPC
-Method</a> for more details on how to make this cast.</p></p>
-
-<p>To implement the interface generated from the {@code .aidl}, extend the generated {@link
-android.os.Binder} interface (for example, {@code YourInterface.Stub}) and implement the methods
-inherited from the {@code .aidl} file.</p>
-
-<p>Here is an example implementation of an interface called {@code IRemoteService} (defined by the
-{@code IRemoteService.aidl} example, above) using an anonymous instance:</p>
-
-<pre>
-private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
- public int getPid(){
- return Process.myPid();
- }
- public void basicTypes(int anInt, long aLong, boolean aBoolean,
- float aFloat, double aDouble, String aString) {
- // Does nothing
- }
-};
-</pre>
-
-<p>Now the {@code mBinder} is an instance of the {@code Stub} class (a {@link android.os.Binder}),
-which defines the RPC interface for the service. In the next step, this instance is exposed to
-clients so they can interact with the service.</p>
-
-<p>There are a few rules you should be aware of when implementing your AIDL interface: </p>
-<ul>
- <li>Incoming calls are not guaranteed to be executed on the main thread, so you need to think
-about multithreading from the start and properly build your service to be thread-safe.</li>
- <li>By default, RPC calls are synchronous. If you know that the service takes more than a few
-milliseconds to complete a request, you should not call it from the activity's main thread, because
-it might hang the application (Android might display an "Application is Not Responding"
-dialog)—you should usually call them from a separate thread in the client. </li>
- <li>No exceptions that you throw are sent back to the caller.</li>
- <li>Only methods are supported; you cannot expose static fields in AIDL.</li>
-</ul>
-
-
-<h3 id="ExposeTheInterface">3. Expose the interface to clients</h3>
-
-<p>Once you've implemented the interface for your service, you need to expose it to
-clients so they can bind to it. To expose the interface
-for your service, extend {@link android.app.Service Service} and implement {@link
-android.app.Service#onBind onBind()} to return an instance of your class that implements
-the generated {@code Stub} (as discussed in the previous section). Here's an example
-service that exposes the {@code IRemoteService} example interface to clients. </p>
-
-<pre>
-public class RemoteService extends Service {
- @Override
- public void onCreate() {
- super.onCreate();
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- // Return the interface
- return mBinder;
- }
-
- private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
- public int getPid(){
- return Process.myPid();
- }
- public void basicTypes(int anInt, long aLong, boolean aBoolean,
- float aFloat, double aDouble, String aString) {
- // Does nothing
- }
- };
-}
-</pre>
-
-<p>Now, when a client (such as an activity) calls {@link android.content.Context#bindService
-bindService()} to connect to this service, the client's {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback receives the
-{@code mBinder} instance returned by the service's {@link android.app.Service#onBind onBind()}
-method.</p>
-
-<p>The client must also have access to the interface class, so if the client and service are in
-separate applications, then the client's application must have a copy of the {@code .aidl} file
-in its {@code src/} directory (which generates the {@code android.os.Binder}
-interface—providing the client access to the AIDL methods).</p>
-
-<p>When the client receives the {@link android.os.IBinder} in the {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback, it must call
-<code><em>YourServiceInterface</em>.Stub.asInterface(service)</code> to cast the returned
-parameter to <code><em>YourServiceInterface</em></code> type. For example:</p>
-
-<pre>
-IRemoteService mIRemoteService;
-private ServiceConnection mConnection = new ServiceConnection() {
- // Called when the connection with the service is established
- public void onServiceConnected(ComponentName className, IBinder service) {
- // Following the example above for an AIDL interface,
- // this gets an instance of the IRemoteInterface, which we can use to call on the service
- mIRemoteService = IRemoteService.Stub.asInterface(service);
- }
-
- // Called when the connection with the service disconnects unexpectedly
- public void onServiceDisconnected(ComponentName className) {
- Log.e(TAG, "onServiceDisconnected");
- }
-};
-</pre>
-
-<p>For more sample code, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
-RemoteService.java}</a> class in <a
-href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
-
-
-
-
-
-
-
-
-<h2 id="PassingObjects">Passing Objects over IPC</h2>
-
-<p>If you have a class that you would like to send from one process to another through
-an IPC interface, you can do that. However, you must ensure that the code for your class is
-available to the other side of the IPC and the class must support the {@link
-android.os.Parcelable} interface, in order for the objects to be decomposed into primitives and
-marshalled across processes by the Android system.</p>
-
-<p>There are five parts to making a class support the {@link android.os.Parcelable} protocol:</b>
-<ol>
-<li>Make your class implement the {@link android.os.Parcelable} interface.</li>
-<li>Implement {@link android.os.Parcelable#writeToParcel writeToParcel}, which takes the
-current state of the object and writes it to a {@link android.os.Parcel}.</li>
-<li>Add a static field called <code>CREATOR</code> to your class which is an object implementing
-the {@link android.os.Parcelable.Creator Parcelable.Creator} interface.</li>
-<li>Finally, create an {@code .aidl} file that declares your parcelable class (as shown for the
-{@code Rect.aidl} file, below).
- <p>If you are using a custom build process, do <em>not</em> add the {@code .aidl} file to your
-build. Similar to a header file in the C language, this {@code .aidl} file isn't compiled.</p></li>
-</ol>
-
-<p>AIDL will use these methods and fields in the code it generates to marshall and unmarshall
-your objects.</p>
-
-<p>For example, here is a {@code Rect.aidl} file to create a {@code Rect} class that's
-parcelable:</p>
-
-<pre>
-package android.graphics;
-
-// Declare Rect so AIDL can find it and knows that it implements
-// the parcelable protocol.
-parcelable Rect;
-</pre>
-
-<p>And here is an example of how the {@link android.graphics.Rect} class implements the
-{@link android.os.Parcelable} protocol.</p>
-
-<pre>
-import android.os.Parcel;
-import android.os.Parcelable;
-
-public final class Rect implements Parcelable {
- public int left;
- public int top;
- public int right;
- public int bottom;
-
- public static final Parcelable.Creator<Rect> CREATOR = new
-Parcelable.Creator<Rect>() {
- public Rect createFromParcel(Parcel in) {
- return new Rect(in);
- }
-
- public Rect[] newArray(int size) {
- return new Rect[size];
- }
- };
-
- public Rect() {
- }
-
- private Rect(Parcel in) {
- readFromParcel(in);
- }
-
- public void writeToParcel(Parcel out) {
- out.writeInt(left);
- out.writeInt(top);
- out.writeInt(right);
- out.writeInt(bottom);
- }
-
- public void readFromParcel(Parcel in) {
- left = in.readInt();
- top = in.readInt();
- right = in.readInt();
- bottom = in.readInt();
- }
-}
-</pre>
-
-<p>The marshalling in the {@code Rect} class is pretty simple. Take a look at the other
-methods on {@link android.os.Parcel} to see the other kinds of values you can write
-to a Parcel.</p>
-
-<p class="warning"><strong>Warning:</strong> Don't forget the security implications of receiving
-data from other processes. In this case, the {@code Rect} will read four numbers from the {@link
-android.os.Parcel}, but it is up to you to ensure that these are within the acceptable range of
-values for whatever the caller is trying to do. See <a
-href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> for more
-information about how to keep your application secure from malware.</p>
-
diff --git a/docs/html/guide/topics/clipboard/copy-paste.jd b/docs/html/guide/topics/clipboard/copy-paste.jd
new file mode 100644
index 0000000..6c86f47
--- /dev/null
+++ b/docs/html/guide/topics/clipboard/copy-paste.jd
@@ -0,0 +1,1094 @@
+page.title=Copy and Paste
+@jd:body
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>Quickview</h2>
+ <ul>
+ <li>
+ A clipboard-based framework for copying and pasting data.
+ </li>
+ <li>
+ Supports both simple and complex data, including text strings, complex data
+ structures, text and binary stream data, and application assets.
+ </li>
+ <li>
+ Copies and pastes simple text directly to and from the clipboard.
+ </li>
+ <li>
+ Copies and pastes complex data using a content provider.
+ </li>
+ <li>
+ Requires API 11.
+ </li>
+ </ul>
+ <h2>In this document</h2>
+ <ol>
+ <li>
+ <a href="#Clipboard">The Clipboard Framework</a>
+ </li>
+ <li>
+ <a href="#ClipboardClasses">Clipboard Classes</a>
+ <ol>
+ <li>
+ <a href="#ClipboardManager">ClipboardManager</a>
+ </li>
+ <li>
+ <a href="#ClipClasses">
+ ClipData, ClipDescription, and ClipData.Item
+ </a>
+ </li>
+ <li>
+ <a href="#ClipDataMethods">ClipData convenience methods</a>
+ </li>
+ <li>
+ <a href="#CoerceToText">Coercing the clipboard data to text</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#Copying">Copying to the Clipboard</a>
+ </li>
+ <li>
+ <a href="#Pasting">Pasting from the Clipboard</a>
+ <ol>
+ <li>
+ <a href="#PastePlainText">Pasting plain text</a>
+ </li>
+ <li>
+ <a href="#PasteContentUri">Pasting data from a content URI</a>
+ </li>
+ <li>
+ <a href="#PasteIntent">Pasting an Intent</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#Provider">Using Content Providers to Copy Complex Data</a>
+ <ol>
+ <li>
+ <a href="#Encoding">Encoding an identifier on the URI</a>
+ </li>
+ <li>
+ <a href="#Records">Copying data structures</a>
+ </li>
+ <li>
+ <a href="#Streams">Copying data streams</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#DataDesign">Designing Effective Copy/Paste Functionality</a>
+ </li>
+ </ol>
+ <h2>Key classes</h2>
+ <ol>
+ <li>
+ {@link android.content.ClipboardManager ClipboardManager}
+ </li>
+ <li>
+ {@link android.content.ClipData ClipData}
+ </li>
+ <li>
+ {@link android.content.ClipData.Item ClipData.Item}
+ </li>
+ <li>
+ {@link android.content.ClipDescription ClipDescription}
+ </li>
+ <li>
+ {@link android.net.Uri Uri}
+ </li>
+ <li>
+ {@link android.content.ContentProvider}
+ </li>
+ <li>
+ {@link android.content.Intent Intent}
+ </li>
+ </ol>
+ <h2>Related Samples</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}resources/samples/NotePad/index.html">
+ Note Pad sample application</a>
+ </li>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
+ </li>
+ </ol>
+ </div>
+</div>
+<p>
+ Android provides a powerful clipboard-based framework for copying and pasting. It
+ supports both simple and complex data types, including text strings, complex data
+ structures, text and binary stream data, and even application assets. Simple text data is stored
+ directly in the clipboard, while complex data is stored as a reference that the pasting
+ application resolves with a content provider. Copying and pasting works both within an
+ application and between applications that implement the framework.
+</p>
+
+<p>
+ Since a part of the framework uses content providers, this topic assumes some
+ familiarity with the Android Content Provider API, which is described in the topic
+ <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
+</p>
+<h2 id="Clipboard">The Clipboard Framework</h2>
+<p>
+ When you use the clipboard framework, you put data into a clip object, and then
+ put the clip object on the system-wide clipboard. The clip object can take one of three forms:
+</p>
+ <dl>
+ <dt>Text</dt>
+ <dd>
+ A text string. You put the string directly into the clip object, which you then put onto
+ the clipboard. To paste the string, you get the clip object from the clipboard and copy
+ the string to into your application's storage.
+ </dd>
+ <dt>URI</dt>
+ <dd>
+ A {@link android.net.Uri} object representing any form of URI. This is primarily for
+ copying complex data from a content provider. To copy data, you put a
+ {@link android.net.Uri} object into a clip object and put the clip object onto
+ the clipboard. To paste the data, you get the clip object, get the
+ {@link android.net.Uri} object, resolve it to a data source such as a content provider,
+ and copy the data from the source into your application's storage.
+ </dd>
+ <dt>Intent</dt>
+ <dd>
+ An {@link android.content.Intent}. This supports copying application shortcuts. To copy
+ data, you create an Intent, put it into a clip object, and put the clip object onto the
+ clipboard. To paste the data, you get the clip object and then copy the Intent object
+ into your application's memory area.
+ </dd>
+ </dl>
+<p>
+ The clipboard holds only one clip object at a time. When an application puts a clip object on
+ the clipboard, the previous clip object disappears.
+</p>
+<p>
+ If you want to allow users to paste data into your application, you don't have to handle all
+ types of data. You can examine the data on the clipboard before you give users the option to
+ paste it. Besides having a certain data form, the clip object also contains metadata that tells
+ you what MIME type or types are available. This metadata helps you decide if your application
+ can do something useful with the clipboard data. For example, if you have an application that
+ primarily handles text you may want to ignore clip objects that contain a URI or Intent.
+</p>
+<p>
+ You may also want to allow users to paste text regardless of the form of data on the
+ clipboard. To do this, you can force the clipboard data into a text representation, and then
+ paste this text. This is described in the section <a href="#CoerceToText">Coercing the
+ clipboard to text</a>.
+</p>
+<h2 id="ClipboardClasses">Clipboard Classes</h2>
+<p>
+ This section describes the classes used by the clipboard framework.
+</p>
+<h3 id="ClipboardManager">ClipboardManager</h3>
+<p>
+ In the Android system, the system clipboard is represented by the global
+ {@link android.content.ClipboardManager} class. You do not instantiate this
+ class directly; instead, you get a reference to it by invoking
+ {@link android.content.Context#getSystemService(String) getSystemService(CLIPBOARD_SERVICE)}.
+</p>
+<h3 id="ClipClasses">ClipData, ClipData.Item, and ClipDescription</h3>
+<p>
+ To add data to the clipboard, you create a {@link android.content.ClipData} object that
+ contains both a description of the data and the data itself. The clipboard holds only one
+ {@link android.content.ClipData} at a time. A {@link android.content.ClipData} contains a
+ {@link android.content.ClipDescription} object and one or more
+ {@link android.content.ClipData.Item} objects.
+</p>
+<p>
+ A {@link android.content.ClipDescription} object contains metadata about the clip. In
+ particular, it contains an array of available MIME types for the clip's data. When you put a
+ clip on the clipboard, this array is available to pasting applications, which can examine it to
+ see if they can handle any of available the MIME types.
+</p>
+<p>
+ A {@link android.content.ClipData.Item} object contains the text, URI, or Intent data:
+</p>
+<dl>
+ <dt>Text</dt>
+ <dd>
+ A {@link java.lang.CharSequence}.
+ </dd>
+ <dt>URI</dt>
+ <dd>
+ A {@link android.net.Uri}. This usually contains a content provider URI, although any
+ URI is allowed. The application that provides the data puts the URI on the clipboard.
+ Applications that want to paste the data get the URI from the clipboard and use it to
+ access the content provider (or other data source) and retrieve the data.
+ </dd>
+ <dt>Intent</dt>
+ <dd>
+ An {@link android.content.Intent}. This data type allows you to copy an application shortcut
+ to the clipboard. Users can then paste the shortcut into their applications for later use.
+ </dd>
+</dl>
+<p>
+ You can add more than one {@link android.content.ClipData.Item} object to a clip. This allows
+ users to copy and paste multiple selections as a single clip. For example, if you have a list
+ widget that allows the user to select more than one item at a time, you can copy all the items
+ to the clipboard at once. To do this, you create a separate
+ {@link android.content.ClipData.Item} for each list item, and then you add the
+ {@link android.content.ClipData.Item} objects to the {@link android.content.ClipData} object.
+</p>
+<h3 id="ClipDataMethods">ClipData convenience methods</h3>
+<p>
+ The {@link android.content.ClipData} class provides static convenience methods for creating
+ a {@link android.content.ClipData} object with a single {@link android.content.ClipData.Item}
+ object and a simple {@link android.content.ClipDescription} object:
+</p>
+<dl>
+ <dt>
+{@link android.content.ClipData#newPlainText(CharSequence,CharSequence) newPlainText(label, text)}
+ </dt>
+ <dd>
+ Returns a {@link android.content.ClipData} object whose single
+ {@link android.content.ClipData.Item} object contains a text string. The
+ {@link android.content.ClipDescription} object's label is set to <code>label</code>.
+ The single MIME type in {@link android.content.ClipDescription} is
+ {@link android.content.ClipDescription#MIMETYPE_TEXT_PLAIN}.
+ <p>
+ Use
+{@link android.content.ClipData#newPlainText(CharSequence,CharSequence) newPlainText()}
+ to create a clip from a text string.
+ </dd>
+ <dt>
+{@link android.content.ClipData#newUri(ContentResolver, CharSequence, Uri) newUri(resolver, label, URI)}
+ </dt>
+ <dd>
+ Returns a {@link android.content.ClipData} object whose single
+ {@link android.content.ClipData.Item} object contains a URI. The
+ {@link android.content.ClipDescription} object's label is set to <code>label</code>.
+ If the URI is a content URI ({@link android.net.Uri#getScheme() Uri.getScheme()} returns
+ <code>content:</code>), the method uses the {@link android.content.ContentResolver} object
+ provided in <code>resolver</code> to retrieve the available MIME types from the
+ content provider and store them in {@link android.content.ClipDescription}. For a URI that
+ is not a <code>content:</code> URI, the method sets the MIME type to
+ {@link android.content.ClipDescription#MIMETYPE_TEXT_URILIST}.
+ <p>
+ Use
+{@link android.content.ClipData#newUri(ContentResolver, CharSequence, Uri) newUri()}
+ to create a clip from a URI, particularly a <code>content:</code> URI.
+ </p>
+ </dd>
+ <dt>
+ {@link android.content.ClipData#newIntent(CharSequence, Intent) newIntent(label, intent)}
+ </dt>
+ <dd>
+ Returns a {@link android.content.ClipData} object whose single
+ {@link android.content.ClipData.Item} object contains an {@link android.content.Intent}.
+ The {@link android.content.ClipDescription} object's label is set to <code>label</code>.
+ The MIME type is set to {@link android.content.ClipDescription#MIMETYPE_TEXT_INTENT}.
+ <p>
+ Use
+{@link android.content.ClipData#newIntent(CharSequence, Intent) newIntent()}
+ to create a clip from an Intent object.
+ </dd>
+</dl>
+<h3 id="CoerceToText">Coercing the clipboard data to text</h3>
+<p>
+ Even if your application only handles text, you can copy non-text data from the
+ clipboard by converting it with the method
+ {@link android.content.ClipData.Item#coerceToText(Context) ClipData.Item.coerceToText()}.
+</p>
+<p>
+ This method converts the data in {@link android.content.ClipData.Item} to text and
+ returns a {@link java.lang.CharSequence}. The value that
+ {@link android.content.ClipData.Item#coerceToText(Context) ClipData.Item.coerceToText()}
+ returns is based on the form of data in {@link android.content.ClipData.Item}:
+</p>
+<dl>
+ <dt><em>Text</em></dt>
+ <dd>
+ If {@link android.content.ClipData.Item} is text
+ ({@link android.content.ClipData.Item#getText()} is not null),
+ {@link android.content.ClipData.Item#coerceToText(Context) coerceToText()} returns the
+ text.
+ </dd>
+ <dt><em>URI</em></dt>
+ <dd>
+ If {@link android.content.ClipData.Item} is a URI
+ ({@link android.content.ClipData.Item#getUri()} is not null),
+ {@link android.content.ClipData.Item#coerceToText(Context) coerceToText()} tries to use
+ it as a content URI:
+ <ul>
+ <li>
+ If the URI is a content URI and the provider can return a text stream,
+ {@link android.content.ClipData.Item#coerceToText(Context) coerceToText()} returns
+ a text stream.
+ </li>
+ <li>
+ If the URI is a content URI but the provider does not offer a text stream,
+ {@link android.content.ClipData.Item#coerceToText(Context) coerceToText()} returns
+ a representation of the URI. The representation is the same as that returned by
+ {@link android.net.Uri#toString() Uri.toString()}.
+ </li>
+ <li>
+ If the URI is not a content URI,
+ {@link android.content.ClipData.Item#coerceToText(Context) coerceToText()} returns
+ a representation of the URI. The representation is the same as that returned by
+ {@link android.net.Uri#toString() Uri.toString()}.
+ </li>
+ </ul>
+ </dd>
+ <dt><em>Intent</em></dt>
+ <dd>
+ If {@link android.content.ClipData.Item} is an Intent
+ ({@link android.content.ClipData.Item#getIntent()} is not null),
+ {@link android.content.ClipData.Item#coerceToText(Context) coerceToText()} converts it to
+ an Intent URI and returns it. The representation is the same as that returned by
+ {@link android.content.Intent#toUri(int) Intent.toUri(URI_INTENT_SCHEME)}.
+ </dd>
+</dl>
+<p>
+ The clipboard framework is summarized in Figure 1. To copy data, an application puts a
+ {@link android.content.ClipData} object on the {@link android.content.ClipboardManager} global
+ clipboard. The {@link android.content.ClipData} contains one or more
+ {@link android.content.ClipData.Item} objects and one
+ {@link android.content.ClipDescription} object. To paste data, an application gets the
+ {@link android.content.ClipData}, gets its MIME type from the
+ {@link android.content.ClipDescription}, and gets the data either from
+ the {@link android.content.ClipData.Item} or from the content provider referred to by
+ {@link android.content.ClipData.Item}.
+</p>
+ <a name="framework"></a>
+ <img
+ src="{@docRoot}images/ui/clipboard/copy_paste_framework.png"
+ alt="A block diagram of the copy and paste framework" height="400px" id="figure1" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> The Android clipboard framework
+</p>
+<h2 id="Copying">Copying to the Clipboard</h2>
+<p>
+ As described previously, to copy data to the clipboard you get a handle to the global
+ {@link android.content.ClipboardManager} object, create a {@link android.content.ClipData}
+ object, add a {@link android.content.ClipDescription} and one or more
+ {@link android.content.ClipData.Item} objects to it, and add the finished
+ {@link android.content.ClipData} object to the {@link android.content.ClipboardManager} object.
+ This is described in detail in the following procedure:
+</p>
+<ol>
+ <li>
+ If you are copying data using a content URI, set up a content
+ provider.
+ <p>
+ The <a href="{@docRoot}resources/samples/NotePad/index.html">
+ Note Pad</a> sample application is an example of using a content provider for
+ copying and pasting. The
+<a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html">
+ NotePadProvider</a> class implements the content provider. The
+<a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NotePad.html">
+ NotePad</a> class defines a contract between the provider and other applications,
+ including the supported MIME types.
+ </p>
+ </li>
+ <li>
+ Get the system clipboard:
+<pre>
+
+...
+
+// if the user selects copy
+case R.id.menu_copy:
+
+// Gets a handle to the clipboard service.
+ClipboardManager clipboard = (ClipboardManager)
+ getSystemService(Context.CLIPBOARD_SERVICE);
+</pre>
+ </li>
+ <li>
+ <p>
+ Copy the data to a new {@link android.content.ClipData} object:
+ </p>
+ <ul>
+ <li>
+ <h4>For text</h4>
+<pre>
+// Creates a new text clip to put on the clipboard
+ClipData clip = ClipData.newPlainText("simple text","Hello, World!");
+</pre>
+ </li>
+ <li>
+ <h4>For a URI</h4>
+ <p>
+ This snippet constructs a URI by encoding a record ID onto the content URI
+ for the provider. This technique is covered in more detail
+ in the section <a href="#Encoding">Encoding an identifier on the URI</a>:
+ </p>
+<pre>
+// Creates a Uri based on a base Uri and a record ID based on the contact's last name
+// Declares the base URI string
+private static final String CONTACTS = "content://com.example.contacts";
+
+// Declares a path string for URIs that you use to copy data
+private static final String COPY_PATH = "/copy";
+
+// Declares the Uri to paste to the clipboard
+Uri copyUri = Uri.parse(CONTACTS + COPY_PATH + "/" + lastName);
+
+...
+
+// Creates a new URI clip object. The system uses the anonymous getContentResolver() object to
+// get MIME types from provider. The clip object's label is "URI", and its data is
+// the Uri previously created.
+ClipData clip = ClipData.newUri(getContentResolver(),"URI",copyUri);
+</pre>
+ </li>
+ <li>
+ <h4>For an Intent</h4>
+ <p>
+ This snippet constructs an Intent for an application
+ and then puts it in the clip object:
+ </p>
+<pre>
+// Creates the Intent
+Intent appIntent = new Intent(this, com.example.demo.myapplication.class);
+
+...
+
+// Creates a clip object with the Intent in it. Its label is "Intent" and its data is
+// the Intent object created previously
+ClipData clip = ClipData.newIntent("Intent",appIntent);
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>
+ Put the new clip object on the clipboard:
+<pre>
+// Set the clipboard's primary clip.
+clipboard.setPrimaryClip(clip);
+</pre>
+ </li>
+</ol>
+<h2 id="Pasting">Pasting from the Clipboard</h2>
+<p>
+ As described previously, you paste data from the clipboard by getting the global clipboard
+ object, getting the clip object, looking at its data, and if possible copying the data from
+ the clip object to your own storage. This section describes in detail how to do this for
+ the three forms of clipboard data.
+</p>
+<h3 id="PastePlainText">Pasting plain text</h3>
+<p>
+ To paste plain text, first get the global clipboard and verify that it can return plain text.
+ Then get the clip object and copy its text to your own storage using
+ {@link android.content.ClipData.Item#getText()}, as described in the following procedure:
+</p>
+<ol>
+ <li>
+ Get the global {@link android.content.ClipboardManager} object using
+ {@link android.content.Context#getSystemService(String) getSystemService(CLIPBOARD_SERVICE)}. Also
+ declare a global variable to contain the pasted text:
+<pre>
+ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+
+String pasteData = "";
+
+</pre>
+ </li>
+ <li>
+ Next, determine if you should enable or disable the "paste" option in the
+ current Activity. You should verify that the clipboard contains a clip and that you
+ can handle the type of data represented by the clip:
+<pre>
+// Gets the ID of the "paste" menu item
+MenuItem mPasteItem = menu.findItem(R.id.menu_paste);
+
+// If the clipboard doesn't contain data, disable the paste menu item.
+// If it does contain data, decide if you can handle the data.
+if (!(clipboard.hasPrimaryClip())) {
+
+ mPasteItem.setEnabled(false);
+
+ } else if (!(clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))) {
+
+ // This disables the paste menu item, since the clipboard has data but it is not plain text
+ mPasteItem.setEnabled(false);
+ } else {
+
+ // This enables the paste menu item, since the clipboard contains plain text.
+ mPasteItem.setEnabled(true);
+ }
+}
+</pre>
+ </li>
+ <li>
+ Copy the data from the clipboard. This point in the program is only reachable if the
+ "paste" menu item is enabled, so you can assume that the clipboard contains
+ plain text. You do not yet know if it contains a text string or a URI that points to plain
+ text. The following snippet tests this, but it only shows the code for handling plain text:
+<pre>
+// Responds to the user selecting "paste"
+case R.id.menu_paste:
+
+// Examines the item on the clipboard. If getText() does not return null, the clip item contains the
+// text. Assumes that this application can only handle one item at a time.
+ ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
+
+// Gets the clipboard as text.
+pasteData = item.getText();
+
+// If the string contains data, then the paste operation is done
+if (pasteData != null) {
+ return;
+
+// The clipboard does not contain text. If it contains a URI, attempts to get data from it
+} else {
+ Uri pasteUri = item.getUri();
+
+ // If the URI contains something, try to get text from it
+ if (pasteUri != null) {
+
+ // calls a routine to resolve the URI and get data from it. This routine is not
+ // presented here.
+ pasteData = resolveUri(Uri);
+ return;
+ } else {
+
+ // Something is wrong. The MIME type was plain text, but the clipboard does not contain either
+ // text or a Uri. Report an error.
+ Log.e("Clipboard contains an invalid data type");
+ return;
+ }
+}
+</pre>
+ </li>
+</ol>
+<h3 id="PasteContentUri">Pasting data from a content URI</h3>
+<p>
+ If the {@link android.content.ClipData.Item} object contains a content URI and you
+ have determined that you can handle one of its MIME types, create a
+ {@link android.content.ContentResolver} and then call the appropriate content provider
+ method to retrieve the data.
+</p>
+<p>
+ The following procedure describes how to get data from a content provider based on a
+ content URI on the clipboard. It checks that a MIME type that the application can use
+ is available from the provider:
+</p>
+<ol>
+ <li>
+ Declare a global variable to contain the MIME type:
+<pre>
+// Declares a MIME type constant to match against the MIME types offered by the provider
+public static final String MIME_TYPE_CONTACT = "vnd.android.cursor.item/vnd.example.contact"
+</pre>
+ </li>
+ <li>
+ Get the global clipboard. Also get a content resolver so you can access the content
+ provider:
+<pre>
+// Gets a handle to the Clipboard Manager
+ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+
+// Gets a content resolver instance
+ContentResolver cr = getContentResolver();
+</pre>
+ </li>
+ <li>
+ Get the primary clip from the clipboard, and get its contents as a URI:
+<pre>
+// Gets the clipboard data from the clipboard
+ClipData clip = clipboard.getPrimaryClip();
+
+if (clip != null) {
+
+ // Gets the first item from the clipboard data
+ ClipData.Item item = clip.getItemAt(0);
+
+ // Tries to get the item's contents as a URI
+ Uri pasteUri = item.getUri();
+</pre>
+ </li>
+ <li>
+ Test to see if the URI is a content URI by calling
+ {@link android.content.ContentResolver#getType(Uri) getType(Uri)}. This method returns
+ null if <code>Uri</code> does not point to a valid content provider:
+<pre>
+ // If the clipboard contains a URI reference
+ if (pasteUri != null) {
+
+ // Is this a content URI?
+ String uriMimeType = cr.getType(pasteUri);
+</pre>
+ </li>
+ <li>
+ Test to see if the content provider supports a MIME type that the current application
+ understands. If it does, call
+ {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
+ ContentResolver.query()} to get the data. The return value is a
+ {@link android.database.Cursor}:
+<pre>
+ // If the return value is not null, the Uri is a content Uri
+ if (uriMimeType != null) {
+
+ // Does the content provider offer a MIME type that the current application can use?
+ if (uriMimeType.equals(MIME_TYPE_CONTACT)) {
+
+ // Get the data from the content provider.
+ Cursor pasteCursor = cr.query(uri, null, null, null, null);
+
+ // If the Cursor contains data, move to the first record
+ if (pasteCursor != null) {
+ if (pasteCursor.moveToFirst()) {
+
+ // get the data from the Cursor here. The code will vary according to the
+ // format of the data model.
+ }
+ }
+
+ // close the Cursor
+ pasteCursor.close();
+ }
+ }
+ }
+}
+</pre>
+ </li>
+</ol>
+<h3 id="PasteIntent">Pasting an Intent</h3>
+<p>
+ To paste an Intent, first get the global clipboard. Examine the
+ {@link android.content.ClipData.Item} object to see if it contains an Intent. Then call
+ {@link android.content.ClipData.Item#getIntent()} to copy the Intent to your own storage.
+ The following snippet demonstrates this:
+</p>
+<pre>
+// Gets a handle to the Clipboard Manager
+ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+
+// Checks to see if the clip item contains an Intent, by testing to see if getIntent() returns null
+Intent pasteIntent = clipboard.getPrimaryClip().getItemAt(0).getIntent();
+
+if (pasteIntent != null) {
+
+ // handle the Intent
+
+} else {
+
+ // ignore the clipboard, or issue an error if your application was expecting an Intent to be
+ // on the clipboard
+}
+</pre>
+<h2 id="Provider">Using Content Providers to Copy Complex Data</h2>
+<p>
+ Content providers support copying complex data such as database records or file streams.
+ To copy the data, you put a content URI on the clipboard. Pasting applications then get this
+ URI from the clipboard and use it to retrieve database data or file stream descriptors.
+</p>
+<p>
+ Since the pasting application only has the content URI for your data, it needs to know which
+ piece of data to retrieve. You can provide this information by encoding an identifier for the
+ data on the URI itself, or you can provide a unique URI that will return the data you want to
+ copy. Which technique you choose depends on the organization of your data.
+</p>
+<p>
+ The following sections describe how to set up URIs, how to provide complex data, and how to
+ provide file streams. The descriptions assume that you are familiar with the general principles
+ of content provider design.
+</p>
+<h3 id="Encoding">Encoding an identifier on the URI</h3>
+<p>
+ A useful technique for copying data to the clipboard with a URI is to encode an identifier for
+ the data on the URI itself. Your content provider can then get the identifier from the URI and
+ use it to retrieve the data. The pasting application doesn't have to know that the identifier
+ exists; all it has to do is get your "reference" (the URI plus the identifier) from
+ the clipboard, give it your content provider, and get back the data.
+</p>
+<p>
+ You usually encode an identifier onto a content URI by concatenating it to the end of the URI.
+ For example, suppose you define your provider URI as the following string:
+</p>
+<pre>
+"content://com.example.contacts"
+</pre>
+<p>
+ If you want to encode a name onto this URI, you would use the following snippet:
+</p>
+<pre>
+String uriString = "content://com.example.contacts" + "/" + "Smith"
+
+// uriString now contains content://com.example.contacts/Smith.
+
+// Generates a uri object from the string representation
+Uri copyUri = Uri.parse(uriString);
+</pre>
+<p>
+ If you are already using a content provider, you may want to add a new URI path that indicates
+ the URI is for copying. For example, suppose you already have the following URI paths:
+</p>
+<pre>
+"content://com.example.contacts"/people
+"content://com.example.contacts"/people/detail
+"content://com.example.contacts"/people/images
+</pre>
+<p>
+ You could add another path that is specific to copy URIs:
+</p>
+<pre>
+"content://com.example.contacts/copying"
+</pre>
+<p>
+ You could then detect a "copy" URI by pattern-matching and handle it with code that
+ is specific for copying and pasting.
+</p>
+<p>
+ You normally use the encoding technique if you're already using a content provider, internal
+ database, or internal table to organize your data. In these cases, you have multiple pieces of
+ data you want to copy, and presumably a unique identifier for each piece. In response to a
+ query from the pasting application, you can look up the data by its identifier and return it.
+</p>
+<p>
+ If you don't have multiple pieces of data, then you probably don't need to encode an identifier.
+ You can simply use a URI that is unique to your provider. In response to a query, your provider
+ would return the data it currently contains.
+</p>
+<p>
+ Getting a single record by ID is used in the
+ <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample application to
+ open a note from the notes list. The sample uses the <code>_id</code> field from an SQL
+ database, but you can have any numeric or character identifier you want.
+</p>
+<h3 id="Records">Copying data structures</h3>
+<p>
+ You set up a content provider for copying and pasting complex data as a subclass of the
+ {@link android.content.ContentProvider} component. You should also encode the URI you put on
+ the clipboard so that it points to the exact record you want to provide. In addition, you
+ have to consider the existing state of your application:
+</p>
+<ul>
+ <li>
+ If you already have a content provider, you can add to its functionality. You may only
+ need to modify its
+{@link android.content.ContentResolver#query(Uri, String[], String, String[], String) query()}
+ method to handle URIs coming from applications that want to paste data. You will
+ probably want to modify the method to handle a "copy" URI pattern.
+ </li>
+ <li>
+ If your application maintains an internal database, you may
+ want to move this database into a content provider to facilitate copying from it.
+ </li>
+ <li>
+ If you are not currently using a database, you can implement a simple content provider
+ whose sole purpose is to offer data to applications that are pasting from the
+ clipboard.
+ </li>
+</ul>
+<p>
+In the content provider, you will want to override at least the following methods:
+</p>
+<dl>
+ <dt>
+{@link android.content.ContentResolver#query(Uri, String[], String, String[], String) query()}
+ </dt>
+ <dd>
+ Pasting applications will assume that they can get your data by using this method with
+ the URI you put on the clipboard. To support copying, you should have this method
+ detect URIs that contain a special "copy" path. Your application can then
+ create a "copy" URI to put on the clipboard, containing the copy path and
+ a pointer to the exact record you want to copy.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#getType(Uri) getType()}
+ </dt>
+ <dd>
+ This method should return the MIME type or types for the data you intend to copy. The method
+ {@link android.content.ClipData#newUri(ContentResolver, CharSequence, Uri) newUri()} calls
+ {@link android.content.ContentProvider#getType(Uri) getType()} in order to put the MIME
+ types into the new {@link android.content.ClipData} object.
+ <p>
+ MIME types for complex data are described in the topic
+ <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
+ </p>
+ </dd>
+</dl>
+<p>
+ Notice that you don't have to have any of the other content provider methods such as
+ {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} or
+ {@link android.content.ContentProvider#update(Uri, ContentValues, String, String[]) update()}.
+ A pasting application only needs to get your supported MIME types and copy data from your
+ provider. If you already have these methods, they won't interfere with copy operations.
+</p>
+<p>
+ The following snippets demonsrate how to set up your application to copy complex data:
+</p>
+<ol>
+ <li>
+ <p>
+ In the global constants for your application,
+ declare a base URI string and a path that identifies URI strings you are
+ using to copy data. Also declare a MIME type for the copied data:
+ </p>
+<pre>
+// Declares the base URI string
+private static final String CONTACTS = "content://com.example.contacts";
+
+// Declares a path string for URIs that you use to copy data
+private static final String COPY_PATH = "/copy";
+
+// Declares a MIME type for the copied data
+public static final String MIME_TYPE_CONTACT = "vnd.android.cursor.item/vnd.example.contact"
+</pre>
+ </li>
+ <li>
+ In the Activity from which users copy data,
+ set up the code to copy data to the clipboard. In response to a copy request, put
+ the URI on the clipboard:
+<pre>
+public class MyCopyActivity extends Activity {
+
+ ...
+
+// The user has selected a name and is requesting a copy.
+case R.id.menu_copy:
+
+ // Appends the last name to the base URI
+ // The name is stored in "lastName"
+ uriString = CONTACTS + COPY_PATH + "/" + lastName;
+
+ // Parses the string into a URI
+ Uri copyUri = Uri.parse(uriString);
+
+ // Gets a handle to the clipboard service.
+ ClipboardManager clipboard = (ClipboardManager)
+ getSystemService(Context.CLIPBOARD_SERVICE);
+
+ ClipData clip = ClipData.newUri(getContentResolver(), "URI", copyUri);
+
+ // Set the clipboard's primary clip.
+ clipboard.setPrimaryClip(clip);
+</pre>
+ </li>
+
+ <li>
+ <p>
+ In the global scope of your content provider, create a URI matcher and add a URI
+ pattern that will match URIs you put on the clipboard:
+ </p>
+<pre>
+public class MyCopyProvider extends ContentProvider {
+
+ ...
+
+// A Uri Match object that simplifies matching content URIs to patterns.
+private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+
+// An integer to use in switching based on the incoming URI pattern
+private static final int GET_SINGLE_CONTACT = 0;
+
+...
+
+// Adds a matcher for the content URI. It matches
+// "content://com.example.contacts/copy/*"
+sUriMatcher.addURI(CONTACTS, "names/*", GET_SINGLE_CONTACT);
+</pre>
+ </li>
+ <li>
+ <p>
+ Set up the
+ {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) query()}
+ method. This method can handle different URI patterns, depending on how you code it, but
+ only the pattern for the clipboard copying operation is shown:
+ </p>
+<pre>
+// Sets up your provider's query() method.
+public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ String sortOrder) {
+
+ ...
+
+ // Switch based on the incoming content URI
+ switch (sUriMatcher.match(uri)) {
+
+ case GET_SINGLE_CONTACT:
+
+ // query and return the contact for the requested name. Here you would decode
+ // the incoming URI, query the data model based on the last name, and return the result
+ // as a Cursor.
+
+ ...
+
+}
+</pre>
+ </li>
+ <li>
+ <p>
+ Set up the {@link android.content.ContentProvider#getType(Uri) getType()} method to
+ return an appropriate MIME type for copied data:
+ </p>
+<pre>
+// Sets up your provider's getType() method.
+public String getType(Uri uri) {
+
+ ...
+
+ switch (sUriMatcher.match(uri)) {
+
+ case GET_SINGLE_CONTACT:
+
+ return (MIME_TYPE_CONTACT);
+</pre>
+ </li>
+</ol>
+<p>
+ The section <a href="#PasteContentUri">Pasting data from a content URI</a>
+ describes how to get a content URI from the clipboard and use it to get and paste data.
+</p>
+<h3 id="Streams">Copying data streams</h3>
+<p>
+ You can copy and paste large amounts of text and binary data as streams. The data can have
+ forms such as the following:
+</p>
+ <ul>
+ <li>
+ Files stored on the actual device.
+ </li>
+ <li>
+ Streams from sockets.
+ </li>
+ <li>
+ Large amounts of data stored in a provider's underlying database system.
+ </li>
+ </ul>
+<p>
+ A content provider for data streams provides access to its data with a file descriptor object
+ such as {@link android.content.res.AssetFileDescriptor} instead of a
+ {@link android.database.Cursor} object. The pasting application reads the data stream using
+ this file descriptor.
+</p>
+<p>
+ To set up your application to copy a data stream with a provider, follow these steps:
+</p>
+<ol>
+ <li>
+ Set up a content URI for the data stream you are putting on the clipboard. Options
+ for doing this include the following:
+ <ul>
+ <li>
+ Encode an identifier for the data stream onto the URI,
+ as described in the section
+ <a href="#Encoding">Encoding an identifier on the URI</a>, and then maintain a
+ table in your provider that contains identifiers and the corresponding stream name.
+ </li>
+ <li>
+ Encode the stream name directly on the URI.
+ </li>
+ <li>
+ Use a unique URI that always returns the current stream from the provider. If you
+ use this option, you have to remember to update your provider to point to a
+ different stream whenever you copy the stream to the clipboard via the URI.
+ </li>
+ </ul>
+ </li>
+ <li>
+ Provide a MIME type for each type of data stream you plan to offer. Pasting applications
+ need this information to determine if they can paste the data on the clipboard.
+ </li>
+ <li>
+ Implement one of the {@link android.content.ContentProvider} methods that returns
+ a file descriptor for a stream. If you encode identifiers on the content URI, use this
+ method to determine which stream to open.
+ </li>
+ <li>
+ To copy the data stream to the clipboard, construct the content URI and place it
+ on the clipboard.
+ </li>
+</ol>
+<p>
+ To paste a data stream, an application gets the clip from the clipboard, gets the URI, and
+ uses it in a call to a {@link android.content.ContentResolver} file descriptor method that
+ opens the stream. The {@link android.content.ContentResolver} method calls the corresponding
+ {@link android.content.ContentProvider} method, passing it the content URI. Your provider
+ returns the file descriptor to {@link android.content.ContentResolver} method. The pasting
+ application then has the responsibility to read the data from the stream.
+</p>
+<p>
+ The following list shows the most important file descriptor methods for a content provider.
+ Each of these has a corresponding {@link android.content.ContentResolver} method with the
+ string "Descriptor" appended to the method name; for example, the
+ {@link android.content.ContentResolver} analog of
+ {@link android.content.ContentProvider#openAssetFile(Uri, String) openAssetFile()} is
+{@link android.content.ContentResolver#openAssetFileDescriptor(Uri, String) openAssetFileDescriptor()}:
+</p>
+<dl>
+ <dt>
+{@link android.content.ContentProvider#openTypedAssetFile(Uri,String,Bundle) openTypedAssetFile()}
+ </dt>
+ <dd>
+ This method should return an asset file descriptor, but only if the provided MIME type is
+ supported by the provider. The caller (the application doing the pasting) provides a MIME
+ type pattern. The content provider (of the application that has copied a URI to the
+ clipboard) returns an {@link android.content.res.AssetFileDescriptor} file handle if it
+ can provide that MIME type, or throws an exception if it can not.
+ <p>
+ This method handles subsections of files. You can use it to read assets that the
+ content provider has copied to the clipboard.
+ </p>
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#openAssetFile(Uri, String) openAssetFile()}
+ </dt>
+ <dd>
+ This method is a more general form of
+{@link android.content.ContentProvider#openTypedAssetFile(Uri,String,Bundle) openTypedAssetFile()}.
+ It does not filter for allowed MIME types, but it can read subsections of files.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#openFile(Uri, String) openFile()}
+ </dt>
+ <dd>
+ This is a more general form of
+ {@link android.content.ContentProvider#openAssetFile(Uri, String) openAssetFile()}. It can't
+ read subsections of files.
+ </dd>
+</dl>
+<p>
+ You can optionally use the
+{@link android.content.ContentProvider#openPipeHelper(Uri, String, Bundle, T, ContentProvider.PipeDataWriter) openPipeHelper()}
+ method with your file descriptor method. This allows the pasting application to read the
+ stream data in a background thread using a pipe. To use this method, you need to implement the
+ {@link android.content.ContentProvider.PipeDataWriter} interface. An example of doing this is
+ given in the <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample
+ application, in the <code>openTypedAssetFile()</code> method of
+ <code>NotePadProvider.java</code>.
+</p>
+<h2 id="DataDesign">Designing Effective Copy/Paste Functionality</h2>
+<p>
+ To design effective copy and paste functionality for your application, remember these
+ points:
+</p>
+ <ul>
+ <li>
+ At any time, there is only one clip on the clipboard. A new copy operation by
+ any application in the system overwrites the previous clip. Since the user may
+ navigate away from your application and do a copy before returning, you can't assume
+ that the clipboard contains the clip that the user previously copied in <em>your</em>
+ application.
+ </li>
+ <li>
+ The intended purpose of multiple {@link android.content.ClipData.Item}
+ objects per clip is to support copying and pasting of multiple selections rather than
+ different forms of reference to a single selection. You usually want all of the
+ {@link android.content.ClipData.Item} objects in a clip to have the same form, that is,
+ they should all be simple text, content URI, or {@link android.content.Intent}, but not
+ a mixture.
+ </li>
+ <li>
+ When you provide data, you can offer different MIME representations. Add the MIME types
+ you support to the {@link android.content.ClipDescription}, and then
+ implement the MIME types in your content provider.
+ </li>
+ <li>
+ When you get data from the clipboard, your application is responsible for checking the
+ available MIME types and then deciding which one, if any, to use. Even if there is a
+ clip on the clipboard and the user requests a paste, your application is not required
+ to do the paste. You <em>should</em> do the paste if the MIME type is compatible. You
+ may choose to coerce the data on the clipboard to text using
+ {@link android.content.ClipData.Item#coerceToText(Context) coerceToText()} if you
+ choose. If your application supports more than one of the available MIME types, you can
+ allow the user to choose which one to use.
+ </li>
+ </ul>
diff --git a/docs/html/guide/topics/fundamentals.jd b/docs/html/guide/topics/fundamentals.jd
index 3fdbd95..661f5cb 100644
--- a/docs/html/guide/topics/fundamentals.jd
+++ b/docs/html/guide/topics/fundamentals.jd
@@ -422,7 +422,7 @@
resources. However, you should create specialized layouts for certain screen sizes and provide
specialized images for certain densities, using alternative layout resources, and by declaring in
your manifest exactly which screen sizes your application supports with the <a
-href="{@docRoot}guide/topics/manifest/supports-screens.html">{@code
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
<supports-screens>}</a> element.</p>
<p>For more information, see the <a
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>
@@ -453,7 +453,8 @@
href="{@docRoot}guide/appendix/api-levels.html">API Level</a> (for example, Android 1.0 is API Level
1 and Android 2.3 is API Level 9). If you use any APIs that were added to the platform after
version 1.0, you should declare the minimum API Level in which those APIs were introduced using the
-<a href="{@docRoot}guide/topics/manifest/uses-sdk.html">{@code <uses-sdk>}</a> element.</dd>
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
+element.</dd>
</dl>
<p>It's important that you declare all such requirements for your application, because, when you
diff --git a/docs/html/guide/topics/fundamentals/activities.jd b/docs/html/guide/topics/fundamentals/activities.jd
index 9079ef6..5cc1b45 100644
--- a/docs/html/guide/topics/fundamentals/activities.jd
+++ b/docs/html/guide/topics/fundamentals/activities.jd
@@ -40,7 +40,7 @@
<h2>See also</h2>
<ol>
<li><a href="{@docRoot}resources/tutorials/hello-world.html">Hello World Tutorial</a></li>
- <li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack">Tasks and Back
+ <li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
Stack</a></li>
</ol>
@@ -594,13 +594,14 @@
definition in table 1 might still be killed by the system—but that would happen only in
extreme circumstances when there is no other recourse. When an activity might be killed is
discussed more in the <a
-href="{@docRoot}guide/topics/fundamentals/processes-and-threading.html">Processes and
+href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and
Threading</a> document.</p>
<h3 id="SavingActivityState">Saving activity state</h3>
-<p>The introduction to <a href="Lifecycle">Managing the Activity Lifecycle</a> briefly mentions that
+<p>The introduction to <a href="#Lifecycle">Managing the Activity Lifecycle</a> briefly mentions
+that
when an activity is paused or stopped, the state of the activity is retained. This is true because
the {@link android.app.Activity} object is still held in memory when it is paused or
stopped—all information about its members and current state is still alive. Thus, any changes
diff --git a/docs/html/guide/topics/fundamentals/bound-services.jd b/docs/html/guide/topics/fundamentals/bound-services.jd
index e5d626c..ec7d723 100644
--- a/docs/html/guide/topics/fundamentals/bound-services.jd
+++ b/docs/html/guide/topics/fundamentals/bound-services.jd
@@ -170,7 +170,7 @@
create a bound service, because it may require multithreading capabilities and
can result in a more complicated implementation. As such, AIDL is not suitable for most applications
and this document does not discuss how to use it for your service. If you're certain that you need
-to use AIDL directly, see the <a href="{@docRoot}guide/topics/advanced/aidl.html">AIDL</a>
+to use AIDL directly, see the <a href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a>
document.</p>
@@ -341,7 +341,7 @@
<p>For most applications, the service doesn't need to perform multi-threading, so using a {@link
android.os.Messenger} allows the service to handle one call at a time. If it's important
that your service be multi-threaded, then you should use <a
-href="{@docRoot}guide/topics/advanced/aidl.html">AIDL</a> to define your interface.</p>
+href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a> to define your interface.</p>
</div>
</div>
diff --git a/docs/html/guide/topics/fundamentals/fragments.jd b/docs/html/guide/topics/fundamentals/fragments.jd
index 7ca990e..f780960 100644
--- a/docs/html/guide/topics/fundamentals/fragments.jd
+++ b/docs/html/guide/topics/fundamentals/fragments.jd
@@ -743,7 +743,8 @@
based on the screen configuration.</p>
<p class="note"><strong>Note:</strong> The complete source code for this activity is available in
-<a href="resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code
+<a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code
FragmentLayout.java}</a>.</p>
<p>The main activity applies a layout in the usual way, during {@link
diff --git a/docs/html/guide/topics/fundamentals/loaders.jd b/docs/html/guide/topics/fundamentals/loaders.jd
new file mode 100644
index 0000000..d31f090
--- /dev/null
+++ b/docs/html/guide/topics/fundamentals/loaders.jd
@@ -0,0 +1,497 @@
+page.title=Loaders
+parent.title=Activities
+parent.link=activities.html
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#summary">Loader API Summary</a></li>
+ <li><a href="#app">Using Loaders in an Application</a>
+ <ol>
+ <li><a href="#requirements"></a></li>
+ <li><a href="#starting">Starting a Loader</a></li>
+ <li><a href="#restarting">Restarting a Loader</a></li>
+ <li><a href="#callback">Using the LoaderManager Callbacks</a></li>
+ </ol>
+ </li>
+ <li><a href="#example">Example</a>
+ <ol>
+ <li><a href="#more_examples">More Examples</a></li>
+ </ol>
+ </li>
+ </ol>
+
+ <h2>Key classes</h2>
+ <ol>
+ <li>{@link android.app.LoaderManager}</li>
+ <li>{@link android.content.Loader}</li>
+
+ </ol>
+
+ <h2>Related samples</h2>
+ <ol>
+ <li> <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentListCursorLoader.html">FragmentListCursorLoader</a></li>
+ <li> <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
+LoaderThrottle</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>Introduced in Android 3.0, loaders make it easy to asynchronously load data
+in an activity or fragment. Loaders have these characteristics:</p>
+ <ul>
+ <li>They are available to every {@link android.app.Activity} and {@link
+android.app.Fragment}.</li>
+ <li>They provide asynchronous loading of data.</li>
+ <li>They monitor the source of their data and deliver new results when the
+content changes.</li>
+ <li>They automatically reconnect to the last loader's cursor when being
+recreated after a configuration change. Thus, they don't need to re-query their
+data.</li>
+ </ul>
+
+<h2 id="summary">Loader API Summary</h2>
+
+<p>There are multiple classes and interfaces that may be involved in using
+loaders in an application. They are summarized in this table:</p>
+
+<table>
+ <tr>
+ <th>Class/Interface</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>{@link android.app.LoaderManager}</td>
+ <td>An abstract class associated with an {@link android.app.Activity} or
+{@link android.app.Fragment} for managing one or more {@link
+android.content.Loader} instances. This helps an application manage
+longer-running operations in conjunction with the {@link android.app.Activity}
+or {@link android.app.Fragment} lifecycle; the most common use of this is with a
+{@link android.content.CursorLoader}, however applications are free to write
+their own loaders for loading other types of data.
+ <br />
+ <br />
+ There is only one {@link android.app.LoaderManager} per activity or fragment. But a {@link android.app.LoaderManager} can have
+multiple loaders.</td>
+ </tr>
+ <tr>
+ <td>{@link android.app.LoaderManager.LoaderCallbacks}</td>
+ <td>A callback interface for a client to interact with the {@link
+android.app.LoaderManager}. For example, you use the {@link
+android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}
+callback method to create a new loader.</td>
+ </tr>
+ <tr>
+ <td>{@link android.content.Loader}</td>
+ <td>An abstract class that performs asynchronous loading of data. This is
+the base class for a loader. You would typically use {@link
+android.content.CursorLoader}, but you can implement your own subclass. While
+loaders are active they should monitor the source of their data and deliver new
+results when the contents change. </td>
+ </tr>
+ <tr>
+ <td>{@link android.content.AsyncTaskLoader}</td>
+ <td>Abstract loader that provides an {@link android.os.AsyncTask} to do the work.</td>
+ </tr>
+ <tr>
+ <td>{@link android.content.CursorLoader}</td>
+ <td>A subclass of {@link android.content.AsyncTaskLoader} that queries the
+{@link android.content.ContentResolver} and returns a {@link
+android.database.Cursor}. This class implements the {@link
+android.content.Loader} protocol in a standard way for querying cursors,
+building on {@link android.content.AsyncTaskLoader} to perform the cursor query
+on a background thread so that it does not block the application's UI. Using
+this loader is the best way to asynchronously load data from a {@link
+android.content.ContentProvider}, instead of performing a managed query through
+the fragment or activity's APIs.</td>
+ </tr>
+</table>
+
+<p>The classes and interfaces in the above table are the essential components
+you'll use to implement a loader in your application. You won't need all of them
+for each loader you create, but you'll always need a reference to the {@link
+android.app.LoaderManager} in order to initialize a loader and an implementation
+of a {@link android.content.Loader} class such as {@link
+android.content.CursorLoader}. The following sections show you how to use these
+classes and interfaces in an application.</p>
+
+<h2 id ="app">Using Loaders in an Application</h2>
+<p>This section describes how to use loaders in an Android application. An
+application that uses loaders typically includes the following:</p>
+<ul>
+ <li>An {@link android.app.Activity} or {@link android.app.Fragment}.</li>
+ <li>An instance of the {@link android.app.LoaderManager}.</li>
+ <li>A {@link android.content.CursorLoader} to load data backed by a {@link
+android.content.ContentProvider}. Alternatively, you can implement your own subclass
+of {@link android.content.Loader} or {@link android.content.AsyncTaskLoader} to
+load data from some other source.</li>
+ <li>An implementation for {@link android.app.LoaderManager.LoaderCallbacks}.
+This is where you create new loaders and manage your references to existing
+loaders.</li>
+<li>A way of displaying the loader's data, such as a {@link
+android.widget.SimpleCursorAdapter}.</li>
+ <li>A data source, such as a {@link android.content.ContentProvider}, when using a
+{@link android.content.CursorLoader}.</li>
+</ul>
+<h3 id="starting">Starting a Loader</h3>
+
+<p>The {@link android.app.LoaderManager} manages one or more {@link
+android.content.Loader} instances within an {@link android.app.Activity} or
+{@link android.app.Fragment}. There is only one {@link
+android.app.LoaderManager} per activity or fragment.</p>
+
+<p>You typically
+initialize a {@link android.content.Loader} within the activity's {@link
+android.app.Activity#onCreate onCreate()} method, or within the fragment's
+{@link android.app.Fragment#onActivityCreated onActivityCreated()} method. You
+do this as follows:</p>
+
+<pre>// Prepare the loader. Either re-connect with an existing one,
+// or start a new one.
+getLoaderManager().initLoader(0, null, this);</pre>
+
+<p>The {@link android.app.LoaderManager#initLoader initLoader()} method takes
+the following parameters:</p>
+<ul>
+ <li>A unique ID that identifies the loader. In this example, the ID is 0.</li>
+<li>Optional arguments to supply to the loader at
+construction (<code>null</code> in this example).</li>
+
+<li>A {@link android.app.LoaderManager.LoaderCallbacks} implementation, which
+the {@link android.app.LoaderManager} calls to report loader events. In this
+example, the local class implements the {@link
+android.app.LoaderManager.LoaderCallbacks} interface, so it passes a reference
+to itself, {@code this}.</li>
+</ul>
+<p>The {@link android.app.LoaderManager#initLoader initLoader()} call ensures that a loader
+is initialized and active. It has two possible outcomes:</p>
+<ul>
+ <li>If the loader specified by the ID already exists, the last created loader
+is reused.</li>
+ <li>If the loader specified by the ID does <em>not</em> exist,
+{@link android.app.LoaderManager#initLoader initLoader()} triggers the
+{@link android.app.LoaderManager.LoaderCallbacks} method {@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}.
+This is where you implement the code to instantiate and return a new loader.
+For more discussion, see the section <a
+href="#onCreateLoader">onCreateLoader</a>.</li>
+</ul>
+<p>In either case, the given {@link android.app.LoaderManager.LoaderCallbacks}
+implementation is associated with the loader, and will be called when the
+loader state changes. If at the point of this call the caller is in its
+started state, and the requested loader already exists and has generated its
+data, then the system calls {@link
+android.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
+immediately (during {@link android.app.LoaderManager#initLoader initLoader()}),
+so you must be prepared for this to happen. See <a href="#onLoadFinished">
+onLoadFinished</a> for more discussion of this callback</p>
+
+<p>Note that the {@link android.app.LoaderManager#initLoader initLoader()}
+method returns the {@link android.content.Loader} that is created, but you don't
+need to capture a reference to it. The {@link android.app.LoaderManager} manages
+the life of the loader automatically. The {@link android.app.LoaderManager}
+starts and stops loading when necessary, and maintains the state of the loader
+and its associated content. As this implies, you rarely interact with loaders
+directly (though for an example of using loader methods to fine-tune a loader's
+behavior, see the <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> sample).
+You most commonly use the {@link
+android.app.LoaderManager.LoaderCallbacks} methods to intervene in the loading
+process when particular events occur. For more discussion of this topic, see <a
+href="#callback">Using the LoaderManager Callbacks</a>.</p>
+
+<h3 id="restarting">Restarting a Loader</h3>
+
+<p>When you use {@link android.app.LoaderManager#initLoader initLoader()}, as
+shown above, it uses an existing loader with the specified ID if there is one.
+If there isn't, it creates one. But sometimes you want to discard your old data
+and start over.</p>
+
+<p>To discard your old data, you use {@link
+android.app.LoaderManager#restartLoader restartLoader()}. For example, this
+implementation of {@link android.widget.SearchView.OnQueryTextListener} restarts
+the loader when the user's query changes. The loader needs to be restarted so
+that it can use the revised search filter to do a new query:</p>
+
+<pre>
+public boolean onQueryTextChanged(String newText) {
+ // Called when the action bar search text has changed. Update
+ // the search filter, and restart the loader to do a new query
+ // with this filter.
+ mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
+ getLoaderManager().restartLoader(0, null, this);
+ return true;
+}</pre>
+
+<h3 id="callback">Using the LoaderManager Callbacks</h3>
+
+<p>{@link android.app.LoaderManager.LoaderCallbacks} is a callback interface
+that lets a client interact with the {@link android.app.LoaderManager}. </p>
+<p>Loaders, in particular {@link android.content.CursorLoader}, are expected to
+retain their data after being stopped. This allows applications to keep their
+data across the activity or fragment's {@link android.app.Activity#onStop
+onStop()} and {@link android.app.Activity#onStart onStart()} methods, so that
+when users return to an application, they don't have to wait for the data to
+reload. You use the {@link android.app.LoaderManager.LoaderCallbacks} methods
+when to know when to create a new loader, and to tell the application when it is
+ time to stop using a loader's data.</p>
+
+<p>{@link android.app.LoaderManager.LoaderCallbacks} includes these
+methods:</p>
+<ul>
+ <li>{@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()} —
+Instantiate and return a new {@link android.content.Loader} for the given ID.
+</li></ul>
+<ul>
+ <li> {@link android.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
+— Called when a previously created loader has finished its load.
+</li></ul>
+<ul>
+ <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}
+ — Called when a previously created loader is being reset, thus making its
+data unavailable.
+</li>
+</ul>
+<p>These methods are described in more detail in the following sections.</p>
+
+<h4 id ="onCreateLoader">onCreateLoader</h4>
+
+<p>When you attempt to access a loader (for example, through {@link
+android.app.LoaderManager#initLoader initLoader()}), it checks to see whether
+the loader specified by the ID exists. If it doesn't, it triggers the {@link
+android.app.LoaderManager.LoaderCallbacks} method {@link
+android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}. This
+is where you create a new loader. Typically this will be a {@link
+android.content.CursorLoader}, but you can implement your own {@link
+android.content.Loader} subclass. </p>
+
+<p>In this example, the {@link
+android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}
+callback method creates a {@link android.content.CursorLoader}. You must build
+the {@link android.content.CursorLoader} using its constructor method, which
+requires the complete set of information needed to perform a query to the {@link
+android.content.ContentProvider}. Specifically, it needs:</p>
+<ul>
+ <li><em>uri</em> — The URI for the content to retrieve. </li>
+ <li><em>projection</em> — A list of which columns to return. Passing
+<code>null</code> will return all columns, which is inefficient. </li>
+ <li><em>selection</em> — A filter declaring which rows to return,
+formatted as an SQL WHERE clause (excluding the WHERE itself). Passing
+<code>null</code> will return all rows for the given URI. </li>
+ <li><em>selectionArgs</em> — You may include ?s in the selection, which will
+be replaced by the values from <em>selectionArgs</em>, in the order that they appear in
+the selection. The values will be bound as Strings. </li>
+ <li><em>sortOrder</em> — How to order the rows, formatted as an SQL
+ORDER BY clause (excluding the ORDER BY itself). Passing <code>null</code> will
+use the default sort order, which may be unordered.</li>
+</ul>
+<p>For example:</p>
+<pre>
+ // If non-null, this is the current filter the user has provided.
+String mCurFilter;
+...
+public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // This is called when a new Loader needs to be created. This
+ // sample only has one Loader, so we don't care about the ID.
+ // First, pick the base URI to use depending on whether we are
+ // currently filtering.
+ Uri baseUri;
+ if (mCurFilter != null) {
+ baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
+ Uri.encode(mCurFilter));
+ } else {
+ baseUri = Contacts.CONTENT_URI;
+ }
+
+ // Now create and return a CursorLoader that will take care of
+ // creating a Cursor for the data being displayed.
+ String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ + Contacts.DISPLAY_NAME + " != '' ))";
+ return new CursorLoader(getActivity(), baseUri,
+ CONTACTS_SUMMARY_PROJECTION, select, null,
+ Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
+}</pre>
+<h4 id="onLoadFinished">onLoadFinished</h4>
+
+<p>This method is called when a previously created loader has finished its load.
+This method is guaranteed to be called prior to the release of the last data
+that was supplied for this loader. At this point you should remove all use of
+the old data (since it will be released soon), but should not do your own
+release of the data since its loader owns it and will take care of that.</p>
+
+
+<p>The loader will release the data once it knows the application is no longer
+using it. For example, if the data is a cursor from a {@link
+android.content.CursorLoader}, you should not call {@link
+android.database.Cursor#close close()} on it yourself. If the cursor is being
+placed in a {@link android.widget.CursorAdapter}, you should use the {@link
+android.widget.SimpleCursorAdapter#swapCursor swapCursor()} method so that the
+old {@link android.database.Cursor} is not closed. For example:</p>
+
+<pre>
+// This is the Adapter being used to display the list's data.<br
+/>SimpleCursorAdapter mAdapter;
+...
+
+public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ // Swap the new cursor in. (The framework will take care of closing the
+ // old cursor once we return.)
+ mAdapter.swapCursor(data);
+}</pre>
+
+<h4 id="onLoaderReset">onLoaderReset</h4>
+
+<p>This method is called when a previously created loader is being reset, thus
+making its data unavailable. This callback lets you find out when the data is
+about to be released so you can remove your reference to it. </p>
+<p>This implementation calls
+{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()}
+with a value of <code>null</code>:</p>
+
+<pre>
+// This is the Adapter being used to display the list's data.
+SimpleCursorAdapter mAdapter;
+...
+
+public void onLoaderReset(Loader<Cursor> loader) {
+ // This is called when the last Cursor provided to onLoadFinished()
+ // above is about to be closed. We need to make sure we are no
+ // longer using it.
+ mAdapter.swapCursor(null);
+}</pre>
+
+
+<h2 id="example">Example</h2>
+
+<p>As an example, here is the full implementation of a {@link
+android.app.Fragment} that displays a {@link android.widget.ListView} containing
+the results of a query against the contacts content provider. It uses a {@link
+android.content.CursorLoader} to manage the query on the provider.</p>
+
+<p>For an application to access a user's contacts, as shown in this example, its
+manifest must include the permission
+{@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p>
+
+<pre>
+public static class CursorLoaderListFragment extends ListFragment
+ implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor> {
+
+ // This is the Adapter being used to display the list's data.
+ SimpleCursorAdapter mAdapter;
+
+ // If non-null, this is the current filter the user has provided.
+ String mCurFilter;
+
+ @Override public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ // Give some text to display if there is no data. In a real
+ // application this would come from a resource.
+ setEmptyText("No phone numbers");
+
+ // We have a menu item to show in action bar.
+ setHasOptionsMenu(true);
+
+ // Create an empty adapter we will use to display the loaded data.
+ mAdapter = new SimpleCursorAdapter(getActivity(),
+ android.R.layout.simple_list_item_2, null,
+ new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS },
+ new int[] { android.R.id.text1, android.R.id.text2 }, 0);
+ setListAdapter(mAdapter);
+
+ // Prepare the loader. Either re-connect with an existing one,
+ // or start a new one.
+ getLoaderManager().initLoader(0, null, this);
+ }
+
+ @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ // Place an action bar item for searching.
+ MenuItem item = menu.add("Search");
+ item.setIcon(android.R.drawable.ic_menu_search);
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ SearchView sv = new SearchView(getActivity());
+ sv.setOnQueryTextListener(this);
+ item.setActionView(sv);
+ }
+
+ public boolean onQueryTextChange(String newText) {
+ // Called when the action bar search text has changed. Update
+ // the search filter, and restart the loader to do a new query
+ // with this filter.
+ mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
+ getLoaderManager().restartLoader(0, null, this);
+ return true;
+ }
+
+ @Override public boolean onQueryTextSubmit(String query) {
+ // Don't care about this.
+ return true;
+ }
+
+ @Override public void onListItemClick(ListView l, View v, int position, long id) {
+ // Insert desired behavior here.
+ Log.i("FragmentComplexList", "Item clicked: " + id);
+ }
+
+ // These are the Contacts rows that we will retrieve.
+ static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
+ Contacts._ID,
+ Contacts.DISPLAY_NAME,
+ Contacts.CONTACT_STATUS,
+ Contacts.CONTACT_PRESENCE,
+ Contacts.PHOTO_ID,
+ Contacts.LOOKUP_KEY,
+ };
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // This is called when a new Loader needs to be created. This
+ // sample only has one Loader, so we don't care about the ID.
+ // First, pick the base URI to use depending on whether we are
+ // currently filtering.
+ Uri baseUri;
+ if (mCurFilter != null) {
+ baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
+ Uri.encode(mCurFilter));
+ } else {
+ baseUri = Contacts.CONTENT_URI;
+ }
+
+ // Now create and return a CursorLoader that will take care of
+ // creating a Cursor for the data being displayed.
+ String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ + Contacts.DISPLAY_NAME + " != '' ))";
+ return new CursorLoader(getActivity(), baseUri,
+ CONTACTS_SUMMARY_PROJECTION, select, null,
+ Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
+ }
+
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ // Swap the new cursor in. (The framework will take care of closing the
+ // old cursor once we return.)
+ mAdapter.swapCursor(data);
+ }
+
+ public void onLoaderReset(Loader<Cursor> loader) {
+ // This is called when the last Cursor provided to onLoadFinished()
+ // above is about to be closed. We need to make sure we are no
+ // longer using it.
+ mAdapter.swapCursor(null);
+ }
+}</pre>
+<h3 id="more_examples">More Examples</h3>
+
+<p>There are a few different samples in <strong>ApiDemos</strong> that
+illustrate how to use loaders:</p>
+<ul>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentListCursorLoader.html">FragmentListCursorLoader</a> — A complete version of the
+snippet shown above.</li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> — An example of how to use throttling to
+reduce the number of queries a content provider does then its data changes.</li>
+</ul>
+
+<p>For information on downloading and installing the SDK samples, see <a
+href="http://developer.android.com/resources/samples/get.html"> Getting the
+Samples</a>. </p>
+
diff --git a/docs/html/guide/topics/fundamentals/services.jd b/docs/html/guide/topics/fundamentals/services.jd
index d0c924a..a9dd315 100644
--- a/docs/html/guide/topics/fundamentals/services.jd
+++ b/docs/html/guide/topics/fundamentals/services.jd
@@ -121,7 +121,7 @@
android.app.Activity#onStart onStart()}, then stop it in {@link android.app.Activity#onStop
onStop()}. Also consider using {@link android.os.AsyncTask} or {@link android.os.HandlerThread},
instead of the traditional {@link java.lang.Thread} class. See the <a
-href="{@docRoot}guide/topics/fundamentals/processes-and-threading.html#Threads">Processes and
+href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes and
Threading</a> document for more information about threads.</p>
<p>Remember that if you do use a service, it still runs in your application's main thread by
default, so you should still create a new thread within the service if it performs intensive or
@@ -183,7 +183,7 @@
available again (though this also depends on the value you return from {@link
android.app.Service#onStartCommand onStartCommand()}, as discussed later). For more information
about when the system might destroy a service, see the <a
-href="{@docRoot}guide/topics/fundamentals/processes-and-threading.html">Processes and Threading</a>
+href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and Threading</a>
document.</p>
<p>In the following sections, you'll see how you can create each type of service and how to use
diff --git a/docs/html/guide/topics/graphics/2d-graphics.jd b/docs/html/guide/topics/graphics/2d-graphics.jd
index 6594568..618cdf8 100644
--- a/docs/html/guide/topics/graphics/2d-graphics.jd
+++ b/docs/html/guide/topics/graphics/2d-graphics.jd
@@ -1,5 +1,5 @@
page.title=2D Graphics
-parent.title=2D and 3D Graphics
+parent.title=Graphics
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/graphics/animation.jd b/docs/html/guide/topics/graphics/animation.jd
index cd74efa..3b1716c 100644
--- a/docs/html/guide/topics/graphics/animation.jd
+++ b/docs/html/guide/topics/graphics/animation.jd
@@ -1,4 +1,6 @@
page.title=Property Animation
+parent.title=Graphics
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/graphics/opengl.jd b/docs/html/guide/topics/graphics/opengl.jd
index 4d0b223..1f51c2d 100644
--- a/docs/html/guide/topics/graphics/opengl.jd
+++ b/docs/html/guide/topics/graphics/opengl.jd
@@ -1,5 +1,5 @@
page.title=3D with OpenGL
-parent.title=2D and 3D Graphics
+parent.title=Graphics
parent.link=index.html
@jd:body
diff --git a/docs/html/guide/topics/graphics/renderscript.jd b/docs/html/guide/topics/graphics/renderscript.jd
index 0ef8a22..0e64c78 100644
--- a/docs/html/guide/topics/graphics/renderscript.jd
+++ b/docs/html/guide/topics/graphics/renderscript.jd
@@ -1,4 +1,6 @@
page.title=3D Rendering and Computation with Renderscript
+parent.title=Graphics
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
@@ -14,7 +16,7 @@
<ol>
<li><a href="#native-api">Native Renderscript APIs</a></li>
- <li><a href="#reflective-api">Reflective layer APIs</a></li>
+ <li><a href="#reflective-api">Reflected layer APIs</a></li>
<li><a href="#graphics-api">Graphics APIs</a></li>
</ol>
@@ -28,10 +30,18 @@
</ol>
</li>
</ol>
+ <h2>Related Samples</h2>
+ <ol>
+ <li><a href="{@docRoot}resources/samples/Renderscript/Balls/index.html">Balls</a></li>
+ <li><a href="{@docRoot}resources/samples/Renderscript/Fountain/index.html">Fountain</a></li>
+ <li><a href="{@docRoot}resources/samples/Renderscript/HelloCompute/index.html">Hello Compute</a></li>
+ <li><a href="{@docRoot}resources/samples/Renderscript/HelloWorld/index.html">Hello World</a></li>
+ <li><a href="{@docRoot}resources/samples/Renderscript/Samples/index.html">Samples</a></li>
+ </ol>
</div>
</div>
- <p>The Renderscript system offers high performance 3D rendering and mathematical computations at
+ <p>The Renderscript system offers high performance 3D rendering and mathematical computation at
the native level. The Renderscript APIs are intended for developers who are comfortable with
developing in C (C99 standard) and want to maximize performance in their applications. The
Renderscript system improves performance by running as native code on the device, but it also
@@ -44,47 +54,46 @@
intermediate code.</p>
<p>The disadvantage of the Renderscript system is that it adds complexity to the development and
- debugging processes and is not a substitute for the Android system APIs. It is a portable native
- language with pointers and explicit resource management. The target use is for performance
- critical code where the existing Android APIs are not sufficient. If what you are rendering or
- computing is very simple and does not require much processing power, you should still use the
- Android APIs for ease of development. Debugging visibility can be limited, because the
+ debugging processes. Debugging visibility can be limited, because the
Renderscript system can execute on processors other than the main CPU (such as the GPU), so if
- this occurs, debugging becomes more difficult. Remember the tradeoffs between development and
- debugging complexity versus performance when deciding to use Renderscript.</p>
+ this occurs, debugging becomes more difficult. The target use is for performance
+ critical code where the traditional framework APIs (such as using {@link android.opengl}) are not sufficient.
+ If what you are rendering or computing is very simple and does not require much processing power, you should still use the
+ traditional framework APIs for ease of development. Remember the tradeoffs between development and
+ debugging complexity versus performance when deciding to use Renderscript. </p>
<p>For an example of Renderscript in action, see the 3D carousel view in the Android 3.0 versions
of Google Books and YouTube or install the Renderscript sample applications that are shipped with
- the SDK in <code><sdk_root>/platforms/android-3.0/samples</code>.</p>
+ the SDK in <code><sdk_root>/samples/android-11/Renderscript</code>.</p>
<h2 id="overview">Renderscript System Overview</h2>
<p>The Renderscript system adopts a control and slave architecture where the low-level native
code is controlled by the higher level Android system that runs in the virtual machine (VM). When
- you use the Renderscript system, there are three layers of APIs that exist:</p>
+ you use the Renderscript system, there are three layers that exist:</p>
<ul>
- <li>The native Renderscript layer consists of the native Renderscript <code>.rs</code> files
- that you write to compute mathematical operations, render graphics, or both. This layer does
- the intensive computation or graphics rendering and returns the result back to the Android VM
- through the reflected layer.</li>
+ <li>The native Renderscript layer consists of native libraries that are packaged with the SDK.
+ The native Renderscript <code>.rs</code> files compute mathematical operations, render graphics,
+ or both. This layer does the intensive computation or graphics rendering and returns the result
+ back to the Android VM through the reflected layer.</li>
- <li>The reflected layer is a set of generated Android system classes (through reflection) based
- on the native layer interface that you define. This layer acts as a bridge between the native
+ <li>The reflected layer is a set of generated Android framework classes reflected from
+ the native Renderscript code that you wrote. This layer acts as a bridge between the native
Renderscript layer and the Android system layer. The Android build tools automatically generate
- the APIs for this layer during the build process.</li>
+ the classes for this layer during the build process. This layer also includes a set of Android
+ framework APIs that provide the memory and resource allocation classes to support this layer.</li>
- <li>The Android system layer consists of your normal Android APIs along with the Renderscript
+ <li>The Android system layer consists of the traditional framework APIs, which include the Renderscript
APIs in {@link android.renderscript}. This layer handles things such as the Activity lifecycle
- management of your application and calls the native Renderscript layer through the reflected
- layer.</li>
+ management of your application and calls the reflected layer to communicate with the native Renderscript code.</li>
</ul>
<p>To fully understand how the Renderscript system works, you must understand how the reflected
layer is generated and how it interacts with the native Renderscript layer and Android system
layer. The reflected layer provides the entry points into the native code, enabling the Android
- system code to give high level commands like, "rotate the view" or "filter the bitmap." It
- delegates all the heavy lifting to the native layer. To accomplish this, you need to create logic
+ system to give high level commands like, "rotate the view" or "filter the bitmap" to the
+ native layer, which does the heavy lifting. To accomplish this, you need to create logic
to hook together all of these layers so that they can correctly communicate.</p>
<p>At the root of everything is your Renderscript, which is the actual C code that you write and
@@ -92,11 +101,10 @@
and graphics. A compute Renderscript does not do any graphics rendering while a graphics
Renderscript does.</p>
- <p>When you create a Renderscript <code>.rs</code> file, an equivalent, reflective layer class,
- {@link android.renderscript.ScriptC}, is generated by the build tools and exposes the native
- functions to the Android system. This class is named
- <code><em>ScriptC_renderscript_filename</em></code>. The following list describes the major
- components of your native Renderscript code that is reflected:</p>
+ <p>When you create Renderscript <code>.rs</code> files, equivalent, reflected classes
+ are generated by the build tools and expose the native functions and data types and structures
+ to the Android system. The following list describes the major components of your native Renderscript
+ code that is reflected:</p>
<ul>
<li>The non-static functions in your Renderscript (<code>.rs</code> file) are reflected into
@@ -106,12 +114,12 @@
<li>Any non-static, global Renderscript variables are reflected into
<code><em>ScriptC_renderscript_filename</em></code>.
Accessor methods are generated, so the Android system layer can access the values.
- The <code>get()</code> method comes with a one-way communication restriction.
- The Android system layer always caches the last value that is set and returns that during a call to get.
- If the native Renderscript code has changed the value, the change does propagate back to the Android system layer
- for efficiency. If the global variables are initialized in the native Renderscript code, those values are used
- to initialize the Android system versions. If global variables are marked as <code>const</code>,
- then a <code>set()</code> method is not generated.
+ The <code>get</code> method comes with a one-way communication restriction.
+ The Android system layer always caches the last value that is set and returns that during a call to a <code>get<code> method.
+ If the native Renderscript code changes the value, the change does not propagate back to the Android system layer.
+ If the global variables are initialized in the native Renderscript code, those values are used
+ to initialize the corresponding values in the Android system. If global variables are marked as <code>const</code>,
+ then a <code>set</code> method is not generated.
</li>
<li>Structs are reflected into their own classes, one for each struct, into a class named
@@ -126,15 +134,14 @@
Renderscripts should not directly set the exported global pointers.</li>
</ul>
- <p>The Android system also has a corresponding Renderscript context object, {@link
+ <p>The Android framework API also has a corresponding Renderscript context object, {@link
android.renderscript.RenderScript} (for a compute Renderscript) or {@link
android.renderscript.RenderScriptGL} (for a graphics Renderscript). This context object allows
you to bind to the reflected Renderscript class, so that the Renderscript context knows what its
corresponding native Renderscript is. If you have a graphics Renderscript context, you can also
specify a variety of Programs (stages in the graphics pipeline) to tweek how your graphics are
rendered. A graphics Renderscript context also needs a surface to render on, {@link
- android.renderscript.RSSurfaceView}, which gets passed into its constructor. When all three of
- the layers are connected, the Renderscript system can compute or render graphics.</p>
+ android.renderscript.RSSurfaceView}, which gets passed into its constructor.</p>
<h2 id="api">API overview</h2>
@@ -143,15 +150,15 @@
because these functions are assumed to be running on a standard CPU. The Renderscript runtime
chooses the best processor to execute the code, which may not be the CPU, so it cannot guarantee
support for standard C libraries. What Renderscript does offer is an API that supports intensive
- computation with an extensive collection of math APIs. Some key features of the Renderscript APIs
- are:</p>
+ computation with an extensive collection of math APIs. The following sections group the APIs
+ into three distinct categories.</p>
<h3 id="native-api">Native Renderscript APIs</h3>
<p>The Renderscript headers are located in the <code>include</code> and
<code>clang-include</code> directories in the
- <code><sdk_root>/platforms/android-3.0/renderscript</code> directory of the Android SDK.
+ <code><sdk_root>/platforms/android-11/renderscript</code> directory of the Android SDK.
The headers are automatically included for you, except for the graphics specific header,
which you can define as follows:</p>
@@ -168,16 +175,14 @@
<li>Graphics rendering functions</li>
<li>Memory allocation request features</li>
<li>Data types and structures to support the Renderscript system such as
- Vector types for defining two-, three-, or four-vectors.</li></li>
- </ul>
+ Vector types for defining two-, three-, or four-vectors.</li>
</ul>
- <h3 id="reflective-api">Reflective layer APIs</h3>
+ <h3 id="reflective-api">Reflected layer APIs</h3>
- <p>These classes are not generated by the reflection process, and are actually part of the
- Android system APIs, but they are mainly used by the reflective layer classes to handle memory
- allocation and management for your Renderscript. You normally do not need to be call these classes
- directly.</p>
+ <p>These classes are mainly used by the reflected classes that are generated from your native Renderscript
+ code. They allocate and manage memory for your Renderscript on the Android system side.
+ You normally do not need to call these classes directly.</p>
<p>Because of the constraints of the Renderscript native layer, you cannot do any dynamic
memory allocation in your Renderscript <code>.rs</code> file.
@@ -193,7 +198,7 @@
The Android system object, which at this point is just an empty shell, is eventually garbage collected.
</p>
- <p>The following classes are mainly used by the reflective layer classes:</p>
+ <p>The following classes are mainly used by the reflected layer classes:</p>
<table>
<tr>
@@ -212,9 +217,9 @@
<td>
An {@link android.renderscript.Element} is the most basic element of a memory type. An
element represents one cell of a memory allocation. An element can have two forms: Basic or
- Complex. They are typically created from C structures that are used within Renderscript
- code and cannot contain pointers or nested arrays. The other common source of elements is
- bitmap formats.
+ Complex. They are typically created from C structures in your Renderscript
+ code during the reflection process. Elements cannot contain pointers or nested arrays.
+ The other common source of elements is bitmap formats.
<p>A basic element contains a single component of data of any valid Renderscript data type.
Examples of basic element data types include a single float value, a float4 vector, or a
@@ -251,12 +256,11 @@
<td>rs_allocation</td>
<td>
- An {@link android.renderscript.Allocation} provides the memory for applications. An {@link
+ <p>An {@link android.renderscript.Allocation} provides the memory for applications. An {@link
android.renderscript.Allocation} allocates memory based on a description of the memory that
- is represented by a {@link android.renderscript.Type}. The {@link
- android.renderscript.Type} describes an array of {@link android.renderscript.Element}s that
+ is represented by a {@link android.renderscript.Type}. The type describes an array of elements that
represent the memory to be allocated. Allocations are the primary way data moves into and
- out of scripts.
+ out of scripts.</p>
<p>Memory is user-synchronized and it's possible for allocations to exist in multiple
memory spaces concurrently. For example, if you make a call to the graphics card to load a
@@ -268,9 +272,9 @@
<p>Allocation data is uploaded in one of two primary ways: type checked and type unchecked.
For simple arrays there are <code>copyFrom()</code> functions that take an array from the
- Android system code and copy it to the native layer memory store. Both type checked and
+ Android system and copy it to the native layer memory store. Both type checked and
unchecked copies are provided. The unchecked variants allow the Android system to copy over
- arrays of structures because it not support inherently support structures. For example, if
+ arrays of structures because it does not support structures. For example, if
there is an allocation that is an array n floats, you can copy the data contained in a
float[n] array or a byte[n*4] array.</p>
</td>
@@ -329,7 +333,7 @@
state is taken from the bind points as set in the {@link android.renderscript.RenderScriptGL}
bind methods in the control environment (VM environment).</p>
- <p>For example, you can define this at the top of your native Renderscript code:</p>
+ <p>For example, you can define this at the top of your native graphics Renderscript code:</p>
<pre>
#pragma stateVertex(parent)
#pragma stateStore(parent)
@@ -352,9 +356,9 @@
<td>rs_program_vertex</td>
<td>
- The Renderscript vertex program, also known as a vertex shader, describes the stage in the
+ <p>The Renderscript vertex program, also known as a vertex shader, describes the stage in the
graphics pipeline responsible for manipulating geometric data in a user-defined way. The
- object is constructed by providing Renderscript with the following data:
+ object is constructed by providing Renderscript with the following data:</p>
<ul>
<li>An Element describing its varying inputs or attributes</li>
@@ -365,7 +369,9 @@
inputs</li>
</ul>
- <p>Once the program is created, bind it to the graphics context. It is then used for all
+ <p>Once the program is created, bind it to the {@link android.renderscript.RenderScriptGL}
+ graphics context by calling
+ {@link android.renderscript.RenderScriptGL#bindProgramVertex bindProgramVertex()}. It is then used for all
subsequent draw calls until you bind a new program. If the program has constant inputs, the
user needs to bind an allocation containing those inputs. The allocation’s type must match
the one provided during creation. The Renderscript library then does all the necessary
@@ -389,7 +395,7 @@
<td>rs_program_fragment</td>
- <td>The Renderscript fragment program, also known as the fragment shader, is responsible for
+ <td><p>The Renderscript fragment program, also known as the fragment shader, is responsible for
manipulating pixel data in a user-defined way. It’s constructed from a GLSL shader string
containing the program body, textures inputs, and a Type object describing the constants used
by the program. Like the vertex programs, when an allocation with constant input values is
@@ -399,7 +405,7 @@
rsgAllocationSyncAll so it could send the new values to hardware. Communication between the
vertex and fragment programs is handled internally in the GLSL code. For example, if the
fragment program is expecting a varying input called varTex0, the GLSL code inside the
- program vertex must provide it.
+ program vertex must provide it.</p>
<p> To bind shader constructs to the this Program, declare a struct containing the necessary shader constants in your native Renderscript code.
This struct is generated into a reflected class that you can use as a constant input element
during the Program's creation. It is an easy way to create an instance of this struct as an allocation.
@@ -414,7 +420,7 @@
<td>rs_program_store</td>
<td>The Renderscript ProgramStore contains a set of parameters that control how the graphics
- hardware writes to the framebuffer. It could be used to enable/disable depth writes and
+ hardware writes to the framebuffer. It could be used to enable and disable depth writes and
testing, setup various blending modes for effects like transparency and define write masks
for color components.</td>
</tr>
@@ -491,19 +497,19 @@
<ol>
<li>Analyze your application's requirements and figure out what you want to develop with
- Renderscript. To take full advantage of Renderscript, you want to use it when the computation
- or graphics performance you're getting with the normal Android system APIs is
+ Renderscript. To take full advantage of the Renderscript system, you want to use it when the computation
+ or graphics performance you're getting with the traditional framework APIs is
insufficient.</li>
<li>Design the interface of your Renderscript code and implement it using the native
Renderscript APIs that are included in the Android SDK in
- <code><sdk_root>/platforms/android-3.0/renderscript</code>.</li>
+ <code><sdk_root>/platforms/android-11/renderscript</code>.</li>
<li>Create an Android project as you would normally, in Eclipse or with the
<code>android</code> tool.</li>
<li>Place your Renderscript files in <code>src</code> folder of the Android project so that the
- build tools can generate the reflective layer classes.</li>
+ build tools can generate the reflected layer classes.</li>
<li>Create your application, calling the Renderscript through the reflected class layer when
you need to.</li>
@@ -511,16 +517,16 @@
<li>Build, install, and run your application as you would normally.</li>
</ol>
- <p>To see how a simple Renderscript application is put together, see <a href="#hello-world">The
- Hello World Renderscript Graphics Application</a>. The SDK also ships with many Renderscript
- samples in the<code><sdk_root>/samples/android-3.0/</code> directory.</p>
+ <p>To see how a simple Renderscript application is put together, see the
+ <a href="{@docRoot}resources/samples/Renderscript/index.html">Renderscript samples</a>
+ and <a href="#hello-graphics">The Hello Graphics Application</a> section of the documentation.</p>
<h3 id="hello-graphics">The Hello Graphics Application</h3>
<p>This small application demonstrates the structure of a simple Renderscript application. You
can model your Renderscript application after the basic structure of this application. You can
find the complete source in the SDK in the
- <code><android-sdk>/platforms/android-3.0/samples/HelloWorldRS directory</code>. The
+ <code><android-sdk>/samples/android-11/HelloWorldRS directory</code>. The
application uses Renderscript to draw the string, "Hello World!" to the screen and redraws the
text whenever the user touches the screen at the location of the touch. This application is only
a demonstration and you should not use the Renderscript system to do something this trivial. The
@@ -542,7 +548,7 @@
screen.</li>
<li>
- <p>The <code><project_root>/gen</code> directory contains the reflective layer classes
+ <p>The <code><project_root>/gen</code> directory contains the reflected layer classes
that are generated by the Android build tools. You will notice a
<code>ScriptC_helloworld</code> class, which is the reflective version of the Renderscript
and contains the entry points into the <code>helloworld.rs</code> native code. This file does
@@ -550,8 +556,8 @@
</li>
</ul>
- <p>Each file has its own distinct use. The following section demonstrates in detail how the
- sample works:</p>
+ <p>Each file has its own distinct use. The following files comprise the main parts of the sample and
+ demonstrate in detail how the sample works:</p>
<dl>
<dt><code>helloworld.rs</code></dt>
@@ -626,7 +632,7 @@
<dd>This class is generated by the Android build tools and is the reflected version of the
<code>helloworld.rs</code> Renderscript. It provides a a high level entry point into the
<code>helloworld.rs</code> native code by defining the corresponding methods that you can call
- from Android system APIs.</dd>
+ from the traditional framework APIs.</dd>
<dt><code>helloworld.bc</code> bytecode</dt>
diff --git a/docs/html/guide/topics/graphics/view-animation.jd b/docs/html/guide/topics/graphics/view-animation.jd
index ad27e1c..eff6f70 100644
--- a/docs/html/guide/topics/graphics/view-animation.jd
+++ b/docs/html/guide/topics/graphics/view-animation.jd
@@ -1,4 +1,6 @@
page.title=View Animation
+parent.title=Graphics
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/manifest/compatible-screens-element.jd b/docs/html/guide/topics/manifest/compatible-screens-element.jd
new file mode 100644
index 0000000..9fb0fd2
--- /dev/null
+++ b/docs/html/guide/topics/manifest/compatible-screens-element.jd
@@ -0,0 +1,108 @@
+page.title=<compatible-screens>
+@jd:body
+
+<dl class="xml">
+<dt>syntax:</dt>
+<dd>
+<pre>
+<<a href="#compatible-screens">compatible-screens</a>>
+ <<a href="#screen">screen</a> android:<a href="#screenSize">screenSize</a>=["small" | "normal" | "large" | "xlarge"]
+ android:<a href="#screenDensity">screenDensity</a>=["ldpi" | "mdpi" | "hdpi" | "xhdpi"] />
+ ...
+</compatible-screens>
+</pre>
+</dd>
+
+<dt>contained in:</dt>
+<dd><code><a
+href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></dd>
+
+<dt>description:</dt>
+<dd>Specifies each screen configuration with which the application is compatible. Only one instance
+of the {@code <compatible-screens>} element is allowed in the manifest, but it can
+contain multiple <code><screen></code> elements. Each <code><screen></code> element
+specifies a specific screen size-density combination with which the application is compatible.
+
+ <p>The Android system <em>does not</em> read the {@code <compatible-screens>} manifest
+element (neither at install-time nor at runtime). This element is informational only and may be used
+by external services (such as Android Market) to better understand the application's compatibility
+with specific screen configurations and enable filtering for users. Any screen configuration that is
+<em>not</em> declared in this element is a screen with which the application is <em>not</em>
+compatible. Thus, external services (such as Android Market) should not provide the application to
+devices with such screens.</p>
+
+ <p class="caution"><strong>Caution:</strong> Normally, <strong>you should not use this manifest
+element</strong>. Using this element can dramatically reduce the potential user base for your
+application, by not allowing users to install your application if they have a device with a screen
+configuration that you have not listed. You should use it only as a last resort, when the
+application absolutely does not work with all screen configurations. Instead of using this element,
+you should follow the guide to <a href="{@docRoot}guide/practices/screens_support.html">Supporting
+Multiple Screens</a>, in order to provide complete support for multiple screens, by adding
+alternative resources for different screen sizes and densities.</p>
+
+ <p>If you want to set only a minimum screen <em>size</em> for your your application, then you
+should use the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+<supports-screens>}</a> element. For example, if you want your application to be available
+only for <em>large</em> and <em>xlarge</em> screen devices, the <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+<supports-screens>}</a> element allows you to declare that your application does not
+support <em>small</em> and <em>normal</em> screen sizes. External services (such as Android
+Market) will filter your application accordingly. You can also use the <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+<supports-screens>}</a> element to declare whether the system should resize your
+application for different screen sizes.</p>
+
+ <p>Also see the <a href="{@docRoot}guide/appendix/market-filters.html">Market Filters</a>
+document for more information about how Android Market filters applications using this and
+other manifest elements.</p>
+
+</dd>
+
+<dt>child elements:</dt>
+<dd>
+ <dl class="tag-list">
+
+ <dt id="screen">{@code <screen>}</dt>
+ <dd>Specifies a single screen configuration with which the application is compatible.
+ <p>At least one instance of this element must be placed inside the {@code
+<compatible-screens>} element. This element <em>must include both</em> the {@code
+android:screenSize} and {@code android:screenDensity} attributes (if you do not declare both
+attributes, then the element is ignored).</p>
+
+ <p class="caps">attributes:</p>
+ <dl class="atn-list">
+ <dt id="screenSize"><code>android:screenSize</code></dt>
+ <dd><b>Required.</b> Specifies the screen size for this screen configuration.
+ <p>Accepted values:</p>
+ <ul>
+ <li>{@code small}</li>
+ <li>{@code normal}</li>
+ <li>{@code large}</li>
+ <li>{@code xlarge}</li>
+ </ul>
+ <p>For information about the different screen sizes, see <a
+href="{@docRoot}guide/practices/screens_support.html#range">Supporting Multiple Screens</a>.</p>
+ </dd>
+ <dt id="screenDensity"><code>android:screenDensity</code></dt>
+ <dd><b>Required.</b> Specifies the screen density for this screen configuration.
+ <p>Accepted values:</p>
+ <ul>
+ <li>{@code ldpi}</li>
+ <li>{@code mdpi}</li>
+ <li>{@code hdpi}</li>
+ <li>{@code xhdpi}</li>
+ </ul>
+ <p>For information about the different screen densities, see <a
+href="{@docRoot}guide/practices/screens_support.html#range">Supporting Multiple Screens</a>.</p>
+ </dd>
+ </dl>
+ </dd>
+ </dl>
+</dd>
+<dt>introduced in:</dt>
+<dd>API Level 9</dd>
+<dt>see also:</dt>
+<dd><a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></dd>
+<dd><a href="{@docRoot}guide/appendix/market-filters.html">Market Filters</a></dd>
+</dl>
diff --git a/docs/html/guide/topics/manifest/supports-screens-element.jd b/docs/html/guide/topics/manifest/supports-screens-element.jd
index 64a7a58..92c769e 100644
--- a/docs/html/guide/topics/manifest/supports-screens-element.jd
+++ b/docs/html/guide/topics/manifest/supports-screens-element.jd
@@ -6,7 +6,8 @@
<dt>syntax:</dt>
<dd>
<pre class="stx">
-<supports-screens android:<a href="#small">smallScreens</a>=["true" | "false"]
+<supports-screens android:<a href="#resizeable">resizeable</a>=["true" | "false"]
+ android:<a href="#small">smallScreens</a>=["true" | "false"]
android:<a href="#normal">normalScreens</a>=["true" | "false"]
android:<a href="#large">largeScreens</a>=["true" | "false"]
android:<a href="#xlarge">xlargeScreens</a>=["true" | "false"]
@@ -19,17 +20,33 @@
<dt>description:</dt>
<dd>Lets you specify the screen dimensions the
-application supports. By default a modern application (using API Level 4 or higher) supports all
-screen sizes and must explicitly disable certain screen sizes here;
-older applications are assumed to support only the "normal"
-screen size. Note that screen size is a separate axis from
-density. Screen size is determined as the available pixels to an application
-after density scaling has been applied.
+application supports. By default, a modern application (using API Level 4 or higher) supports all
+screen sizes; older applications are assumed to support only the "normal" screen size. Screen
+size is determined as the available pixels to an application after density scaling has been
+applied. (Note that screen size is a separate axis from screen density.)
-<p>Based on the target device screen density, the Android
-framework will scale down assets by a factor of 0.75 (low dpi screens)
-or scale them up by a factor of 1.5 (high dpi screens).
-The screen density is expressed as dots-per-inch (dpi).</p>
+<p>An application "supports" a given screen size if it fills the entire screen and works as
+expected. By default, the system will resize your application to fill the screen, if you have set
+either <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+minSdkVersion}</a> or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+targetSdkVersion}</a> to {@code "4"} or higher. Resizing works well for most applications and
+you don't have to do any extra work to make your application work on larger screens.</p>
+
+<p>In addition to allowing the system to resize your application, you can add additional support
+for different screen sizes by providing <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
+layout resources</a> for different sizes. For instance, you might want to modify the layout
+of an activity when it is on a tablet or similar device that has an <em>xlarge</em> screen.</p>
+
+<p>If your application does not support <em>large</em> or <em>xlarge</em> screens, then you should
+declare that it is not resizeable by setting <a href="#resizeable">{@code android:resizeable}</a> to
+{@code "false"}, so that the system will not resize your application on larger screens.</p>
+
+<p>If your application does not support <em>small</em> screens, then
+there isn't much the system can do to make the application work well on a smaller screen, so
+external services (such as Android Market) should not allow users to install the application on such
+screens.</p>
+
<p>For more information, see
<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
@@ -38,16 +55,40 @@
<dt>attributes:</dt>
<dd>
-<dl class="attr"><dt><a name="small"></a>{@code android:smallScreens}</dt>
+<dl class="attr">
+
+ <dt><a name="resizeable"></a>{@code android:resizeable}</dt>
+ <dd>Indicates whether the application is resizeable for different screen sizes. This attribute is
+true, by default, if you have set either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "4"} or higher. Otherwise, it is false by default. If set false, the system will not resize
+your application when run on <em>large</em> or <em>xlarge</em> screens. Instead, the
+application appears in a "postage stamp" that equals the <em>normal</em> screen size that your
+application does support. This is less than an ideal experience for users, because the
+application appears smaller than the available screen, but it might help your application run
+normally if it were designed only for the <em>normal</em> screen size and some behaviors do not work
+when resized.</p>
+ <p>To provide the best experience on all screen sizes, you should allow resizing and, if your
+application does not work well on larger screens, follow the guide to <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> to enable
+additional screen support.</p>
+ </dd>
+
+
+ <dt><a name="small"></a>{@code android:smallScreens}</dt>
<dd>Indicates whether the application supports smaller screen form-factors.
A small screen is defined as one with a smaller aspect ratio than
the "normal" (traditional HVGA) screen. An application that does
not support small screens <em>will not be available</em> for
- small screen devices, because there is little the platform can do
- to make such an application work on a smaller screen. If the application has set the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element's
-{@code android:minSdkVersion} or {@code android:targetSdkVersion} attribute to "4" or higher,
-the default value for this is "true", any value less than "4" results in this set to "false".
+ small screen devices from external services (such as Android Market), because there is little
+the platform can do
+ to make such an application work on a smaller screen. If the application has set either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "4"} or higher,
+the default value for this is {@code "true"}, any value less than {@code "4"} results in this set to
+{@code "false"}.
</dd>
<dt><a name="normal"></a>{@code android:normalScreens}</dt>
@@ -61,38 +102,44 @@
<dt><a name="large"></a>{@code android:largeScreens}</dt>
<dd>Indicates whether the application supports larger screen form-factors.
A large screen is defined as a screen that is significantly larger
- than a "normal" phone screen, and thus may require some special care
- on the application's part to make good use of it. An application that
- does not support large screens (declares this "false")—but does support "normal" or
-"small" screens—will be placed as a "postage stamp" on
- a large screen, so that it retains the dimensions it was originally
- designed for. If the application has set the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element's
-{@code android:minSdkVersion} or {@code android:targetSdkVersion} attribute to "4" or higher,
-the default value for this is "true", any value less than "4" results in this set to "false".
+ than a "normal" phone screen, and thus might require some special care
+ on the application's part to make good use of it, though it may rely on resizing by the
+system to fill the screen. If the application has set either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "4"} or higher,
+the default value for this is {@code "true"}, any value less than {@code "4"} results in this set to
+{@code "false"}.
</dd>
-
+
<dt><a name="xlarge"></a>{@code android:xlargeScreens}</dt>
<dd>Indicates whether the application supports extra large screen form-factors.
An xlarge screen is defined as a screen that is significantly larger
than a "large" screen, such as a tablet (or something larger) and may require special care
- on the application's part to make good use of it. An application that
- does not support xlarge screens (declares this "false")—but does support "large",
-"normal", or "small" screens—will be placed as a "postage stamp" on
- an xlarge screen, so that it retains the dimensions it was originally
- designed for. If the application has set the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element's
-{@code android:minSdkVersion} or {@code android:targetSdkVersion} attribute to "4" or higher,
-the default value for this is "true", any value less than "4" results in this set to "false".
+ on the application's part to make good use of it, though it may rely on resizing by the
+system to fill the screen. If the application has set either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "4"} or higher,
+the default value for this is {@code "true"}, any value less than {@code "4"} results in this set to
+{@code "false"}.
<p>This attribute was introduced in API Level 9.</p>
</dd>
<dt><a name="any"></a>{@code android:anyDensity}</dt>
<dd>Indicates whether the application includes resources to accommodate any screen
density. Older applications (before API Level 4) are assumed unable to
- accomodate all densities and this is "false" by default. Applications using
- API Level 4 or higher are assumed able to and this is "true" by default.
+ accomodate all densities and this is {@code "false"} by default. If the application has set
+either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "4"} or higher,
+the default value for this is {@code "true"}. Otherwise, it is {@code "false"}.
You can explicitly supply your abilities here.
+ <p>Based on the "standard" device screen density (medium dpi), the Android framework will scale
+down application assets by a factor of 0.75 (low dpi screens) or scale them up by a factor of 1.5
+(high dpi screens), when you don't provide alternative resources for a specifc screen density. The
+screen density is expressed as dots-per-inch (dpi).</p>
</dd>
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index 5242126..0828e8b 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -644,33 +644,46 @@
</tr>
<tr>
- <td rowspan="4">Touchscreen</td>
+ <td rowspan="5">Touchscreen</td>
+ <td><code>android.hardware.faketouch</code></td>
+ <td>The application uses basic touch interaction events, such as "click down", "click
+up", and drag.</td>
+ <td>When declared, this indicates that the application is compatible with a device that offers an
+emulated touchscreen (or better). A device that offers an emulated touchscreen provides a user input
+system that can emulate a subset of touchscreen capabilities. An example of such an input system is
+a mouse or remote control that drives an on-screen cursor. If your application does not require
+complicated gestures and you want your application available to devices with an emulated
+touchscreen, you should declare this feature.</td>
+</tr>
+<tr>
<td><code>android.hardware.touchscreen</code></td>
- <td>The application uses touchscreen capabilities on the device.</td>
+ <td>The application uses touchscreen capabilities, for gestures more interactive
+than basic touches, such as a fling. This is a superset of the faketouch features.</td>
<td></td>
</tr>
<tr>
<td><code>android.hardware.touchscreen.multitouch</code></td>
- <td>Subfeature. The application uses basic two-point multitouch capabilities on the device
-screen.</td>
+ <td>The application uses basic two-point multitouch capabilities on the device
+screen, such as for pinch gestures, but does not need to track touches independently. This
+is a superset of touchscreen features.</td>
<td>If declared with the <code>"android:required="true"</code> attribute, this
-subfeature implicitly declares the <code>android.hardware.touchscreen</code>
+implicitly declares the <code>android.hardware.touchscreen</code>
parent feature. </td>
</tr>
<tr>
<td><code>android.hardware.touchscreen.multitouch.distinct</code></td>
<td>Subfeature. The application uses advanced multipoint multitouch
capabilities on the device screen, such as for tracking two or more points fully
-independently.</td>
+independently. This is a superset of multitouch features.</td>
<td rowspan="2">If declared with the <code>"android:required="true"</code> attribute, this
-subfeature implicitly declares the
+implicitly declares the
<code>android.hardware.touchscreen.multitouch</code> parent feature. </td>
</tr>
<tr>
<td><code>android.hardware.touchscreen.multitouch.jazzhand</code></td>
- <td>Subfeature. The application uses advanced multipoint multitouch
+ <td>The application uses advanced multipoint multitouch
capabilities on the device screen, for tracking up to five points fully
-independently.</td>
+independently. This is a superset of distinct multitouch features.</td>
</tr>
<tr>
diff --git a/docs/html/guide/topics/manifest/uses-library-element.jd b/docs/html/guide/topics/manifest/uses-library-element.jd
index f1b5e70..1d38c1a 100644
--- a/docs/html/guide/topics/manifest/uses-library-element.jd
+++ b/docs/html/guide/topics/manifest/uses-library-element.jd
@@ -3,34 +3,101 @@
<dl class="xml">
<dt>syntax:</dt>
-<dd><pre><uses-library android:<a href="#nm">name</a>="<i>string</i>" /></pre></dd>
-
+<dd>
+<pre class="stx">
+<uses-library android:<a href="#nm">name</a>="<var>string</var>"
+ android:<a href="#rq">required</a>=["true" | "false"] />
+</pre>
+</dd>
<dt>contained in:</dt>
-<dd><code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code></dd>
-
+<dd>
+ <code>
+ <a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a>
+ </code>
+</dd>
<dt>description:</dt>
-<dd>Specifies a shared library that the application must be linked against.
-This element tells the system to include the library's code in the class
-loader for the package.
-
-<p>
-All of the {@code android} packages (such as {@link android.app},
-{@link android.content}, {@link android.view}, and {@link android.widget})
-are in the default library that all applications are automatically linked
-against. However, some packages (such as {@code maps} and {@code awt} are
-in separate libraries that are not automatically linked. Consult the
-documentation for the packages you're using to determine which library
-contains the package code.
-</p></dd>
-
+<dd>
+ Specifies a shared library that the application must be linked against.
+ This element tells the system to include the library's code in the class
+ loader for the package.
+ <p>
+ All of the {@code android} packages (such as {@link android.app},
+ {@link android.content}, {@link android.view}, and {@link android.widget})
+ are in the default library that all applications are automatically linked
+ against. However, some packages (such as {@code maps}) are
+ in separate libraries that are not automatically linked. Consult the
+ documentation for the packages you're using to determine which library
+ contains the package code.
+ </p>
+ <p>
+ This element also affects the installation of the application on a particular device and
+ the availability of the application in Android Market:
+ </p>
+ <dl>
+ <dt><em>Installation</em></dt>
+ <dd>
+ If this element is present and its {@code android:required} attribute is set to
+ {@code true}, the {@link android.content.pm.PackageManager} framework won't let the user
+ install the application unless the library is present on the user's device.
+ </dd>
+ <dt><em>Market</em></dt>
+ <dd>
+ Android Market filters applications based on the libraries installed on the
+ user's device. For more information about filtering, see the topic
+ <a href="{@docRoot}/guide/appendix/market-filters.html">Market Filters</a>.
+ </dd>
+ </dl>
+ <p>
+ The {@code android:required} attribute is described in detail in the following section.
+ </p>
+</dd>
<dt>attributes:</dt>
-<dd><dl class="attr">
-<dt><a name="nm"></a>{@code android:name}</dt>
-<dd>The name of the library.</dd>
-</dl></dd>
-
+<dd>
+ <dl class="attr">
+ <dt><a name="nm"></a>{@code android:name}</dt>
+ <dd>
+ The name of the library. The name is provided by the
+ documentation for the package you are using. An example of this is
+ "<code>android.test.runner</code>", a package that contains Android test
+ classes.
+ </dd>
+ <dt><a name="rq"></a>{@code android:required}</dt>
+ <dd>
+ Boolean value that indicates whether the application requires the
+ library specified by {@code android:name}:
+ <ul>
+ <li>
+ <code>"true"</code>: The application does not function without this
+ library. The system will not allow the application on a device that does not
+ have the library.
+ </li>
+ <li>
+ <code>"false"</code>: The application can use the
+ library if present, but is designed to function without it if necessary.
+ The system will allow the application to be installed, even if the library is
+ not present. If you use <code>"false"</code>, you are responsible for
+ checking at runtime that the library is available.
+ <p>
+ To check for a library, you can use reflection to determine
+ if a particular class is available.
+ </p>
+ </li>
+ </ul>
+ <p>
+ The default is <code>"true"</code>.
+ </p>
+ <p>Introduced in: API Level 7.</p>
+ </dd>
+ </dl>
+</dd>
<!-- ##api level indication## -->
<dt>introduced in:</dt>
<dd>API Level 1</dd>
-</dl>
+<dt>see also:</dt>
+<dd>
+ <ul>
+ <li>{@link android.content.pm.PackageManager}</li>
+ </ul>
+</dd>
+</dl>
\ No newline at end of file
diff --git a/docs/html/guide/topics/nfc/index.jd b/docs/html/guide/topics/nfc/index.jd
new file mode 100644
index 0000000..c4917b4
--- /dev/null
+++ b/docs/html/guide/topics/nfc/index.jd
@@ -0,0 +1,613 @@
+page.title=Near Field Communication
+@jd:body
+
+ <div id="qv-wrapper">
+ <div id="qv">
+ <h2>Near Field Communication quickview</h2>
+
+ <ol>
+ <li><a href="#api">API Overview</a></li>
+
+ <li><a href="#manifest">Declaring Android Manifest Elements</a></li>
+
+ <li>
+ <a href="#dispatch">The Tag Dispatch System</a>
+
+ <ol>
+ <li><a href="#foreground-dispatch">Using the foreground dispatch system</a></li>
+
+ <li><a href="#intent-dispatch">Using the intent dispatch system</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#ndef">NDEF messages</a></li>
+
+ <li><a href="#read">Reading an NFC tag</a></li>
+
+ <li><a href="#write">Writing to an NFC tag</a></li>
+
+ <li><a href="#p2p">Peer to Peer Data Exchange</a></li>
+ </ol>
+ </div>
+ </div>
+
+ <p>Near Field Communication (NFC) is a set of short-range wireless technologies, typically
+ requiring a distance of 4cm or less. NFC operates at 13.56mhz, and at rates ranging
+ from 106 kbit/s to 848 kbit/s. NFC communication always involves an initiator and a target.
+ The initiator actively generates an RF field that can power a passive target. This
+ enables NFC targets to take very simple form factors such as tags, stickers or cards that do
+ not require power. NFC peer-to-peer communication is also possible, where both devices
+ are powered.
+ <p>
+ Compared to other wireless technologies such as Bluetooth or WiFi, NFC provides much lower
+ bandwidth and range, but enables low-cost, un-powered targets
+ and does not require discovery or pairing. Interactions can be initiated with just a tap.
+ <p>
+ An Android device with NFC hardware will typically act as an initiator when the screen is
+ on. This mode is also known as NFC reader/writer. It will actively look for NFC tags and start
+ activities to handle them. Android 2.3.3 also has some limited P2P support.
+ <p>
+ Tags can range in complexity, simple tags just offer read/write semantics, sometimes
+ with one-time-programmable areas to make the card read-only. More complex tags offer
+ math operations, and have cryptographic hardware to authenticate access to a sector.
+ The most sophisticated tags contain operating environments, allowing
+ complex interactions with code executing on the tag.
+
+ <h2 id="api">API Overview</h2>
+
+ <p>The {@link android.nfc} package contains the high-level classes to interact
+ with the local device's NFC adapter, to represent discovered tags, and to use
+ the NDEF data format.
+
+ <table>
+ <tr>
+ <th>Class</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.NfcManager}</td>
+
+
+ <td>A high level manager class that enumerates the NFC adapters on this Android device.
+ Since most Android devices only have one NFC adapter, you can just use the static helper
+ {@link android.nfc.NfcAdapter#getDefaultAdapter(Context)} for most situations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.NfcAdapter}</td>
+
+ <td>Represents the local NFC adapter. Defines the intent's used to request
+ tag dispatch to your activity, and provides methods to register for foreground
+ tag dispatch and foreground NDEF push. Foreground NDEF push is the only
+ peer-to-peer support that is currently provided in Android.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.NdefMessage} and {@link android.nfc.NdefRecord}</td>
+
+ <td>NDEF is an NFC Forum defined data structure, designed to efficiently
+ store data on NFC tags, such as text, URL's, and other MIME types. A
+ {@link android.nfc.NdefMessage} acts as a
+ container for the data that you want to transmit or read. One {@link android.nfc.NdefMessage}
+ object contains zero or more {@link android.nfc.NdefRecord}s. Each NDEF record
+ has a type such as text, URL, smart poster, or any MIME data. The type of the
+ first NDEF record in the NDEF message is used to dispatch a tag to an activity
+ on Android.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.Tag}</td>
+
+ <td>Represents a passive NFC target. These can come in many form factors such as
+ a tag, card, key fob, or even a phone doing card emulation. When a tag is
+ discovered, a {@link android.nfc.Tag} object is created and wrapped inside an
+ Intent. The NFC dispatch system sends the intent to a compatible actvitiy
+ using <code>startActivity()</code>. You can use the {@link
+ android.nfc.Tag#getTechList getTechList()} method to determine the technologies supported by
+ this tag and create the corresponding {@link android.nfc.tech.TagTechnology} object with one
+ of classes provided by {@link android.nfc.tech}.</td>
+ </tr>
+ </table>
+
+ <p>The {@link android.nfc.tech} package contains classes to query properties
+ and perform I/O operations on a tag. The classes are divided to represent different
+ NFC technologies that can be available on a tag.
+
+ <p>The {@link android.nfc.tech} package contains classes to query properties and perform I/O
+ operations on a tag. The classes are divided to represent different NFC technologies that can be
+ available on a Tag:</p>
+
+ <table>
+ <tr>
+ <th>Class</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.TagTechnology}</td>
+
+ <td>The interface that all tag technology classes must implement.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcA}</td>
+
+ <td>Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcB}</td>
+
+ <td>Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcF}</td>
+
+ <td>Provides access to NFC-F (JIS 6319-4) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcV}</td>
+
+ <td>Provides access to NFC-V (ISO 15693) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.IsoDep}</td>
+
+ <td>Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.Ndef}</td>
+
+ <td>Provides access to NDEF data and operations on NFC tags that have been formatted as NDEF.
+ </td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NdefFormatable}</td>
+
+ <td>Provides a format operations for tags that may be NDEF formatable.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.MifareClassic}</td>
+
+ <td>Provides access to MIFARE Classic properties and I/O operations, if this
+ Android device supports MIFARE.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.MifareUltralight}</td>
+
+ <td>Provides access to MIFARE Ultralight properties and I/O operations, if this
+ Android device supports MIFARE.</td>
+ </tr>
+ </table>
+
+ <h2 id="manifest">Declaring Android Manifest elements</h2>
+
+ <p>Before you can access a device's NFC hardware and properly handle NFC intents, declare these
+ items in your <code>AndroidManifest.xml</code> file:</p>
+
+ <ol>
+ <li>The NFC <code><uses-permission></code> element to access the NFC hardware:
+ <pre>
+<uses-permission android:name="android.permission.NFC" />
+</pre>
+ </li>
+
+ <li>The minimum SDK version that your application can support. API level 9 only supports
+ limited tag dispatch via {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED},
+ and only gives access to NDEF messages via the {@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES}
+ extra. No other tag properties or I/O operations are accessible. You probably want
+ to use API level 10 which includes comprehensive reader/writer support.
+
+<pre class="pretty-print">
+<uses-sdk android:minSdkVersion="10"/>
+</pre>
+ </li>
+
+ <li>The uses-feature element so that your application can show up in the Android Market for
+ devices that have NFC hardware:
+ <pre>
+<uses-feature android:name="android.hardware.nfc" android:required="true" />
+</pre>
+ </li>
+
+ <li>The NFC intent filter to tell the Android system your Activity can handle NFC data. Specify
+ one or more of these three intent filters:
+ <pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+ <data android:mimeType="<em>mime/type</em>" />
+</intent-filter>
+
+<intent-filter>
+ <action android:name="android.nfc.action.TECH_DISCOVERED"/>
+ <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
+ android:resource="@xml/<em>nfc_tech_filter</em>.xml" />
+</intent-filter>
+
+<intent-filter>
+ <action android:name="android.nfc.action.TAG_DISCOVERED"/>
+</intent-filter>
+</pre>
+
+ <p>The three intent filters are prioritized and behave in specific ways. Declare only the
+ ones that your Activity needs to handle. For more information on how to handle these filters,
+ see the section about <a href="#dispatch">The Tag Dispatch System</a>.</p>
+ </li>
+ </ol>
+
+ <p>View the <a href=
+ "../../../resources/samples/NFCDemo/AndroidManifest.html">AndroidManifest.xml</a> from the
+ NFCDemo sample to see a complete example.</p>
+
+ <h2 id="dispatch">The Tag Dispatch System</h2>
+
+ <p>When an Android device scans an NFC tag, the desired behavior is to have the most appropriate
+ Activity handle the intent without asking the user what appplication to use. Because devices scan
+ NFC tags at a very short range, it is likely that making users manually select an Activity forces
+ them to move the device away from the tag and break the connection. You should develop your
+ Activity to only handle the NFC tags that your Activity cares about to prevent the Activity
+ Chooser from appearing. Android provides two systems to help you correctly identify an NFC tag
+ that your Activity should handle: the Intent dispatch system and the foreground Activity dispatch
+ system.</p>
+
+ <p>The intent dispatch system checks the intent filters of all the Activities along with the
+ types of data that the Activities support to find the best Activity that can handle the NFC tag.
+ If multiple Activities specify the same intent filter and data to handle, then the Activity
+ Chooser is presented to the user as a last resort.</p>
+
+ <p>The foreground dispatch system allows an Activity application to override the intent dispatch
+ system and have priority when an NFC tag is scanned. The Activity handling the request must be
+ running in the foreground of the device. When an NFC tag is scanned and matches the intent and
+ data type that the foreground dispatch Activity defines, the intent is immediately sent to the
+ Activity even if another Activity can handle the intent. If the Activity cannot handle the
+ intent, the foreground dispatch system falls back to the intent dispatch system.</p>
+
+ <h3 id="intent-dispatch">Using the intent dispatch system</h3>
+
+ <p>The intent dispatch system specifies three intents that each have a priority. The intents that
+ start when a device scans a tag depend on the type of tag scanned. In general, the intents are
+ started in the following manner:</p>
+
+ <ul>
+ <li>
+ <code>android.nfc.action.NDEF_DISCOVERED</code>: This intent starts when a tag that contains
+ an NDEF payload is scanned. This is the highest priority intent. The Android system does not
+ let you specify this intent generically to handle all data types. You must specify
+ <code><data></code> elements in the <code>AndroidManifest.xml</code> along with this
+ intent to correctly handle NFC tags that start this intent. For example, to handle a
+ <code>NDEF_DISCOVERED</code> intent that contains plain text, specify the following filter in
+ your <code>AndroidManifest.xml</code> file:
+ <pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+ <data android:mimeType="text/plain" />
+</intent-filter>
+</pre>
+
+ <p>If the <code>NDEF_DISCOVERED</code> intent is started, the <code>TECH_DISCOVERED</code>
+ and <code>TAG_DISCOVERED</code> intents are not started. This intent does not start if an
+ unknown tag is scanned or if the tag does not contain an NDEF payload.</p>
+ </li>
+
+ <li><code>android.nfc.action.TECH_DISCOVERED</code>: If the <code>NDEF_DISCOVERED</code> intent
+ does not start or is not filtered by any Activity on the device, this intent starts if the tag
+ is known. The <code>TECH_DISCOVERED</code> intent requires that you specify the technologies
+ that you want to support in an XML resource file. For more information, see the section about
+ <a href="#technology-resources">Specifying tag technologies to handle</a>.</li>
+
+ <li><code>android.nfc.action.TAG_DISCOVERED</code>: This intent starts if no Activities handle
+ the <code>NDEF_DISCOVERED</code> and <code>TECH_DISCOVERED</code> intents or if the tag that is
+ scanned is unknown.</li>
+ </ul>
+
+ <h4 id="tech">Specifying tag technologies to handle</h4>
+
+ <p>If your Activity declares the <code>android.nfc.action.TECH_DISCOVERED</code> intent in your
+ <code>AndroidManifest.xml</code> file, you must create an XML resource file that specifies the
+ technologies that your Activity supports. The following sample defines all of the technologies.
+ Specifiying multiple technologies within the same list tells the system
+ to filter tags that support all of the technologies. The example below never filters a tag
+ because no tag supports all of the technologies at once.
+ You can remove the ones that you do not need. Save this file (you can name it anything you wish)
+ in the <code><project-root>/res/xml</code> folder.</p>
+ <pre>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <tech-list>
+ <tech>android.nfc.tech.IsoDep</tech>
+ <tech>android.nfc.tech.NfcA</tech>
+ <tech>android.nfc.tech.NfcB</tech>
+ <tech>android.nfc.tech.NfcF</tech>
+ <tech>android.nfc.tech.NfcV</tech>
+ <tech>android.nfc.tech.Ndef</tech>
+ <tech>android.nfc.tech.NdefFormatable</tech>
+ <tech>android.nfc.tech.MifareClassic</tech>
+ <tech>android.nfc.tech.MifareUltralight</tech>
+ </tech-list>
+</resources>
+</pre>
+
+You can also specify multiple filter lists. In this case, a tag must match all of the
+technologies within one of the lists. The following example filters for
+cards that support the NfcA and Ndef technology or support the
+NfcB and Ndef technology.
+
+<pre>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <tech-list>
+ <tech>android.nfc.tech.NfcA</tech>
+ <tech>android.nfc.tech.Ndef</tech>
+ </tech-list>
+</resources>
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <tech-list>
+ <tech>android.nfc.tech.NfcB</tech>
+ <tech>android.nfc.tech.Ndef</tech>
+ </tech-list>
+</resources>
+</pre>
+
+ <p>In your <code>AndroidManifest.xml</code> file, specify the resource file that you just created
+ in the <code><meta-data></code> element inside the <code><intent-filter></code>
+ element like in the following example:</p>
+ <pre>
+<intent-filter>
+ <action android:name="android.nfc.action.TECH_DISCOVERED"/>
+ <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
+ android:resource="@xml/nfc_tech_filter.xml" />
+</intent-filter>
+</pre>
+
+ <h3 id="foreground-dispatch">Using the foreground dispatch system</h3>
+
+ <p>The foreground dispatch system allows an Activity to intercept an intent and claim priority
+ over other Activities that handle the same intent. The system is easy to use and involves
+ constructing a few data structures for the Android system to be able to send the appropriate
+ intents to your application. To enable the foreground dispatch system:</p>
+
+ <ol>
+ <li>Add the following code in the onCreate() method of your Activity:
+
+ <ol type="a">
+ <li>Create a {@link android.app.PendingIntent} object so the Android system can populate it
+ with the details of the tag when it is scanned
+ <pre>
+PendingIntent pendingIntent = PendingIntent.getActivity(
+ this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
+</pre>
+ </li>
+
+ <li>Declare intent filters to handle the intents that you want to intercept. The foreground
+ dispatch system checks the specified intent filters with the intent that is received when
+ the device scans a tag. If they match, then your application handles the intent. If it does
+ not match, the foreground dispatch system falls back to the intent dispatch system.
+ Specifying a <code>null</code> array of intent filters and for the technology filters,
+ you receive a <code>TAG_DISCOVERED</code> intent for all tags discovered. Note that the
+ snippet below handles all MIME types. You should only handle the ones that you need.
+ <pre>
+ IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
+ try {
+ ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
+ You should specify only the ones that you need. */
+ }
+ catch (MalformedMimeTypeException e) {
+ throw new RuntimeException("fail", e);
+ }
+ intentFiltersArray = new IntentFilter[] {
+ ndef,
+ };
+</pre>
+ </li>
+
+ <li>Set up an array of tag technologies that your application wants to handle. Call the
+ <code>Object.class.getName()</code> method to obtain the class of the technology that you
+ want to support.
+ <pre>
+
+ techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
+
+</pre>
+ </li>
+ </ol>
+ </li>
+
+ <li>Override the following Activity lifecycle callbacks and add logic to enable and disable the
+ foreground dispatch when the Activity loses ({@link android.app.Activity#onPause onPause()})
+ and regains ({@link android.app.Activity#onResume onResume()}) focus. {@link
+ android.nfc.NfcAdapter#enableForegroundDispatch} must best called from the main thread and only
+ when the activity is in the foreground (calling in {@link android.app.Activity#onResume
+ onResume()} guarantees this). You also need to implement the {@link
+ android.app.Activity#onNewIntent onNewIntent} callback to process the data from the scanned NFC
+ tag.
+ <pre>
+public void onPause() {
+ super.onPause();
+ mAdapter.disableForegroundDispatch(this);
+}
+
+public void onResume() {
+ super.onResume();
+ mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
+}
+
+public void onNewIntent(Intent intent) {
+ Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+ //do something with tagFromIntent
+}
+</pre>
+ </li>
+ </ol>
+
+ <p>See the <a href=
+ "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">ForegroundDispatch</a>
+ sample from API Demos for the complete sample.</p>
+
+ <h2 id="ndef">Working with Data on NFC tags</h2>
+
+ <p>Data on NFC tags are encoded in raw bytes, so you must convert the bytes to something human
+ readable if you are presenting the data to the user. When writing to NFC tags, you must write
+ them in bytes as well. Android provides APIs to help write messages that conform to the NDEF
+ standard, which was developed by the <a href="http://www.nfc-forum.org/specs/">NFC Forum</a> to
+ standardized data on tags. Using this standard ensures that your data will be supported by all
+ Android NFC devices if you are writing to tags. However, many tag technologies use their own
+ standard for storing data and are supported by Android as well, but you have to implement your
+ own protocol stack to read and write to these tags. You can find a full list of the supported
+ technologies in {@link android.nfc.tech} and an overview of the technolgies in the {@link
+ android.nfc.tech.TagTechnology} interface. This section is a brief overview of how to work with
+ NDEF messages in the context of the Android system. It is not meant to be a complete discussion
+ of the NDEF specification, but highlights the main things that you need to be aware of when
+ working with NDEF messages in Android.</p>
+
+ <p>To facilitate working with NDEF messages, Android provides the {@link android.nfc.NdefRecord}
+ and {@link android.nfc.NdefMessage} to encapsulate the raw bytes that represent NDEF messages. An
+ {@link android.nfc.NdefMessage} is the container for zero or more {@link
+ android.nfc.NdefRecord}s. Each {@link android.nfc.NdefRecord} has its own unique type name
+ format, record type, and ID to distinguish them from other records within the same {@link
+ android.nfc.NdefMessage}. You can store different types of records of varying length in a single
+ {@link android.nfc.NdefMessage}. The size constraint of the NFC tag determines how big your
+ {@link android.nfc.NdefMessage} can be.</p>
+
+ <p>Tags that support the {@link android.nfc.tech.Ndef} and {@link android.nfc.tech.NdefFormatable}
+ technologies return and accept {@link android.nfc.NdefMessage}
+ objects as parameters for read and write operations. You need to create your own logic to read
+ and write bytes for other tag technologies in {@link android.nfc.tech}.</p>
+
+ <p>You can download technical specifications for different types of NDEF message standards, such
+ as plain text and Smart Posters, at the <a href="http://www.nfc-forum.org/specs/">NFC Forum</a>
+ website. The NFCDemo sample application also declares sample <a href=
+ "{@docRoot}resources/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.html">
+ plain text and SmartPoster NDEF messages.</a></p>
+
+ <h2 id="read">Reading an NFC tag</h2>
+
+ <p>When a device comes in proximity to an NFC tag, the appropriate intent is started on the
+ device, notifying interested applications that a NFC tag was scanned. By previously declaring the
+ appropriate intent filter in your <code>AndroidManifest.xml</code> file or using foreground
+ dispatching, your application can request to handle the intent.</p>
+
+ <p>The following method (slightly modified from the NFCDemo sample application), handles the
+ <code>TAG_DISCOVERED</code> intent and iterates through an array obtained from the intent that
+ contains the NDEF payload:</p>
+ <pre>
+NdefMessage[] getNdefMessages(Intent intent) {
+ // Parse the intent
+ NdefMessage[] msgs = null;
+ String action = intent.getAction();
+ if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
+ Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
+ if (rawMsgs != null) {
+ msgs = new NdefMessage[rawMsgs.length];
+ for (int i = 0; i < rawMsgs.length; i++) {
+ msgs[i] = (NdefMessage) rawMsgs[i];
+ }
+ }
+ else {
+ // Unknown tag type
+ byte[] empty = new byte[] {};
+ NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
+ NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
+ msgs = new NdefMessage[] {msg};
+ }
+ }
+ else {
+ Log.e(TAG, "Unknown intent " + intent);
+ finish();
+ }
+ return msgs;
+}
+</pre>
+
+ <p>Keep in mind that the data that the device reads is in bytes, so you must implement your own
+ logic if you need to present the data in a readable format to the user. The classes in
+ <code>com.example.android.nfc.record</code> of the NFCDemo sample show you how to parse some
+ common types of NDEF messages such as plain text or a SmartPoster.</p>
+
+ <h2 id="write">Writing to an NFC tag</h2>
+
+ <p>Writing to an NFC tag involves constructing your NDEF message in bytes and using the
+ appropriate tag technology for the tag that you are writing to. The following code sample shows
+ you how to write a simple text message to a {@link android.nfc.tech.NdefFormatable} tag:</p>
+ <pre>
+NdefFormatable tag = NdefFormatable.get(t);
+Locale locale = Locale.US;
+final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
+String text = "Tag, you're it!";
+final byte[] textBytes = text.getBytes(Charsets.UTF_8);
+final int utfBit = 0;
+final char status = (char) (utfBit + langBytes.length);
+final byte[] data = Bytes.concat(new byte[] {(byte) status}, langBytes, textBytes);
+NdefRecord record = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
+try {
+ NdefRecord[] records = {text};
+ NdefMessage message = new NdefMessage(records);
+ tag.connect();
+ tag.format(message);
+}
+catch (Exception e){
+ //do error handling
+}
+</pre>
+
+ <h2 id="p2p">Peer-to-peer data exchange</h2>
+
+ <p>Support for simple peer-to-peer data exchange is supported by the foreground push feature,
+ which is enabled with the {@link android.nfc.NfcAdapter#enableForegroundNdefPush} method. To use
+ this feature:</p>
+
+ <ul>
+ <li>The Activity that is pushing the data must be in the foreground</li>
+
+ <li>You must encapsulate the data that you are sending in an {@link android.nfc.NdefMessage}
+ object</li>
+
+ <li>The NFC device that is receiving the pushed data (the scanned device) must support the
+ <code>com.android.npp</code> NDEF push protocol, which is optional for Android devices.</li>
+</li>
+ </ul>
+
+ <p class="note">If your Activity enables the foreground push feature and is in the foreground,
+ the standard intent dispatch system is disabled. However, if your Activity also enables
+ foreground dispatching, then it can still scan tags that match the intent filters set in the
+ foreground dispatching.</p>
+
+ <p>To enable foreground dispatching:</p>
+
+ <ol>
+ <li>Create an NdefMessage that contains the NdefRecords that you want to push onto the other
+ device.</li>
+
+ <li>Implement the {@link android.app.Activity#onResume onResume()} and {@link
+ android.app.Activity#onPause onPause()} callbacks in your Activity to appropriately handle the
+ foreground pushing lifecycle. You must call {@link
+ android.nfc.NfcAdapter#enableForegroundNdefPush} from the main thread and only when the
+ activity is in the foreground (calling in {@link android.app.Activity#onResume onResume()}
+ guarantees this).
+ <pre>
+public void onResume() {
+ super.onResume();
+ if (mAdapter != null)
+ mAdapter.enableForegroundNdefPush(this, myNdefMessage);
+}
+public void onPause() {
+ super.onPause();
+ if (mAdapter != null)
+ mAdapter.disableForegroundNdefPush(this);
+}
+</pre>
+ </li>
+ </ol>
+
+ <p>When the Activity is in the foreground, you can now tap the device to another device and push
+ the data to it. See the <a href=
+ "../../../resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.html">ForegroundNdefPush</a>
+ sample in API Demos for a simple example of peer-to-peer data exchange.</p>
diff --git a/docs/html/guide/topics/testing/activity_testing.jd b/docs/html/guide/topics/testing/activity_testing.jd
index 6392ad7..51121f4 100644
--- a/docs/html/guide/topics/testing/activity_testing.jd
+++ b/docs/html/guide/topics/testing/activity_testing.jd
@@ -1,4 +1,6 @@
page.title=Activity Testing
+parent.title=Testing
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/testing/contentprovider_testing.jd b/docs/html/guide/topics/testing/contentprovider_testing.jd
index e42e631..edaae8c 100644
--- a/docs/html/guide/topics/testing/contentprovider_testing.jd
+++ b/docs/html/guide/topics/testing/contentprovider_testing.jd
@@ -1,4 +1,6 @@
page.title=Content Provider Testing
+parent.title=Testing
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/testing/service_testing.jd b/docs/html/guide/topics/testing/service_testing.jd
index 77884779..eae8607 100644
--- a/docs/html/guide/topics/testing/service_testing.jd
+++ b/docs/html/guide/topics/testing/service_testing.jd
@@ -1,4 +1,6 @@
page.title=Service Testing
+parent.title=Testing
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/guide/topics/testing/testing_android.jd b/docs/html/guide/topics/testing/testing_android.jd
index 6f3048c..c8a3f6e 100755
--- a/docs/html/guide/topics/testing/testing_android.jd
+++ b/docs/html/guide/topics/testing/testing_android.jd
@@ -1,4 +1,6 @@
page.title=Testing Fundamentals
+parent.title=Testing
+parent.link=index.html
@jd:body
<div id="qv-wrapper">
@@ -653,10 +655,12 @@
It guides you through a more complex testing scenario that you develop against a
more realistic application.
</li>
+ <!-- sample is not available
<li>
- The sample test package <a href="{@docRoot}resources/samples/AlarmServiceTest"}>
+ The sample test package <a href="{@docRoot}resources/samples/AlarmServiceTest/index.html">
Alarm Service Test</a> is an example of testing a {@link android.app.Service}. It contains
a set of unit tests for the Alarm Service sample application's {@link android.app.Service}.
</li>
+ -->
</ul>
diff --git a/docs/html/guide/topics/testing/what_to_test.jd b/docs/html/guide/topics/testing/what_to_test.jd
index e8a27da..99061df 100644
--- a/docs/html/guide/topics/testing/what_to_test.jd
+++ b/docs/html/guide/topics/testing/what_to_test.jd
@@ -1,4 +1,6 @@
page.title=What To Test
+parent.title=Testing
+parent.link=index.html
@jd:body
<p>
As you develop Android applications, knowing what to test is as important as knowing how to
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index b8d1928..065f95a 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -38,7 +38,15 @@
<li>{@link android.app.ActionBar}</li>
<li>{@link android.view.Menu}</li>
</ol>
-
+
+ <h2>Related samples</h2>
+ <ol>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#ActionBar">API
+ Demos</a></li>
+ <li><a
+href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a></li>
+ </ol>
+
<h2>See also</h2>
<ol>
<li><a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a></li>
@@ -363,7 +371,7 @@
in the overflow menu as a normal menu item and you must respond to it from the {@link
android.app.Activity#onOptionsItemSelected onOptionsItemSelected()} callback method. (For a
guide to providing search functionality, see the <a
-href="{@docRoot}gudie/topics/search/index.html">Search</a> documentation.)</p>
+href="{@docRoot}guide/topics/search/index.html">Search</a> documentation.)</p>
<p>When the activity first starts, the system populates the Action Bar and overflow menu by calling
{@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()}.
@@ -397,7 +405,7 @@
<img src="{@docRoot}images/ui/actionbar-tabs.png" alt="" />
<p class="img-caption"><strong>Figure 6.</strong> Screenshot of tabs in the
Action Bar, from the <a
-href="{@docRoot}resources/samples/Honeycomb-Gallery/index.html">Honeycomb Gallery</a> sample
+href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a> sample
application.</p>
</div>
diff --git a/docs/html/guide/topics/ui/drag-drop.jd b/docs/html/guide/topics/ui/drag-drop.jd
new file mode 100644
index 0000000..c33c507
--- /dev/null
+++ b/docs/html/guide/topics/ui/drag-drop.jd
@@ -0,0 +1,995 @@
+page.title=Dragging and Dropping
+@jd:body
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>Quickview</h2>
+ <ul>
+ <li>
+ Allow users to move data within your Activity layout using graphical gestures.
+ </li>
+ <li>
+ Supports operations besides data movement.
+ </li>
+ <li>
+ Only works within a single application.
+ </li>
+ <li>
+ Requires API 11.
+ </li>
+ </ul>
+ <h2>In this document</h2>
+ <ol>
+ <li>
+ <a href="#AboutDragging">Overview</a>
+ <ol>
+ <li>
+ <a href="#DragDropLifecycle">The drag/drop process</a>
+ </li>
+ <li>
+ <a href="#AboutDragListeners">The drag event listener and callback method</a>
+ </li>
+ <li>
+ <a href="#AboutDragEvent">Drag events</a>
+ </li>
+ <li>
+ <a href="#AboutDragShadowBuilder">
+ The drag shadow</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#DesignDragOperation">Designing a Drag and Drop Operation</a>
+ <ol>
+ <li>
+ <a href="#StartDrag">Starting a drag</a>
+ </li>
+ <li>
+ <a href="#HandleStart">Responding to a drag start</a>
+ </li>
+ <li>
+ <a href="#HandleDuring">Handling events during the drag</a>
+ </li>
+ <li>
+ <a href="#HandleDrop">Responding to a drop</a>
+ </li>
+ <li>
+ <a href="#HandleEnd">Responding to a drag end</a>
+ </li>
+ <li>
+ <a href="#RespondEventSample">Responding to drag events: an example</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2>Key classes</h2>
+ <ol>
+ <li>
+ {@link android.view.View View}
+ </li>
+ <li>
+ {@link android.view.View.OnLongClickListener OnLongClickListener}
+ </li>
+ <li>
+ {@link android.view.View.OnDragListener OnDragListener}
+ </li>
+ <li>
+ {@link android.view.DragEvent DragEvent}
+ </li>
+ <li>
+ {@link android.view.View.DragShadowBuilder DragShadowBuilder}
+ </li>
+ <li>
+ {@link android.content.ClipData ClipData}
+ </li>
+ <li>
+ {@link android.content.ClipDescription ClipDescription}
+ </li>
+ </ol>
+ <h2>Related Samples</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}resources/samples/HoneycombGallery/index.html">
+ Honeycomb Gallery</a>.
+ </li>
+ <li>
+ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">
+DragAndDropDemo.java</a> and
+ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DraggableDot.html">
+DraggableDot.java</a> in <a href="{@docRoot}resources/samples/ApiDemos/index.html">Api Demos</a>.
+ </li>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/ui/ui-events.html">Handling UI Events</a>
+ </li>
+ </ol>
+ </div>
+</div>
+<p>
+ With the Android drag/drop framework, you can allow your users to move data
+ from one View to another View in the current layout using a graphical drag and drop gesture.
+ The framework includes a drag event class, drag listeners, and helper methods and classes.
+</p>
+<p>
+ Although the framework is primarily designed for data movement, you can use
+ it for other UI actions. For example, you could create an app that mixes colors when the user
+ drags a color icon over another icon. The rest of this topic, however, describes the
+ framework in terms of data movement.
+</p>
+<h2 id="AboutDragging">Overview</h2>
+<p>
+ A drag and drop operation starts when the user makes some gesture that you recognize as a
+ signal to start dragging data. In response, your application tells the system that the drag is
+ starting. The system calls back to your application to get a representation of the data
+ being dragged. As the user's finger moves this representation (a "drag shadow")
+ over the current layout, the system sends drag events to the drag event listener objects and
+ drag event callback methods associated with the {@link android.view.View} objects in the layout.
+ Once the user releases the drag shadow, the system ends the drag operation.
+</p>
+<p>
+ You create a drag event listener object ("listeners") from a class that implements
+ {@link android.view.View.OnDragListener}. You set the drag event listener object for a View
+ with the View object's
+ {@link android.view.View#setOnDragListener(View.OnDragListener) setOnDragListener()} method.
+ Each View object also has a {@link android.view.View#onDragEvent(DragEvent) onDragEvent()}
+ callback method. Both of these are described in more detail in the section
+ <a href="#AboutDragListeners">The drag event listener and callback method</a>.
+</p>
+<p class="note">
+ <strong>Note</strong>: For the sake of simplicity, the following sections refer to the routine
+ that receives drag events as the "drag event listener", even though it may actually
+ be a callback method.
+</p>
+<p>
+ When you start a drag, you include both the data you are moving and metadata describing this
+ data as part of the call to the system. During the drag, the system sends drag events to the
+ drag event listeners or callback methods of each View in the layout. The listeners or callback
+ methods can use the metadata to decide if they want to accept the data when it is dropped.
+ If the user drops the data over a View object, and that View object's listener or callback
+ method has previously told the system that it wants to accept the drop, then the system sends
+ the data to the listener or callback method in a drag event.
+</p>
+<p>
+ Your application tells the system to start a drag by calling the
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}
+ method. This tells the system to start sending drag events. The method also sends the data that
+ you are dragging.
+</p>
+<p>
+ You can call
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}
+ for any attached View in the current layout. The system only uses the View object to get access
+ to global settings in your layout.
+</p>
+<p>
+ Once your application calls
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()},
+ the rest of the process uses events that the system sends to the View objects in your current
+ layout.
+</p>
+<h3 id="DragDropLifecycle">The drag/drop process</h3>
+<p>
+ There are basically four steps or states in the drag and drop process:
+</p>
+<dl>
+ <dt>
+ <em>Started</em>
+ </dt>
+ <dd>
+ In response to the user's gesture to begin a drag, your application calls
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}
+ to tell the system to start a drag. The arguments
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}
+ provide the data to be dragged, metadata for this data, and a callback for drawing the
+ drag shadow.
+ <p>
+ The system first responds by calling back to your application to get a drag shadow. It
+ then displays the drag shadow on the device.
+ </p>
+ <p>
+ Next, the system sends a drag event with action type
+ {@link android.view.DragEvent#ACTION_DRAG_STARTED} to the drag event listeners for
+ all the View objects in the current layout. To continue to receive drag events,
+ including a possible drop event, a drag event listener must return <code>true</code>.
+ This registers the listener with the system. Only registered listeners continue to
+ receive drag events. At this point, listeners can also change the appearance of their
+ View object to show that the listener can accept a drop event.
+ </p>
+ <p>
+ If the drag event listener returns <code>false</code>, then it will not receive drag
+ events for the current operation until the system sends a drag event with action type
+ {@link android.view.DragEvent#ACTION_DRAG_ENDED}. By sending <code>false</code>, the
+ listener tells the system that it is not interested in the drag operation and
+ does not want to accept the dragged data.
+ </p>
+ </dd>
+ <dt>
+ <em>Continuing</em>
+ </dt>
+ <dd>
+ The user continues the drag. As the drag shadow intersects the bounding box of a View
+ object, the system sends one or more drag events to the View object's drag event
+ listener (if it is registered to receive events). The listener may choose to
+ alter its View object's appearance in response to the event. For example, if the event
+ indicates that the drag shadow has entered the bounding box of the View
+ (action type {@link android.view.DragEvent#ACTION_DRAG_ENTERED}), the listener
+ can react by highlighting its View.
+ </dd>
+ <dt>
+ <em>Dropped</em>
+ </dt>
+ <dd>
+ The user releases the drag shadow within the bounding box of a View that can accept the
+ data. The system sends the View object's listener a drag event with action type
+ {@link android.view.DragEvent#ACTION_DROP}. The drag event contains the data that was
+ passed to the system in the call to
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}
+ that started the operation. The listener is expected to return boolean <code>true</code> to
+ the system if code for accepting the drop succeeds.
+ <p>
+ Note that this step only occurs if the user drops the drag shadow within the bounding
+ box of a View whose listener is registered to receive drag events. If the user releases
+ the drag shadow in any other situation, no {@link android.view.DragEvent#ACTION_DROP}
+ drag event is sent.
+ </p>
+ </dd>
+ <dt>
+ <em>Ended</em>
+ </dt>
+ <dd>
+ After the user releases the drag shadow, and after the system sends out (if necessary)
+ a drag event with action type {@link android.view.DragEvent#ACTION_DROP}, the system sends
+ out a drag event with action type {@link android.view.DragEvent#ACTION_DRAG_ENDED} to
+ indicate that the drag operation is over. This is done regardless of where the user released
+ the drag shadow. The event is sent to every listener that is registered to receive drag
+ events, even if the listener received the {@link android.view.DragEvent#ACTION_DROP} event.
+ </dd>
+</dl>
+<p>
+ Each of these four steps is described in more detail in the section
+ <a href="#DesignDragOperation">Designing a Drag and Drop Operation</a>.
+</p>
+<h3 id="AboutDragListeners">The drag event listener and callback method</h3>
+<p>
+ A View receives drag events with either a drag event listener that implements
+ {@link android.view.View.OnDragListener} or with its
+ {@link android.view.View#onDragEvent(DragEvent)} callback method.
+ When the system calls the method or listener, it passes to them
+ a {@link android.view.DragEvent} object.
+</p>
+<p>
+ You will probably want to use the listener in most cases. When you design UIs, you usually
+ don't subclass View classes, but using the callback method forces you to do this in order to
+ override the method. In comparison, you can implement one listener class and then use it with
+ several different View objects. You can also implement it as an anonymous inline class. To
+ set the listener for a View object, call
+{@link android.view.View#setOnDragListener(android.view.View.OnDragListener) setOnDragListener()}.
+</p>
+<p>
+ You can have both a listener and a callback method for View object. If this occurs,
+ the system first calls the listener. The system doesn't call the callback method unless the
+ listener returns <code>false</code>.
+</p>
+<p>
+ The combination of the {@link android.view.View#onDragEvent(DragEvent)} method and
+ {@link android.view.View.OnDragListener} is analogous to the combination
+ of the {@link android.view.View#onTouchEvent(MotionEvent) onTouchEvent()} and
+ {@link android.view.View.OnTouchListener} used with touch events.
+</p>
+<h3 id="AboutDragEvent">Drag events</h3>
+<p>
+ The system sends out a drag event in the form of a {@link android.view.DragEvent} object. The
+ object contains an action type that tells the listener what is happening in the drag/drop
+ process. The object contains other data, depending on the action type.
+</p>
+<p>
+ To get the action type, a listener calls {@link android.view.DragEvent#getAction()}. There
+ are six possible values, defined by constants in the {@link android.view.DragEvent} class. These
+ are listed in <a href="#table1">table 1</a>.
+</p>
+<p>
+ The {@link android.view.DragEvent} object also contains the data that your application provided
+ to the system in the call to
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}.
+ Some of the data is valid only for certain action types. The data that is valid for each action
+ type is summarized in <a href="#table2">table 2</a>. It is also described in detail with
+ the event for which it is valid in the section
+ <a href="#DesignDragOperation">Designing a Drag and Drop Operation</a>.
+</p>
+<p class="table-caption" id="table1">
+ <strong>Table 1.</strong> DragEvent action types
+</p>
+<table>
+ <tr>
+ <th scope="col">getAction() value</th>
+ <th scope="col">Meaning</th>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_STARTED}</td>
+ <td>
+ A View object's drag event listener receives this event action type just after the
+ application calls
+{@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()} and
+ gets a drag shadow.
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_ENTERED}</td>
+ <td>
+ A View object's drag event listener receives this event action type when the drag shadow
+ has just entered the bounding box of the View. This is the first event action type the
+ listener receives when the drag shadow enters the bounding box. If the listener wants to
+ continue receiving drag events for this operation, it must return boolean
+ <code>true</code> to the system.
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_LOCATION}</td>
+ <td>
+ A View object's drag event listener receives this event action type after it receives a
+ {@link android.view.DragEvent#ACTION_DRAG_ENTERED} event while the drag shadow is
+ still within the bounding box of the View.
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_EXITED}</td>
+ <td>
+ A View object's drag event listener receives this event action type after it receives a
+ {@link android.view.DragEvent#ACTION_DRAG_ENTERED} and at least one
+ {@link android.view.DragEvent#ACTION_DRAG_LOCATION} event, and after the user has moved
+ the drag shadow outside the bounding box of the View.
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DROP}</td>
+ <td>
+ A View object's drag event listener receives this event action type when the user
+ releases the drag shadow over the View object. This action type is only sent to a View
+ object's listener if the listener returned boolean <code>true</code> in response to the
+ {@link android.view.DragEvent#ACTION_DRAG_STARTED} drag event. This action type is not
+ sent if the user releases the drag shadow on a View whose listener is not registered,
+ or if the user releases the drag shadow on anything that is not part of the current
+ layout.
+ <p>
+ The listener is expected to return boolean <code>true</code> if it successfully
+ processes the drop. Otherwise, it should return <code>false</code>.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_ENDED}</td>
+ <td>
+ A View object's drag event listener receives this event action type
+ when the system is ending the drag operation. This action type is not necessarily
+ preceded by an {@link android.view.DragEvent#ACTION_DROP} event. If the system sent
+ a {@link android.view.DragEvent#ACTION_DROP}, receiving the
+ {@link android.view.DragEvent#ACTION_DRAG_ENDED} action type does not imply that the
+ drop operation succeeded. The listener must call
+ {@link android.view.DragEvent#getResult()} to get the value that was
+ returned in response to {@link android.view.DragEvent#ACTION_DROP}. If an
+ {@link android.view.DragEvent#ACTION_DROP} event was not sent, then
+ {@link android.view.DragEvent#getResult()} returns <code>false</code>.
+ </td>
+ </tr>
+</table>
+<p class="table-caption" id="table2">
+ <strong>Table 2.</strong> Valid DragEvent data by action type</p>
+<table>
+ <tr>
+ <th scope="col">{@link android.view.DragEvent#getAction()} value</th>
+ <th scope="col">{@link android.view.DragEvent#getClipDescription()} value</th>
+ <th scope="col">{@link android.view.DragEvent#getLocalState()} value</th>
+ <th scope="col">{@link android.view.DragEvent#getX()} value</th>
+ <th scope="col">{@link android.view.DragEvent#getY()} value</th>
+ <th scope="col">{@link android.view.DragEvent#getClipData()} value</th>
+ <th scope="col">{@link android.view.DragEvent#getResult()} value</th>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_STARTED}</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_ENTERED}</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_LOCATION}</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_EXITED}</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DROP}</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;"> </td>
+ </tr>
+ <tr>
+ <td>{@link android.view.DragEvent#ACTION_DRAG_ENDED}</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;">X</td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;"> </td>
+ <td style="text-align: center;">X</td>
+ </tr>
+</table>
+<p>
+ The {@link android.view.DragEvent#getAction()},
+ {@link android.view.DragEvent#describeContents()},
+ {@link android.view.DragEvent#writeToParcel(Parcel,int) writeToParcel()}, and
+ {@link android.view.DragEvent#toString()} methods always return valid data.
+</p>
+<p>
+ If a method does not contain valid data for a particular action type, it returns either
+ <code>null</code> or 0, depending on its result type.
+</p>
+<h3 id="AboutDragShadowBuilder">
+ The drag shadow
+</h3>
+<p>
+ During a drag and drop operation, the system displays a image that the user drags.
+ For data movement, this image represents the data being dragged. For other operations, the
+ image represents some aspect of the drag operation.
+</p>
+<p>
+ The image is called a drag shadow. You create it with methods you declare for a
+ {@link android.view.View.DragShadowBuilder} object, and then pass it to the system when you
+ start a drag using
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}.
+ As part of its response to
+ {@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()},
+ the system invokes the callback methods you've defined in
+ {@link android.view.View.DragShadowBuilder} to obtain a drag shadow.
+</p>
+<p>
+ The {@link android.view.View.DragShadowBuilder} class has two constructors:
+</p>
+ <dl>
+ <dt>{@link android.view.View.DragShadowBuilder#View.DragShadowBuilder(View)}</dt>
+ <dd>
+ This constructor accepts any of your application's
+ {@link android.view.View} objects. The constructor stores the View object
+ in the {@link android.view.View.DragShadowBuilder} object, so during
+ the callback you can access it as you construct your drag shadow.
+ It doesn't have to be associated with the View (if any) that the user
+ selected to start the drag operation.
+ <p>
+ If you use this constructor, you don't have to extend
+ {@link android.view.View.DragShadowBuilder} or override its methods. By default,
+ you will get a drag shadow that has the same appearance as the View you pass as an
+ argument, centered under the location where the user is touching the screen.
+ </p>
+ </dd>
+ <dt>{@link android.view.View.DragShadowBuilder#View.DragShadowBuilder()}</dt>
+ <dd>
+ If you use this constructor, no View object is available in the
+ {@link android.view.View.DragShadowBuilder} object (the field is set to <code>null</code>).
+ If you use this constructor, and you don't extend
+ {@link android.view.View.DragShadowBuilder} or override its methods,
+ you will get an invisible drag shadow.
+ The system does <em>not</em> give an error.
+ </dd>
+</dl>
+<p>
+ The {@link android.view.View.DragShadowBuilder} class has two methods:
+</p>
+<dl>
+ <dt>
+{@link android.view.View.DragShadowBuilder#onProvideShadowMetrics(Point,Point) onProvideShadowMetrics()}
+ </dt>
+ <dd>
+ The system calls this method immediately after you call
+{@link android.view.View#startDrag(ClipData,View.DragShadowBuilder,Object,int) startDrag()}. Use it
+ to send to the system the dimensions and touch point of the drag shadow. The method has two
+ arguments:
+ <dl>
+ <dt><em>dimensions</em></dt>
+ <dd>
+ A {@link android.graphics.Point} object. The drag shadow width goes in
+ {@link android.graphics.Point#x} and its height goes in
+ {@link android.graphics.Point#y}.
+ </dd>
+ <dt><em>touch_point</em></dt>
+ <dd>
+ A {@link android.graphics.Point} object. The touch point is the location within the
+ drag shadow that should be under the user's finger during the drag. Its X
+ position goes in {@link android.graphics.Point#x} and its Y position goes in
+ {@link android.graphics.Point#y}
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ {@link android.view.View.DragShadowBuilder#onDrawShadow(Canvas) onDrawShadow()}
+ </dt>
+ <dd>
+ Immediately after the call to
+{@link android.view.View.DragShadowBuilder#onProvideShadowMetrics(Point,Point) onProvideShadowMetrics()}
+ the system calls
+ {@link android.view.View.DragShadowBuilder#onDrawShadow(Canvas) onDrawShadow()} to get the
+ drag shadow itself. The method has a single argument, a {@link android.graphics.Canvas}
+ object that the system constructs from the parameters you provide in
+{@link android.view.View.DragShadowBuilder#onProvideShadowMetrics(Point,Point) onProvideShadowMetrics()}
+ Use it to draw the drag shadow in the provided {@link android.graphics.Canvas} object.
+ </dd>
+</dl>
+<p>
+ To improve performance, you should keep the size of the drag shadow small. For a single item,
+ you may want to use a icon. For a multiple selection, you may want to use icons in a stack
+ rather than full images spread out over the screen.
+</p>
+<h2 id="DesignDragOperation">Designing a Drag and Drop Operation</h2>
+<p>
+ This section shows step-by-step how to start a drag, how to respond to events during
+ the drag, how respond to a drop event, and how to end the drag and drop operation.
+</p>
+<h3 id="StartDrag">Starting a drag</h3>
+<p>
+ The user starts a drag with a drag gesture, usually a long press, on a View object.
+ In response, you should do the following:
+</p>
+<ol>
+ <li>
+ As necessary, create a {@link android.content.ClipData} and
+ {@link android.content.ClipData.Item} for the data being moved. As part of the
+ ClipData object, supply metadata that is stored in a {@link android.content.ClipDescription}
+ object within the ClipData. For a drag and drop operation that does not represent data
+ movement, you may want to use <code>null</code> instead of an actual object.
+ <p>
+ For example, this code snippet shows how to respond to a long press on a ImageView
+ by creating a ClipData object that contains the tag or label of an
+ ImageView. Following this snippet, the next snippet shows how to override the methods in
+ {@link android.view.View.DragShadowBuilder}:
+ </p>
+<pre>
+// Create a string for the ImageView label
+private static final String IMAGEVIEW_TAG = "icon bitmap"
+
+// Creates a new ImageView
+ImageView imageView = new ImageView(this);
+
+// Sets the bitmap for the ImageView from an icon bit map (defined elsewhere)
+imageView.setImageBitmap(mIconBitmap);
+
+// Sets the tag
+imageView.setTag(IMAGEVIEW_TAG);
+
+ ...
+
+// Sets a long click listener for the ImageView using an anonymous listener object that
+// implements the OnLongClickListener interface
+imageView.setOnLongClickListener(new View.OnLongClickListener() {
+
+ // Defines the one method for the interface, which is called when the View is long-clicked
+ public boolean onLongClick(View v) {
+
+ // Create a new ClipData.
+ // This is done in two steps to provide clarity. The convenience method
+ // ClipData.newPlainText() can create a plain text ClipData in one step.
+
+ // Create a new ClipData.Item from the ImageView object's tag
+ ClipData.Item item = new ClipData.Item(v.getTag());
+
+ // Create a new ClipData using the tag as a label, the plain text MIME type, and
+ // the already-created item. This will create a new ClipDescription object within the
+ // ClipData, and set its MIME type entry to "text/plain"
+ ClipData dragData = new ClipData(v.getTag(),ClipData.MIMETYPE_TEXT_PLAIN,item);
+
+ // Instantiates the drag shadow builder.
+ View.DrawShadowBuilder myShadow = new MyDragShadowBuilder(imageView);
+
+ // Starts the drag
+
+ v.startDrag(dragData, // the data to be dragged
+ myShadow, // the drag shadow builder
+ null, // no need to use local data
+ 0 // flags (not currently used, set to 0)
+ );
+
+ }
+}
+</pre>
+ </li>
+ <li>
+ The following code snippet defines {@code myDragShadowBuilder}
+ It creates a drag shadow for dragging a TextView as a small gray rectangle:
+<pre>
+ private static class MyDragShadowBuilder extends View.DragShadowBuilder {
+
+ // The drag shadow image, defined as a drawable thing
+ private static Drawable shadow;
+
+ // Defines the constructor for myDragShadowBuilder
+ public MyDragShadowBuilder(View v) {
+
+ // Stores the View parameter passed to myDragShadowBuilder.
+ super(v);
+
+ // Creates a draggable image that will fill the Canvas provided by the system.
+ shadow = new ColorDrawable(Color.LTGRAY);
+ }
+
+ // Defines a callback that sends the drag shadow dimensions and touch point back to the
+ // system.
+ @Override
+ public void onProvideShadowMetrics (Point size, Point touch)
+ // Defines local variables
+ private int width, height;
+
+ // Sets the width of the shadow to half the width of the original View
+ width = getView().getWidth() / 2;
+
+ // Sets the height of the shadow to half the height of the original View
+ height = getView().getHeight() / 2;
+
+ // The drag shadow is a ColorDrawable. This sets its dimensions to be the same as the
+ // Canvas that the system will provide. As a result, the drag shadow will fill the
+ // Canvas.
+ shadow.setBounds(0, 0, width, height);
+
+ // Sets the size parameter's width and height values. These get back to the system
+ // through the size parameter.
+ size.set(width, height);
+
+ // Sets the touch point's position to be in the middle of the drag shadow
+ touch.set(width / 2, height / 2);
+ }
+
+ // Defines a callback that draws the drag shadow in a Canvas that the system constructs
+ // from the dimensions passed in onProvideShadowMetrics().
+ @Override
+ public void onDrawShadow(Canvas canvas) {
+
+ // Draws the ColorDrawable in the Canvas passed in from the system.
+ shadow.draw(canvas);
+ }
+ }
+</pre>
+ <p class="note">
+ <strong>Note:</strong> Remember that you don't have to extend
+ {@link android.view.View.DragShadowBuilder}. The constructor
+ {@link android.view.View.DragShadowBuilder#View.DragShadowBuilder(View)} creates a
+ default drag shadow that's the same size as the View argument passed to it, with the
+ touch point centered in the drag shadow.
+ </p>
+ </li>
+</ol>
+<h3 id="HandleStart">Responding to a drag start</h3>
+<p>
+ During the drag operation, the system dispatches drag events to the drag event listeners
+ of the View objects in the current layout. The listeners should react
+ by calling {@link android.view.DragEvent#getAction()} to get the action type.
+ At the start of a drag, this methods returns {@link android.view.DragEvent#ACTION_DRAG_STARTED}.
+</p>
+<p>
+ In response to an event with the action type {@link android.view.DragEvent#ACTION_DRAG_STARTED},
+ a listener should do the following:
+</p>
+<ol>
+ <li>
+ Call {@link android.view.DragEvent#getClipDescription()} to get the
+ {@link android.content.ClipDescription}. Use the MIME type methods in
+ {@link android.content.ClipDescription} to see if the listener can accept the data being
+ dragged.
+ <p>
+ If the drag and drop operation does not represent data movement, this may not be
+ necessary.
+ </p>
+ </li>
+ <li>
+ If the listener can accept a drop, it should return <code>true</code>. This tells
+ the system to continue to send drag events to the listener.
+ If it can't accept a drop, it should return <code>false</code>, and the system
+ will stop sending drag events until it sends out
+ {@link android.view.DragEvent#ACTION_DRAG_ENDED}.
+ </li>
+</ol>
+<p>
+ Note that for an {@link android.view.DragEvent#ACTION_DRAG_STARTED} event, these
+ the following {@link android.view.DragEvent} methods are not valid:
+ {@link android.view.DragEvent#getClipData()}, {@link android.view.DragEvent#getX()},
+ {@link android.view.DragEvent#getY()}, and {@link android.view.DragEvent#getResult()}.
+</p>
+<h3 id="HandleDuring">Handling events during the drag</h3>
+<p>
+ During the drag, listeners that returned <code>true</code> in response to
+ the {@link android.view.DragEvent#ACTION_DRAG_STARTED} drag event continue to receive drag
+ events. The types of drag events a listener receives during the drag depend on the location of
+ the drag shadow and the visibility of the listener's View.
+</p>
+<p>
+ During the drag, listeners primarily use drag events to decide if they should change the
+ appearance of their View.
+</p>
+<p>
+ During the drag, {@link android.view.DragEvent#getAction()} returns one of three
+ values:
+</p>
+<ul>
+ <li>
+ {@link android.view.DragEvent#ACTION_DRAG_ENTERED}:
+ The listener receives this when the touch point
+ (the point on the screen underneath the user's finger) has entered the bounding box of the
+ listener's View.
+ </li>
+ <li>
+ {@link android.view.DragEvent#ACTION_DRAG_LOCATION}: Once the listener receives an
+ {@link android.view.DragEvent#ACTION_DRAG_ENTERED} event, and before it receives an
+ A{@link android.view.DragEvent#ACTION_DRAG_EXITED} event, it receives a new
+ {@link android.view.DragEvent#ACTION_DRAG_LOCATION} event every time the touch point moves.
+ The {@link android.view.DragEvent#getX()} and {@link android.view.DragEvent#getY()} methods
+ return the the X and Y coordinates of the touch point.
+ </li>
+ <li>
+ {@link android.view.DragEvent#ACTION_DRAG_EXITED}: This event is sent to a listener that
+ previously received {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, after
+ the drag shadow is no longer within the bounding box of the listener's View.
+ </li>
+</ul>
+<p>
+ The listener does not need to react to any of these action types. If the listener returns a
+ value to the system, it is ignored. Here are some guidelines for responding to each of
+ these action types:
+</p>
+<ul>
+ <li>
+ In response to {@link android.view.DragEvent#ACTION_DRAG_ENTERED} or
+ {@link android.view.DragEvent#ACTION_DRAG_LOCATION}, the listener can change the appearance
+ of the View to indicate that it is about to receive a drop.
+ </li>
+ <li>
+ An event with the action type {@link android.view.DragEvent#ACTION_DRAG_LOCATION} contains
+ valid data for {@link android.view.DragEvent#getX()} and
+ {@link android.view.DragEvent#getY()}, corresponding to the location of the touch point.
+ The listener may want to use this information to alter the appearance of that part of the
+ View that is at the touch point. The listener can also use this information
+ to determine the exact position where the user is going to drop the drag shadow.
+ </li>
+ <li>
+ In response to {@link android.view.DragEvent#ACTION_DRAG_EXITED}, the listener should reset
+ any appearance changes it applied in response to
+ {@link android.view.DragEvent#ACTION_DRAG_ENTERED} or
+ {@link android.view.DragEvent#ACTION_DRAG_LOCATION}. This indicates to the user that
+ the View is no longer an imminent drop target.
+ </li>
+</ul>
+<h3 id="HandleDrop">Responding to a drop</h3>
+<p>
+ When the user releases the drag shadow on a View in the application, and that View previously
+ reported that it could accept the content being dragged, the system dispatches a drag event
+ to that View with the action type {@link android.view.DragEvent#ACTION_DROP}. The listener
+ should do the following:
+</p>
+<ol>
+ <li>
+ Call {@link android.view.DragEvent#getClipData()} to get the
+ {@link android.content.ClipData} object that was originally supplied in the call
+ to
+{@link android.view.View#startDrag(ClipData, View.DragShadowBuilder, Object, int) startDrag()}
+ and store it. If the drag and drop operation does not represent data movement,
+ this may not be necessary.
+ </li>
+ <li>
+ Return boolean <code>true</code> to indicate that the drop was processed successfully, or
+ boolean <code>false</code> if it was not. The returned value becomes the value returned by
+ {@link android.view.DragEvent#getResult()} for an
+ {@link android.view.DragEvent#ACTION_DRAG_ENDED} event.
+ <p>
+ Note that if the system does not send out an {@link android.view.DragEvent#ACTION_DROP}
+ event, the value of {@link android.view.DragEvent#getResult()} for an
+ {@link android.view.DragEvent#ACTION_DRAG_ENDED} event is <code>false</code>.
+ </p>
+ </li>
+</ol>
+<p>
+ For an {@link android.view.DragEvent#ACTION_DROP} event,
+ {@link android.view.DragEvent#getX()} and {@link android.view.DragEvent#getY()}
+ return the X and Y position of the drag point at the moment of the drop, using the coordinate
+ system of the View that received the drop.
+</p>
+<p>
+ The system does allow the user to release the drag shadow on a View whose listener is not
+ receiving drag events. It will also allow the user to release the drag shadow
+ on empty regions of the application's UI, or on areas outside of your application.
+ In all of these cases, the system does not send an event with action type
+ {@link android.view.DragEvent#ACTION_DROP}, although it does send out an
+ {@link android.view.DragEvent#ACTION_DRAG_ENDED} event.
+</p>
+<h3 id="HandleEnd">Responding to a drag end</h3>
+<p>
+ Immediately after the user releases the drag shadow, the system sends a
+ drag event to all of the drag event listeners in your application, with an action type of
+ {@link android.view.DragEvent#ACTION_DRAG_ENDED}. This indicates that the drag operation is
+ over.
+</p>
+<p>
+ Each listener should do the following:
+</p>
+<ol>
+ <li>
+ If listener changed its View object's appearance during the operation, it should reset the
+ View to its default appearance. This is a visual indication to the user that the operation
+ is over.
+ </li>
+ <li>
+ The listener can optionally call {@link android.view.DragEvent#getResult()} to find out more
+ about the operation. If a listener returned <code>true</code> in response to an event of
+ action type {@link android.view.DragEvent#ACTION_DROP}, then
+ {@link android.view.DragEvent#getResult()} will return boolean <code>true</code>. In all
+ other cases, {@link android.view.DragEvent#getResult()} returns boolean <code>false</code>,
+ including any case in which the system did not send out a
+ {@link android.view.DragEvent#ACTION_DROP} event.
+ </li>
+ <li>
+ The listener should return boolean <code>true</code> to the system.
+ </li>
+</ol>
+<p>
+</p>
+<h3 id="RespondEventSample">Responding to drag events: an example</h3>
+<p>
+ All drag events are initially received by your drag event method or listener. The following
+ code snippet is a simple example of reacting to drag events in a listener:
+</p>
+<pre>
+// Creates a new drag event listener
+mDragListen = new myDragEventListener();
+
+View imageView = new ImageView(this);
+
+// Sets the drag event listener for the View
+imageView.setOnDragListener(mDragListen);
+
+...
+
+protected class myDragEventListener implements View.OnDragEventListener {
+
+ // This is the method that the system calls when it dispatches a drag event to the
+ // listener.
+ public boolean onDrag(View v, DragEvent event) {
+
+ // Defines a variable to store the action type for the incoming event
+ final int action = event.getAction();
+
+ // Handles each of the expected events
+ switch(action) {
+
+ case DragEvent.ACTION_DRAG_STARTED:
+
+ // Determines if this View can accept the dragged data
+ if (event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
+
+ // As an example of what your application might do,
+ // applies a blue color tint to the View to indicate that it can accept
+ // data.
+ v.setColorFilter(Color.BLUE);
+
+ // Invalidate the view to force a redraw in the new tint
+ v.invalidate();
+
+ // returns true to indicate that the View can accept the dragged data.
+ return(true);
+
+ } else {
+
+ // Returns false. During the current drag and drop operation, this View will
+ // not receive events again until ACTION_DRAG_ENDED is sent.
+ return(false);
+
+ }
+ break;
+
+ case DragEvent.ACTION_DRAG_ENTERED: {
+
+ // Applies a green tint to the View. Return true; the return value is ignored.
+
+ v.setColorFilter(Color.GREEN);
+
+ // Invalidate the view to force a redraw in the new tint
+ v.invalidate();
+
+ return(true);
+
+ break;
+
+ case DragEvent.ACTION_DRAG_LOCATION:
+
+ // Ignore the event
+ return(true);
+
+ break;
+
+ case DragEvent.ACTION_DRAG_EXITED:
+
+ // Re-sets the color tint to blue. Returns true; the return value is ignored.
+ v.setColorFilter(Color.BLUE);
+
+ // Invalidate the view to force a redraw in the new tint
+ v.invalidate();
+
+ return(true);
+
+ break;
+
+ case DragEvent.ACTION_DROP:
+
+ // Gets the item containing the dragged data
+ ClipData.Item item = event.getClipData().getItemAt(0);
+
+ // Gets the text data from the item.
+ dragData = item.getText();
+
+ // Displays a message containing the dragged data.
+ Toast.makeText(this, "Dragged data is " + dragData, Toast.LENGTH_LONG);
+
+ // Turns off any color tints
+ v.clearColorFilter();
+
+ // Invalidates the view to force a redraw
+ v.invalidate();
+
+ // Returns true. DragEvent.getResult() will return true.
+ return(true);
+
+ break;
+
+ case DragEvent.ACTION_DRAG_ENDED:
+
+ // Turns off any color tinting
+ v.clearColorFilter();
+
+ // Invalidates the view to force a redraw
+ v.invalidate();
+
+ // Does a getResult(), and displays what happened.
+ if (event.getResult()) {
+ Toast.makeText(this, "The drop was handled.", Toast.LENGTH_LONG);
+
+ } else {
+ Toast.makeText(this, "The drop didn't work.", Toast.LENGTH_LONG);
+
+ };
+
+ // returns true; the value is ignored.
+ return(true);
+
+ break;
+
+ // An unknown action type was received.
+ default:
+ Log.e("DragDrop Example","Unknown action type received by OnDragListener.");
+
+ break;
+ };
+ };
+};
+</pre>
\ No newline at end of file
diff --git a/docs/html/images/developing/hv_device_window.png b/docs/html/images/developing/hv_device_window.png
new file mode 100644
index 0000000..2bb80a8
--- /dev/null
+++ b/docs/html/images/developing/hv_device_window.png
Binary files differ
diff --git a/docs/html/images/developing/hv_pixelperfect.png b/docs/html/images/developing/hv_pixelperfect.png
new file mode 100644
index 0000000..6d19119
--- /dev/null
+++ b/docs/html/images/developing/hv_pixelperfect.png
Binary files differ
diff --git a/docs/html/images/developing/hv_treeview_screenshot.png b/docs/html/images/developing/hv_treeview_screenshot.png
new file mode 100644
index 0000000..c0e7ac5
--- /dev/null
+++ b/docs/html/images/developing/hv_treeview_screenshot.png
Binary files differ
diff --git a/docs/html/images/developing/hv_view_hierarchy_window.png b/docs/html/images/developing/hv_view_hierarchy_window.png
new file mode 100644
index 0000000..0d8b263
--- /dev/null
+++ b/docs/html/images/developing/hv_view_hierarchy_window.png
Binary files differ
diff --git a/docs/html/images/ui/clipboard/copy_paste_framework.png b/docs/html/images/ui/clipboard/copy_paste_framework.png
new file mode 100755
index 0000000..57facaa
--- /dev/null
+++ b/docs/html/images/ui/clipboard/copy_paste_framework.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index 909dd32..2248752 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -129,14 +129,14 @@
'sdk': {
'layout':"imgLeft",
'icon':"sdk-small.png",
- 'name':"Android 2.3",
- 'img':"gingerdroid.png",
- 'title':"Android 2.3 is here!",
- 'desc': "<p>Android 2.3 is now available for the Android SDK. In addition, new "
-+ "tools and documentation are available, plus a new NDK that offers more than ever. "
-+ "For more information about what's in Android 2.3, read the "
-+ "<a href='{@docRoot}sdk/android-2.3.html'>version notes</a>.</p>"
-+ "<p>If you have an existing SDK, add Android 2.3 as an "
+ 'name':"Android 3.0",
+ 'img':"honeycomb-android.png",
+ 'title':"Android 3.0 is here!",
+ 'desc': "<p>Android 3.0 is now available for the Android SDK. It offers a redesigned UI and "
++ "all new developer APIs for an optimized experience on tablets and similar devices. "
++ "For more information about what's in Android 3.0, read the "
++ "<a href='{@docRoot}sdk/android-3.0.html'>version notes</a>.</p>"
++ "<p>If you have an existing SDK, add Android 3.0 as an "
+ "<a href='{@docRoot}sdk/adding-components.html'>SDK "
+ "component</a>. If you're new to Android, install the "
+ "<a href='{@docRoot}sdk/index.html'>SDK starter package</a>."
diff --git a/docs/html/resources/articles/avoiding-memory-leaks.jd b/docs/html/resources/articles/avoiding-memory-leaks.jd
index 3361bc1..395f590 100644
--- a/docs/html/resources/articles/avoiding-memory-leaks.jd
+++ b/docs/html/resources/articles/avoiding-memory-leaks.jd
@@ -1,4 +1,6 @@
page.title=Avoiding Memory Leaks
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/backward-compatibility.jd b/docs/html/resources/articles/backward-compatibility.jd
index ad64dfc..f96d587 100644
--- a/docs/html/resources/articles/backward-compatibility.jd
+++ b/docs/html/resources/articles/backward-compatibility.jd
@@ -1,4 +1,6 @@
page.title=Backward Compatibility for Applications
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/can-i-use-this-intent.jd b/docs/html/resources/articles/can-i-use-this-intent.jd
index a726189..c527331 100644
--- a/docs/html/resources/articles/can-i-use-this-intent.jd
+++ b/docs/html/resources/articles/can-i-use-this-intent.jd
@@ -1,4 +1,6 @@
page.title=Can I Use this Intent?
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Android offers a very powerful and yet easy-to-use message type called
diff --git a/docs/html/resources/articles/contacts.jd b/docs/html/resources/articles/contacts.jd
index c837dc3..8365d29 100644
--- a/docs/html/resources/articles/contacts.jd
+++ b/docs/html/resources/articles/contacts.jd
@@ -1,4 +1,6 @@
page.title=Using the Contacts API
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Starting from Android 2.0 (API Level 5), the Android platform provides an
diff --git a/docs/html/resources/articles/creating-input-method.jd b/docs/html/resources/articles/creating-input-method.jd
index 6f932df..e4b77f4 100644
--- a/docs/html/resources/articles/creating-input-method.jd
+++ b/docs/html/resources/articles/creating-input-method.jd
@@ -1,4 +1,6 @@
page.title=Creating an Input Method
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/drawable-mutations.jd b/docs/html/resources/articles/drawable-mutations.jd
index f979829..c5818fc 100644
--- a/docs/html/resources/articles/drawable-mutations.jd
+++ b/docs/html/resources/articles/drawable-mutations.jd
@@ -1,4 +1,6 @@
page.title=Drawable Mutations
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Android's drawables are extremely useful to easily build applications. A
diff --git a/docs/html/resources/articles/faster-screen-orientation-change.jd b/docs/html/resources/articles/faster-screen-orientation-change.jd
index f82e592..52531bb 100644
--- a/docs/html/resources/articles/faster-screen-orientation-change.jd
+++ b/docs/html/resources/articles/faster-screen-orientation-change.jd
@@ -1,4 +1,6 @@
page.title=Faster Screen Orientation Change
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/future-proofing.jd b/docs/html/resources/articles/future-proofing.jd
index ee98186..b8aeedf 100644
--- a/docs/html/resources/articles/future-proofing.jd
+++ b/docs/html/resources/articles/future-proofing.jd
@@ -1,4 +1,6 @@
page.title=Future-Proofing Your Apps
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>It's important to implement your application so that it will not break as new
diff --git a/docs/html/resources/articles/gestures.jd b/docs/html/resources/articles/gestures.jd
index 8711645b..5b8d760 100644
--- a/docs/html/resources/articles/gestures.jd
+++ b/docs/html/resources/articles/gestures.jd
@@ -1,4 +1,6 @@
page.title=Gestures
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Touch screens are a great way to interact with applications on
diff --git a/docs/html/resources/articles/glsurfaceview.jd b/docs/html/resources/articles/glsurfaceview.jd
index 57403ea..45407a9 100644
--- a/docs/html/resources/articles/glsurfaceview.jd
+++ b/docs/html/resources/articles/glsurfaceview.jd
@@ -1,4 +1,6 @@
page.title=Introducing GLSurfaceView
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/index.jd b/docs/html/resources/articles/index.jd
index d2b7645..220a4ed 100644
--- a/docs/html/resources/articles/index.jd
+++ b/docs/html/resources/articles/index.jd
@@ -1,4 +1,6 @@
page.title=Technical Articles
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<dl>
diff --git a/docs/html/resources/articles/layout-tricks-efficiency.jd b/docs/html/resources/articles/layout-tricks-efficiency.jd
index b7b5761..00b4147 100644
--- a/docs/html/resources/articles/layout-tricks-efficiency.jd
+++ b/docs/html/resources/articles/layout-tricks-efficiency.jd
@@ -1,4 +1,6 @@
page.title=Layout Tricks: Creating Efficient Layouts
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>The Android UI toolkit offers several layout managers that are
diff --git a/docs/html/resources/articles/layout-tricks-merge.jd b/docs/html/resources/articles/layout-tricks-merge.jd
index 95409e4..0ca0317 100644
--- a/docs/html/resources/articles/layout-tricks-merge.jd
+++ b/docs/html/resources/articles/layout-tricks-merge.jd
@@ -1,4 +1,6 @@
page.title=Layout Tricks: Merging Layouts
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>The articles showed you how to use the <code><include /></code> tag in XML layouts, to
diff --git a/docs/html/resources/articles/layout-tricks-reuse.jd b/docs/html/resources/articles/layout-tricks-reuse.jd
index 396e2127..179c1d8 100644
--- a/docs/html/resources/articles/layout-tricks-reuse.jd
+++ b/docs/html/resources/articles/layout-tricks-reuse.jd
@@ -1,4 +1,6 @@
page.title=Layout Tricks: Creating Reusable UI Components
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>The Android platform offers a wide variety of UI <em>widgets</em>, small
diff --git a/docs/html/resources/articles/layout-tricks-stubs.jd b/docs/html/resources/articles/layout-tricks-stubs.jd
index 88bcb78..64f07f9 100644
--- a/docs/html/resources/articles/layout-tricks-stubs.jd
+++ b/docs/html/resources/articles/layout-tricks-stubs.jd
@@ -1,4 +1,6 @@
page.title=Layout Tricks: Using ViewStubs
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Sharing and reusing UI components is very easy with Android, thanks to the <a
diff --git a/docs/html/resources/articles/listview-backgrounds.jd b/docs/html/resources/articles/listview-backgrounds.jd
index f4c6998..c4037ba 100644
--- a/docs/html/resources/articles/listview-backgrounds.jd
+++ b/docs/html/resources/articles/listview-backgrounds.jd
@@ -1,4 +1,6 @@
page.title=ListView Backgrounds: An Optimization
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>{@link android.widget.ListView} is one of Android's most widely used widgets.
diff --git a/docs/html/resources/articles/live-folders.jd b/docs/html/resources/articles/live-folders.jd
index be974f4..aeab997 100644
--- a/docs/html/resources/articles/live-folders.jd
+++ b/docs/html/resources/articles/live-folders.jd
@@ -1,4 +1,6 @@
page.title=Live Folders
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Live folders, introduced in Android 1.5 (API Level 3), let you display any source of data
diff --git a/docs/html/resources/articles/live-wallpapers.jd b/docs/html/resources/articles/live-wallpapers.jd
index ea67fed..bfbbb34 100644
--- a/docs/html/resources/articles/live-wallpapers.jd
+++ b/docs/html/resources/articles/live-wallpapers.jd
@@ -1,4 +1,6 @@
page.title=Live Wallpapers
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
@@ -27,35 +29,36 @@
<img src="images/live_wallpapers_small.png" style="align:center" />
<p>Creating your own live wallpaper is easy, especially if you have had
-previous experience with <a
-href="../../../reference/android/view/SurfaceView.html"><code>SurfaceView</code></a> or <a
-href="../../../reference/android/graphics/Canvas.html"><code>Canvas</code></a>.
+previous experience with {@link android.view.SurfaceView} or {@link
+android.graphics.Canvas}.
To learn how to create a live wallpaper, you should check out the <a
href="../samples/CubeLiveWallpaper/index.html">CubeLiveWallpaper sample code</a>.</p>
-<p>In terms of implementation, a live wallpaper is very similar to a regular
-Android <a href="../../../reference/android/app/Service.html">service</a>. The
-only difference is the addition of a new method, <a
-href="../../../reference/android/service/wallpaper/WallpaperService.html#onCreateEngine()">{@code
-onCreateEngine()}</a>, whose goal is to create a <a
-href="../../../reference/android/service/wallpaper/WallpaperService.Engine.html">
-<code>WallpaperService.Engine</code></a>. The engine is responsible for
+<p>In terms of implementation, a live wallpaper is very similar to a {@link android.app.Service}.
+The only difference is the addition of a new method, {@link
+android.service.wallpaper.WallpaperService#onCreateEngine()}, whose goal is to create a {@link
+android.service.wallpaper.WallpaperService.Engine}. The engine is responsible for
handling the lifecycle and drawing of a wallpaper. The system provides a surface
-on which you can draw, just like you would with a <code>SurfaceView</code></a>.
+on which you can draw, just like you would with a {@link android.view.SurfaceView}.
Drawing a wallpaper can be very expensive so you should optimize your code
as much as possible to avoid using too much CPU, not only for battery life
but also to avoid slowing down the rest of the system. That is also why the
-most important part of the lifecycle of a wallpaper is <a href="../../../reference/android/service/wallpaper/WallpaperService.Engine.html#onVisibilityChanged%28boolean%29">when it becomes invisible</a>.
+most important part of the lifecycle of a wallpaper is when it becomes visible, as indicated
+by a call to {@link android.service.wallpaper.WallpaperService.Engine#onVisibilityChanged
+onVisibilityChanged()}.
When invisible, such as when the user launches an application that covers
the home screen, a wallpaper must stop all activity.</p>
<p>The engine can also implement several methods to interact with the user
or the home application. For instance, if you want your wallpaper to scroll
-along when the user swipes from one home screen to another, you can use <a href="../../../reference/android/service/wallpaper/WallpaperService.Engine.html#onOffsetsChanged%28float,%20float,%20float,%20float,%20int,%20int%29"><code>onOffsetsChanged()</code></a>.
-To react to touch events, simply implement <a href="../../../reference/android/service/wallpaper/WallpaperService.Engine.html#onTouchEvent%28android.view.MotionEvent%29"><code>onTouchEvent(MotionEvent)</code></a>.
+along when the user swipes from one home screen to another, you can use
+{@link android.service.wallpaper.WallpaperService.Engine#onOffsetsChanged
+onOffsetsChanged()}.
+To react to touch events, simply implement {@link
+android.service.wallpaper.WallpaperService.Engine#onTouchEvent onTouchEvent()}.
Finally, applications can send arbitrary commands to the live wallpaper.
-Currently, only the standard home application sends commands to the <a
-href="../../../reference/android/service/wallpaper/WallpaperService.Engine.html#onCommand%28java.lang.String,%20int,%20int,%20int,%20android.os.Bundle,%20boolean%29"><code>onCommand()</code></a>
+Currently, only the standard home application sends commands to the
+{@link android.service.wallpaper.WallpaperService.Engine#onCommand onCommand()}
method of the live wallpaper:</p>
<ul>
@@ -78,9 +81,9 @@
<ul>
<li><code><uses-sdk android:minSdkVersion="7" /></code>, which indicates
to Android Market and the platform that your application requires Android 2.1 or
-higher. For more information, see the <a href="../../../guide/appendix/api-levels.html">API
+higher. For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API
Levels</a> and the documentation for the
-<a href="../../../guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a>
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a>
element.</li>
<li><code><uses-feature android:name="android.software.live_wallpaper" /></code>,
which tells Android Market that your application includes a live wallpaper
@@ -89,7 +92,9 @@
displays your application only to users whose devices support live wallpapers,
while hiding it from other devices on which it would not be able to run. For
more information, see the documentation for the
-<a href="../../../guide/topics/manifest/uses-feature-element.html"><code><uses-feature></code></a>
+<a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
+<uses-feature></a>
element.</li>
</ul>
diff --git a/docs/html/resources/articles/on-screen-inputs.jd b/docs/html/resources/articles/on-screen-inputs.jd
index 30b4c84..6a028c8 100644
--- a/docs/html/resources/articles/on-screen-inputs.jd
+++ b/docs/html/resources/articles/on-screen-inputs.jd
@@ -1,4 +1,6 @@
page.title=Onscreen Input Methods
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/painless-threading.jd b/docs/html/resources/articles/painless-threading.jd
index 17cec35..fea7ee2 100644
--- a/docs/html/resources/articles/painless-threading.jd
+++ b/docs/html/resources/articles/painless-threading.jd
@@ -1,4 +1,6 @@
page.title=Painless Threading
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>This article discusses the threading model used by Android applications and how applications can ensure best UI performance by spawning worker threads to handle long-running operations, rather than handling them in the main thread. The article also explains the API that your application can use to interact with Android UI toolkit components running on the main thread and spawn managed worker threads. </p>
diff --git a/docs/html/resources/articles/qsb.jd b/docs/html/resources/articles/qsb.jd
index d47ba54..01fb115 100644
--- a/docs/html/resources/articles/qsb.jd
+++ b/docs/html/resources/articles/qsb.jd
@@ -1,4 +1,6 @@
page.title=Quick Search Box
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/speech-input.jd b/docs/html/resources/articles/speech-input.jd
index 282b619..d42bd59 100644
--- a/docs/html/resources/articles/speech-input.jd
+++ b/docs/html/resources/articles/speech-input.jd
@@ -1,4 +1,6 @@
page.title=Speech Input
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p> People love their mobile phones because they can stay in touch wherever they
diff --git a/docs/html/resources/articles/timed-ui-updates.jd b/docs/html/resources/articles/timed-ui-updates.jd
index 863387c..7a0804f 100644
--- a/docs/html/resources/articles/timed-ui-updates.jd
+++ b/docs/html/resources/articles/timed-ui-updates.jd
@@ -1,4 +1,6 @@
page.title=Updating the UI from a Timer
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<img style="margin: 1.5em; float: right;" src="images/JFlubber.png" alt="" id="BLOGGER_PHOTO_ID_5135098660116808706" border="0">
diff --git a/docs/html/resources/articles/touch-mode.jd b/docs/html/resources/articles/touch-mode.jd
index e340062..5eae9b9 100644
--- a/docs/html/resources/articles/touch-mode.jd
+++ b/docs/html/resources/articles/touch-mode.jd
@@ -1,4 +1,6 @@
page.title=Touch Mode
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>This article explains the <em>touch mode</em>, one of the most
diff --git a/docs/html/resources/articles/track-mem.jd b/docs/html/resources/articles/track-mem.jd
index d580e82..c4184b5 100644
--- a/docs/html/resources/articles/track-mem.jd
+++ b/docs/html/resources/articles/track-mem.jd
@@ -1,4 +1,6 @@
page.title=Tracking Memory Allocations
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Writing efficient mobile applications is not always straightforward. In
diff --git a/docs/html/resources/articles/tts.jd b/docs/html/resources/articles/tts.jd
index e3fad91..7d07a89 100644
--- a/docs/html/resources/articles/tts.jd
+++ b/docs/html/resources/articles/tts.jd
@@ -1,4 +1,6 @@
page.title=Using Text-to-Speech
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Starting with Android 1.6 (API Level 4), the Android platform includes a new
diff --git a/docs/html/resources/articles/ui-1.5.jd b/docs/html/resources/articles/ui-1.5.jd
index c10cf52..2edaa2e 100644
--- a/docs/html/resources/articles/ui-1.5.jd
+++ b/docs/html/resources/articles/ui-1.5.jd
@@ -1,4 +1,6 @@
page.title=UI Framework Changes in Android 1.5
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/ui-1.6.jd b/docs/html/resources/articles/ui-1.6.jd
index 10cb524..09108dd 100644
--- a/docs/html/resources/articles/ui-1.6.jd
+++ b/docs/html/resources/articles/ui-1.6.jd
@@ -1,4 +1,6 @@
page.title=UI Framework Changes in Android 1.6
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Android 1.6 introduces numerous enhancements and bug fixes in the UI
diff --git a/docs/html/resources/articles/using-webviews.jd b/docs/html/resources/articles/using-webviews.jd
index 3a1f34c..3a2430b 100644
--- a/docs/html/resources/articles/using-webviews.jd
+++ b/docs/html/resources/articles/using-webviews.jd
@@ -1,4 +1,6 @@
page.title=Using WebViews
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>A small application called <a title="WebViewDemo"
diff --git a/docs/html/resources/articles/wikinotes-intents.jd b/docs/html/resources/articles/wikinotes-intents.jd
index bc64544..78fe62e 100644
--- a/docs/html/resources/articles/wikinotes-intents.jd
+++ b/docs/html/resources/articles/wikinotes-intents.jd
@@ -1,4 +1,6 @@
page.title=WikiNotes: Routing Intents
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
diff --git a/docs/html/resources/articles/wikinotes-linkify.jd b/docs/html/resources/articles/wikinotes-linkify.jd
index 21b1f13..fb49f86 100644
--- a/docs/html/resources/articles/wikinotes-linkify.jd
+++ b/docs/html/resources/articles/wikinotes-linkify.jd
@@ -1,4 +1,6 @@
page.title=WikiNotes: Linkify your Text!
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<img style="margin-left: 1.5em; margin-bottom:1.5em; float: right;"
diff --git a/docs/html/resources/articles/window-bg-speed.jd b/docs/html/resources/articles/window-bg-speed.jd
index bd7a303..c5e5e90 100644
--- a/docs/html/resources/articles/window-bg-speed.jd
+++ b/docs/html/resources/articles/window-bg-speed.jd
@@ -1,4 +1,6 @@
page.title=Window Backgrounds & UI Speed
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>Some Android applications require to squeeze every bit of performance out of
diff --git a/docs/html/resources/articles/zipalign.jd b/docs/html/resources/articles/zipalign.jd
index 013d0fe..9e767aa 100644
--- a/docs/html/resources/articles/zipalign.jd
+++ b/docs/html/resources/articles/zipalign.jd
@@ -1,4 +1,6 @@
page.title=Zipalign: an Easy Optimization
+parent.title=Articles
+parent.link=../browser.html?tag=article
@jd:body
<p>The Android SDK includes a tool called <a
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
index febdb9a..b80e59a 100644
--- a/docs/html/resources/resources-data.js
+++ b/docs/html/resources/resources-data.js
@@ -496,6 +496,16 @@
}
},
{
+ tags: ['sample', 'new'],
+ path: 'samples/Renderscript/index.html',
+ title: {
+ en: 'Renderscript'
+ },
+ description: {
+ en: 'A set of samples that demonstrate how to use various features of the Renderscript APIs.'
+ }
+ },
+ {
tags: ['sample', 'accountsync'],
path: 'samples/SampleSyncAdapter/index.html',
title: {
@@ -569,7 +579,7 @@
tags: ['sample', 'new', 'newfeature', 'widgets'],
path: 'samples/StackWidget/index.html',
title: {
- en: 'StackView App Widget'
+ en: 'StackView Widget'
},
description: {
en: 'Demonstrates how to create a simple collection widget containing a StackView.'
@@ -619,7 +629,7 @@
tags: ['sample', 'widgets', 'newfeature', 'new'],
path: 'samples/WeatherListWidget/index.html',
title: {
- en: 'Weather List Widget Sample'
+ en: 'Weather List Widget'
},
description: {
en: 'A more complex collection-widget example which uses a ContentProvider as its data source.'
diff --git a/docs/html/resources/samples/get.jd b/docs/html/resources/samples/get.jd
index 1b6d137..86ec836 100644
--- a/docs/html/resources/samples/get.jd
+++ b/docs/html/resources/samples/get.jd
@@ -1,4 +1,6 @@
page.title=Getting the Samples
+parent.title=Sample Code
+parent.link=../browser.html?tag=sample
@jd:body
diff --git a/docs/html/resources/tutorials/hello-world.jd b/docs/html/resources/tutorials/hello-world.jd
index 67c2521..020c738 100644
--- a/docs/html/resources/tutorials/hello-world.jd
+++ b/docs/html/resources/tutorials/hello-world.jd
@@ -1,4 +1,6 @@
page.title=Hello, World
+parent.title=Tutorials
+parent.link=../browser.html?tag=tutorial
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/resources/tutorials/localization/index.jd b/docs/html/resources/tutorials/localization/index.jd
index 8a60814..de4433b 100755
--- a/docs/html/resources/tutorials/localization/index.jd
+++ b/docs/html/resources/tutorials/localization/index.jd
@@ -1,4 +1,6 @@
page.title=Hello, L10N
+parent.title=Tutorials
+parent.link=../../browser.html?tag=tutorial
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/resources/tutorials/notepad/index.jd b/docs/html/resources/tutorials/notepad/index.jd
index f569314..dd92184 100644
--- a/docs/html/resources/tutorials/notepad/index.jd
+++ b/docs/html/resources/tutorials/notepad/index.jd
@@ -1,4 +1,6 @@
page.title=Notepad Tutorial
+parent.title=Tutorials
+parent.link=../../browser.html?tag=tutorial
@jd:body
diff --git a/docs/html/resources/tutorials/testing/activity_test.jd b/docs/html/resources/tutorials/testing/activity_test.jd
index c94e8ab..4b861e2 100644
--- a/docs/html/resources/tutorials/testing/activity_test.jd
+++ b/docs/html/resources/tutorials/testing/activity_test.jd
@@ -1,4 +1,6 @@
page.title=Activity Testing
+parent.title=Tutorials
+parent.link=../../browser.html?tag=tutorial
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/resources/tutorials/testing/helloandroid_test.jd b/docs/html/resources/tutorials/testing/helloandroid_test.jd
index b47c334..4d949c8 100644
--- a/docs/html/resources/tutorials/testing/helloandroid_test.jd
+++ b/docs/html/resources/tutorials/testing/helloandroid_test.jd
@@ -1,4 +1,6 @@
page.title=Hello, Testing
+parent.title=Tutorials
+parent.link=../../browser.html?tag=tutorial
@jd:body
<div id="qv-wrapper">
<div id="qv">
diff --git a/docs/html/resources/tutorials/views/index.jd b/docs/html/resources/tutorials/views/index.jd
index 6ea7683..bba83307 100644
--- a/docs/html/resources/tutorials/views/index.jd
+++ b/docs/html/resources/tutorials/views/index.jd
@@ -1,4 +1,6 @@
page.title=Hello, Views
+parent.title=Tutorials
+parent.link=../../browser.html?tag=tutorial
@jd:body
<style>
diff --git a/docs/html/sdk/android-2.3.3.jd b/docs/html/sdk/android-2.3.3.jd
index dbc48f4..6d60fcc 100644
--- a/docs/html/sdk/android-2.3.3.jd
+++ b/docs/html/sdk/android-2.3.3.jd
@@ -54,7 +54,7 @@
first.</p>
<p>For a high-level introduction to Android 2.3, see the <a
-href="http://developer.android.com/sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>
+href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>
<h2 id="relnotes">Revisions</h2>
diff --git a/docs/html/sdk/android-2.3.jd b/docs/html/sdk/android-2.3.jd
index 734d97b..e7aa0fa 100644
--- a/docs/html/sdk/android-2.3.jd
+++ b/docs/html/sdk/android-2.3.jd
@@ -51,7 +51,7 @@
first.</p>
<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
-href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Platform Highlights</a>.</p>
+href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform Highlights</a>.</p>
<h2 id="relnotes">Revisions</h2>
diff --git a/docs/html/sdk/android-3.0.jd b/docs/html/sdk/android-3.0.jd
index 2c8a7f0..998c7c3 100644
--- a/docs/html/sdk/android-3.0.jd
+++ b/docs/html/sdk/android-3.0.jd
@@ -1,4 +1,6 @@
-page.title=Android 3.0 Platform Preview
+page.title=Android 3.0 Platform
+sdk.platform.version=3.0
+sdk.platform.apiLevel=11
@jd:body
<div id="qv-wrapper">
@@ -6,6 +8,7 @@
<h2>In this document</h2>
<ol>
+ <li><a href="#relnotes">Revisions</a></li>
<li><a href="#api">API Overview</a></li>
<li><a href="#api-level">API Level</a></li>
<li><a href="#apps">Built-in Applications</a></li>
@@ -16,30 +19,69 @@
<h2>Reference</h2>
<ol>
<li><a
-href="{@docRoot}sdk/api_diff/honeycomb/changes.html">API
+href="{@docRoot}sdk/api_diff/11/changes.html">API
Differences Report »</a> </li>
</ol>
<h2>See Also</h2>
<ol>
- <li><a href="{@docRoot}sdk/preview/start.html">Getting Started</a></li>
+ <li><a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0</a></li>
</ol>
</div>
</div>
-<p><em>API Level:</em> <b>Honeycomb</b></p>
-<p>For developers, the Android 3.0 preview is available as a downloadable component for the
-Android SDK.</p>
+<p><em>API Level:</em> <strong>{@sdkPlatformApiLevel}</strong></p>
-<p class="note"><strong>Note:</strong> Read the <a
-href="{@docRoot}sdk/preview/start.html">Getting Started</a> guide for important information
-about setting up your development environment and limitiations of the Android 3.0 preview.</p>
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a downloadable
+component for the Android SDK. The downloadable platform includes an Android library and system
+image, as well as a set of emulator skins and more. The downloadable platform includes no external
+libraries.</p>
+
+<p>To get started developing or testing against Android {@sdkPlatformVersion}, use the Android SDK
+Manager to download the platform into your SDK. For more information, see <a
+href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>. If you are new to Android, <a
+href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
+
+<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
+href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
+Highlights</a>.</p>
+
+<p class="note"><strong>Note:</strong>
+If you've already published an Android application, please test and optimize your application on
+Android 3.0 as soon as possible. You should do so to be sure your application provides the best
+experience possible on the latest Android-powered devices. For information about what you can do,
+read <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android
+3.0</a>.</p>
+<h2 id="relnotes">Revisions</h2>
+
+<p>To determine what revision of the Android {@sdkPlatformVersion} platform you have installed,
+refer to the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+<div class="toggle-content opened" style="padding-left:1em;">
+
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" alt="" />
+ Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
+ </a></p>
+
+ <div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r10</a> or higher.</p>
+</dd>
+
+</dl>
+
+ </div>
+</div>
@@ -49,6 +91,9 @@
including new features and changes in the framework API since the previous version.</p>
+
+
+
<h3>Fragments</h3>
<p>A fragment is a new framework component that allows you to separate distinct elements of an
@@ -65,9 +110,9 @@
<p>Additionally:</p>
<ul>
- <li>Fragments are self-contained and can be reused in multiple activities</li>
- <li>Fragments can be added, removed, replaced and animated inside the activity</li>
- <li>Fragment can be added to a back stack managed by the activity, preserving the state of
+ <li>Fragments are self-contained and you can reuse them in multiple activities</li>
+ <li>You can add, remove, replace and animate fragments inside the activity</li>
+ <li>You can add fragments to a back stack managed by the activity, preserving the state of
fragments as they are changed and allowing the user to navigate backward through the different
states</li>
<li>By <a
@@ -80,8 +125,8 @@
<p>To manage the fragments in your activity, you must use the {@link
android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
-as finding fragments in the activity and popping fragments off the back stack to restore them
-after they've been removed or hidden.</p>
+as finding fragments in the activity and popping fragments off the back stack to restore their
+previous state.</p>
<p>To perform a transaction, such as add or remove a fragment, you must create a {@link
android.app.FragmentTransaction}. You can then call methods such as {@link
@@ -92,7 +137,10 @@
the activity.</p>
<p>For more information about using fragments, read the <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> documentation. Several
+samples are also available in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
+API Demos</a> application.</p>
@@ -101,49 +149,51 @@
<p>The Action Bar is a replacement for the traditional title bar at the top of the activity window.
It includes the application logo in the left corner and provides a new interface for items in the
-activity's Options Menu. Additionally, the Action Bar allows you to:</p>
+<a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>. Additionally, the
+Action Bar allows you to:</p>
<ul>
- <li>Include select menu items directly in the Action Bar—as "action
-items"—for quick access to global user actions.
- <p>In your XML declaration for the menu item, include the attribute, {@code
-android:showAsAction} with a value of {@code "ifRoom"}. When there's enough room in the
-Action Bar, the menu item appears directly in the bar. Otherwise, the item is placed in the
-overflow menu, revealed by the icon on the right side of the Action Bar.</p></li>
+ <li>Add menu items directly in the Action Bar—as "action items."
+ <p>In your XML declaration for the menu item, include the {@code
+android:showAsAction} attribute with a value of {@code "ifRoom"}. When there's enough room, the menu
+item appears directly in the Action Bar. Otherwise, the item is placed in the
+overflow menu, revealed by the menu icon on the right side of the Action Bar.</p></li>
- <li>Add interactive widgets to the Action Bar—as "action views"—such as a search box.
- <p>In the XML for the menu item that should behave as an action view, include the {@code
-android:actionViewLayout} attribute with a layout
-resource for the action view or {@code android:actionViewClass} with the class name of the
-widget. Like action items, an action view appears only when there's room for it in the Action
-Bar. If there's not enough room, it is placed in the overflow menu and behaves like a regular
-menu item (for example, an item can provide a {@link android.widget.SearchView} as an action
-view, but when in the overflow menu, selecting the item activates the search dialog).</p></li>
+ <li>Replace an action item with a widget (such as a search box)—creating an
+"action view."
+ <p>In the XML declaration for the menu item, add the {@code android:actionViewLayout} attribute
+with a layout resource or the {@code android:actionViewClass} attribute with the class name of a
+widget. (You must also declare the {@code android:showAsAction} attribute so that the item appears
+in the Action Bar.) If there's not enough room in the Action Bar and the item appears in the
+overflow menu, it behaves like a regular menu item and does not show the widget.</p></li>
- <li>Add an action to the application logo when tapped and replace it with a custom logo
+ <li>Add an action to the application logo and replace it with a custom logo
<p>The application logo is automatically assigned the {@code android.R.id.home} ID,
-which the system deliveres to your activity's {@link android.app.Activity#onOptionsItemSelected
-onOptionsItemSelected()} callback when tapped. Simply respond to this ID in your callback
+which the system delivers to your activity's {@link android.app.Activity#onOptionsItemSelected
+onOptionsItemSelected()} callback when touched. Simply respond to this ID in your callback
method to perform an action such as go to your application's "home" activity.</p>
- <p>To replace the icon with a logo, </p></li>
+ <p>To replace the icon with a logo, specify your application logo in the manifest file with the
+<a href="{@docRoot}guide/topics/manifest/application-element.html#logo">{@code android:logo}</a>
+attribute, then call {@link android.app.ActionBar#setDisplayUseLogoEnabled
+setDisplayUseLogoEnabled(true)} in your activity.</p></li>
- <li>Add breadcrumbs for navigating backward through fragments</li>
- <li>Add built in tabs and a drop-down list for navigation</li>
- <li>Customize the Action Bar themes and custom backgrounds</li>
+ <li>Add breadcrumbs to navigate backward through the back stack of fragments</li>
+ <li>Add tabs or a drop-down list to navigate through fragments</li>
+ <li>Customize the Action Bar with themes and backgrounds</li>
</ul>
-<p>The Action Bar is standard for all applications that set either the <a
+<p>The Action Bar is standard for all applications that use the new holographic theme, which is
+also standard when you set either the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a> or <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-android:targetSdkVersion}</a> to {@code "Honeycomb"}. (The "Honeycomb" API Level is provisional
-and effective only while using the preview SDK—you must change it to the official API
-Level when the final SDK becomes available—see <a
-href="{@docRoot}sdk/preview/start.html">Getting Started</a> for more information.)</p>
+android:targetSdkVersion}</a> to {@code "11"}.</p>
<p>For more information about the Action Bar, read the <a
-href="{@docRoot}guide/topics/ui/actionbar.html">Action
-Bar</a> developer guide.</p>
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> documentation. Several
+samples are also available in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#ActionBar">
+API Demos</a> application.</p>
@@ -153,97 +203,123 @@
<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
clipboard. Clipped data can be plain text, a URI, or an intent.</p>
-<p>By providing the system access to your data in a content provider, the user can copy complex
-content (such as an image or data structure) from your application and paste it into another
-application that supports that type of content.</p>
+<p>By providing the system access to the data you want the user to copy, through a content provider,
+the user can copy complex content (such as an image or data structure) from your application and
+paste it into another application that supports that type of content.</p>
<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>
-<p>To create an item to attach to the clipboard ("copy"), you need to create a new {@link
+<p>To copy an item to the clipboard, you need to create a new {@link
android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
-objects, each describing a single entity. To create a {@link android.content.ClipData} object with
-just one {@link android.content.ClipData.Item}, you can use one of the helper methods, such as
-{@link android.content.ClipData#newPlainText newPlainText()}, {@link
+objects, each describing a single entity. To create a {@link android.content.ClipData} object
+containing just one {@link android.content.ClipData.Item}, you can use one of the helper methods,
+such as {@link android.content.ClipData#newPlainText newPlainText()}, {@link
android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
-appropriate {@link android.content.ClipData.Item}.</p>
+{@link android.content.ClipData.Item} you provide.</p>
<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
android.content.ClipboardManager}.</p>
-<p>You can then acquire ("paste") a file from the clipboard by calling {@link
+<p>You can then read a file from the clipboard (in order to paste it) by calling {@link
android.content.ClipboardManager#getPrimaryClip()} on the {@link
android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
-be more complicated and you need to be sure you can actually handle the data type.</p>
+be complicated and you need to be sure you can actually handle the data type in the clipboard
+before attempting to paste it.</p>
-<p>For more information, see the {@link android.content.ClipData} class reference. You can also see
-an example implementation of copy and paste in the <a
-href="{@docRoot}resources/samples/NotePad/index.html">NotePad</a> sample application.</p>
+<p>The clipboard holds only one piece of clipped data (a {@link android.content.ClipData}
+object) at a time, but one {@link android.content.ClipData} can contain multiple {@link
+android.content.ClipData.Item}s.</p>
+
+<p>For more information, read the <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy
+and Paste</a> documentation. You can also see a simple implementation of copy and paste in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.
+html">API Demos</a> and a more complete implementation in the <a
+href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> application.</p>
<h3>Drag and drop</h3>
-<p>New APIs facilitate the ability for your application to implement drag and drop
-functionality in the UI.</p>
+<p>New APIs simplify drag and drop operations in your application's user interface. A drag
+operation is the transfer of some kind of data—carried in a {@link android.content.ClipData}
+object—from one place to another. The start and end point for the drag operation is a {@link
+android.view.View}, so the APIs that directly handle the drag and drop operations are
+in the {@link android.view.View} class.</p>
+
+<p>A drag and drop operation has a lifecycle that's defined by several drag actions—each
+defined by a {@link android.view.DragEvent} object—such as {@link
+android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
+{@link android.view.DragEvent#ACTION_DROP}. Each view that wants to participate in a drag
+operation can listen for these actions.</p>
<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
-the information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
-that the user sees while dragging, and an {@link java.lang.Object} that can share information about
-the drag object with views that may receive the object.</p>
+the data to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
+that users see under their fingers while dragging, and an {@link java.lang.Object} that can share
+information about the drag object with views that may receive the object.</p>
-<p>To accept a drag object (receive the "drop") in a
-{@link android.view.View}, register the view with an {@link android.view.View.OnDragListener
-OnDragListener} by
-calling {@link android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on
-the view, the system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
+<p>To accept a drag object in a {@link android.view.View} (receive the "drop"), register the view
+with an {@link android.view.View.OnDragListener OnDragListener} by calling {@link
+android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on the view, the
+system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
android.view.View.OnDragListener OnDragListener}, which receives a {@link android.view.DragEvent}
-describing the
-type of event has occurred (such as "drag started", "drag ended", or "drop"). During a drag, the
-system repeatedly calls {@link
-android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to
-deliver a stream of events. The receiving view can
-inquire the event type delivered to {@link android.view.View#onDragEvent onDragEvent()} by calling
-{@link android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
+describing the type of drag action has occurred (such as {@link
+android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
+{@link android.view.DragEvent#ACTION_DROP}). During a drag, the system repeatedly calls {@link
+android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to deliver a
+stream of drag events. The receiving view can inquire the event type delivered to {@link
+android.view.View#onDragEvent onDragEvent()} by calling {@link android.view.DragEvent#getAction
+getAction()} on the {@link android.view.DragEvent}.</p>
-<p>Although a drag event may carry a {@link android.content.ClipData} object, this is not related
-to the system clipboard. The data being dragged is passed as a {@link
-android.content.ClipData} object to {@link android.view.View#startDrag startDrag()} and the system
-sends it to the receiving {@link android.view.View} in the {@link android.view.DragEvent} sent to
-{@link android.view.View.OnDragListener#onDrag onDrag()}. A drag and drop operation should never
-put the dragged data in the global system clipboard.</p>
+<p class="note"><strong>Note:</strong> Although a drag event may carry a {@link
+android.content.ClipData} object, this is not related to the system clipboard. A drag and drop
+operation should never put the dragged data in the system clipboard.</p>
+
+<p>For more information, read the <a href="{@docRoot}guide/topics/ui/drag-drop.html">Dragging and
+Dropping</a> documentation. You can also see an implementation of drag and drop in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">
+API Demos</a> application and the <a
+href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>
+application.</p>
<h3>App widgets</h3>
-<p>Android 3.0 supports several new widget classes for more interactive app widgets, including:
-{@link
-android.widget.GridView}, {@link android.widget.ListView}, {@link android.widget.StackView}, {@link
-android.widget.ViewFlipper}, and {@link android.widget.AdapterViewFlipper}.</p>
+<p>Android 3.0 supports several new widget classes for more interactive app widgets on the users
+Home screen, including: {@link android.widget.GridView}, {@link android.widget.ListView}, {@link
+android.widget.StackView}, {@link android.widget.ViewFlipper}, and {@link
+android.widget.AdapterViewFlipper}.</p>
-<p>You can also use the new {@link android.widget.RemoteViewsService} to populate
-collection views such as ({@link android.widget.GridView}, {@link android.widget.ListView}, and
-{@link android.widget.StackView}).</p>
+<p>More importantly, you can use the new {@link android.widget.RemoteViewsService} to create app
+widgets with collections, using widgets such as {@link android.widget.GridView}, {@link
+android.widget.ListView}, and {@link android.widget.StackView} that are backed by remote data,
+such as from a content provider.</p>
-<p>{@link android.appwidget.AppWidgetProviderInfo} also supports two new fields: {@link
+<p>The {@link android.appwidget.AppWidgetProviderInfo} class (defined in XML with an {@code
+<appwidget-provider>} element) also supports two new fields: {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
-app widget subview, which is auto-advanced by the app widget’s host. The
+app widget subview that should be auto-advanced by the app widget’s host. The
{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
app widget looks like and is shown to the user from the widget picker. If this field is not
supplied, the app widget's icon is used for the preview.</p>
-<p>Android also provides a new widget preview tool ({@code WidgetPreview}), located in the SDK
-tools, to take a screenshot of your app widget, which you can use when specifying the {@link
-android.appwidget.AppWidgetProviderInfo#previewImage} field.</p>
+<p>To help create a preview image for your app widget (to specify in the {@link
+android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field), the Android emulator includes an
+application called "Widget Preview." To create a preview image, launch this application, select the
+app widget for your application and set it up how you'd like your preview image to appear, then save
+it and place it in your application's drawable resources.</p>
-
+<p>You can see an implementation of the new app widget features in the <a
+href="{@docRoot}resources/samples/StackWidget/index.html">StackView App Widget</a> and <a
+href="{@docRoot}resources/samples/WeatherListWidget/index.html">Weather List Widget</a>
+applications.</p>
@@ -251,7 +327,7 @@
<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
-control the notification properties.</p>
+create {@link android.app.Notification} objects.</p>
<p>New features include:</p>
<ul>
<li>Support for a large icon in the notification, using {@link
@@ -261,22 +337,32 @@
<li>Support for custom layouts in the status bar ticker, using {@link
android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
<li>Support for custom notification layouts to include buttons with {@link
-android.app.PendingIntent}s, for more interactive notification widgets
-(such as to control ongoing music in the background).</li>
+android.app.PendingIntent}s, for more interactive notification widgets. For example, a
+notification can control music playback without starting an activity.</li>
</ul>
-
<h3>Content loaders</h3>
<p>New framework APIs facilitate asynchronous loading of data using the {@link
android.content.Loader} class. You can use it in combination with UI components such as views and
fragments to dynamically load data from worker threads. The {@link
-android.content.CursorLoader} subclass is specially designed to help do so for data queried from
-a {@link android.content.ContentResolver}.</p>
+android.content.CursorLoader} subclass is specially designed to help you do so for data backed by
+a {@link android.content.ContentProvider}.</p>
+<p>All you need to do is implement the {@link android.app.LoaderManager.LoaderCallbacks
+LoaderCallbacks} interface to receive callbacks when a new loader is requested or the data has
+changed, then call {@link android.app.LoaderManager#initLoader initLoader()} to initialize the
+loader for your activity or fragment.</p>
+<p>For more information, read the <a
+href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> documentation. You can also see
+example code using loaders in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentListCursorLoader.html">FragmentListCursorLoader</a>
+and <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
+LoaderThrottle</a> samples.</p>
@@ -297,10 +383,10 @@
-<h3>Animation framework</h3>
+<h3 id="animation">Animation framework</h3>
<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
-(View, Drawable, Fragment, Object, or anything else). It allows you to define many aspects of an
+(View, Drawable, Fragment, Object, or anything else). It allows you to define several aspects of an
animation, such as:</p>
<ul>
<li>Duration</li>
@@ -309,13 +395,14 @@
<li>Animator sets to play animations together, sequentially, or after specified delays</li>
<li>Frame refresh delay</li>
</ul>
-
- <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
-color values, by default. To animate any other type of value, you tell the system how to calculate
-the values for that given type, by implementing the {@link android.animation.TypeEvaluator}
-interface.</p>
-<p>There are two animators you can use to animate values of a property: {@link
+ <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
+color values, by default. That is, when an object has a property field for one of these types, you
+can change its value over time to affect an animation. To animate any other type of value, you tell
+the system how to calculate the values for that given type, by implementing the {@link
+android.animation.TypeEvaluator} interface.</p>
+
+<p>There are two animators you can use to animate the values of a property: {@link
android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
object or property that is animated as a result. It simply performs the calculations, and you must
@@ -324,7 +411,7 @@
allows you to set the object and property to animate, and it handles all animation work.
That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
property of the object to change over time, and a set of values to apply to the property over
-time in order to animate it, then start the animation.</p>
+time, then start the animation.</p>
<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
animations for changes you make to your activity layout. To enable transitions for part of the
@@ -338,7 +425,10 @@
discussed above.</p>
<p>For more information, see the <a
-href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer guide.</p>
+href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a> documentation. You can
+also see several samples using the animation APIs in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
+Demos</a> application.</p>
@@ -350,8 +440,11 @@
<li><b>Multiple-choice selection for ListView and GridView</b>
<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
-android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
-from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
+android.widget.AbsListView#setChoiceMode setChoiceMode()} allows users to select multiple items
+from a {@link android.widget.ListView} or {@link android.widget.GridView}. When used in
+conjunction with the Action Bar, users can select multiple items and then select the action to
+perform from a list of options in the Action Bar (which has transformed into a Multi-choice
+Action Mode).</p>
<p>To enable multiple-choice selection, call {@link
android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
@@ -373,10 +466,11 @@
<li><b>New APIs to transform views</b>
- <p>New APIs allow you to easily apply 2D and 3D transformations to {@link
-android.view.View}s in your activity layout, using a set of object properties that define the view's
+ <p>New APIs allow you to easily apply 2D and 3D transformations to views in your activity
+layout. New transformations are made possible with a set of object properties that define the view's
layout position, orientation, transparency and more.</p>
- <p>New methods to set properties include: {@link android.view.View#setAlpha setAlpha()}, {@link
+ <p>New methods to set the view properties include: {@link android.view.View#setAlpha
+setAlpha()}, {@link
android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
@@ -385,14 +479,16 @@
setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
<p>Some methods also have a corresponding XML attribute that you can specify in your layout
-file. Available attributes include: {@code translationX}, {@code translationY}, {@code rotation},
+file, to apply a default transformation. Available attributes include: {@code translationX}, {@code
+translationY}, {@code rotation},
{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
{@code transformPivotY}, and {@code alpha}.</p>
- <p>Using some of these new properties in combination with the new animation framework (discussed
-previously), you can easily create some fancy animations to your views. For example, to rotate a
+ <p>Using some of these new view properties in combination with the new <a
+href="#animation">animation framework</a> (discussed
+above), you can easily apply some fancy animations to your views. For example, to rotate a
view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
-android.view.View}, the "rotationY" property, and the values to use:</p>
+android.view.View}, the "rotationY" property, and the start and end values:</p>
<pre>
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
animator.setDuration(2000);
@@ -403,16 +499,25 @@
<li><b>New holographic themes</b>
- <p>The standard system widgets and overall look have been redesigned for use on larger screens
-such as tablets and incorporate the new "holographic" UI theme. The system applies these styles
-using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.
-Any application that targets the Android 3.0 platform inherits the holographic theme by default.
-However, if your application also applies its own styles, then it will override the holographic
-theme, unless you update your styles to inherit the holographic theme.</p>
+ <p>The standard system widgets and overall look have been redesigned and incorporate a new
+"holographic" user interface theme. The system applies the new theme
+using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.</p>
+
+<p>Any application that targets the Android 3.0 platform—by setting either the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
+or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+android:targetSdkVersion}</a> value to {@code "11"}—inherits the holographic theme by default.
+However, if your application also applies its own theme, then your theme will override the
+holographic theme, unless you update your styles to inherit the holographic theme.</p>
<p>To apply the holographic theme to individual activities or to inherit them in your own theme
definitions, use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
-themes.</p>
+themes. If your application is compatible with version of Android lower than 3.0 and applies
+custom themes, then you should <a
+href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based on platform
+version</a>.</p>
+
</li>
@@ -430,38 +535,36 @@
each child at a regular interval.</p></li>
<li>{@link android.widget.CalendarView}
- <p>Allows users to select dates from a calendar and you can configure the range of dates
- available. A user can select a date by tapping on it and can scroll and fling
- the calendar to a desired date.</p></li>
+ <p>Allows users to select dates from a calendar by touching the date and can scroll or fling the
+calendar to a desired date. You can configure the range of dates available in the widget.</p></li>
<li>{@link android.widget.ListPopupWindow}
<p>Anchors itself to a host view and displays a list of choices, such as for a list of
suggestions when typing into an {@link android.widget.EditText} view.</p></li>
<li>{@link android.widget.NumberPicker}
- <p>Enables the user to select a number from a predefined range. The widget presents an
- input field and up and down buttons for selecting a number. Touching the input field shows a
- scroll wheel that allows the user to scroll through values or touch again to directly edit the
- current value. It also allows you to map from positions to strings, so that
- the corresponding string is displayed instead of the position index.</p></li>
+ <p>Enables the user to select a number from a predefined range. The widget presents an input
+field and up and down buttons for selecting a number. Touching the input field allows the user to
+scroll through values or touch again to directly edit the current value. It also allows you to map
+positions to strings, so that the corresponding string is displayed instead of the index
+position.</p></li>
<li>{@link android.widget.PopupMenu}
<p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
- popup
- appears below the anchor view if there is room, or above it if there is not. If the IME (soft
- keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
+popup appears below the anchor view if there is room, or above it if there is not. If the IME (soft
+keyboard) is visible, the popup does not overlap the IME it until the user touches the
+menu.</p></li>
<li>{@link android.widget.SearchView}
- <p>Provides a search box that works in conjunction with a search provider (in the same manner as
- the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>).
-It
- also displays recent query suggestions or custom suggestions as configured by the search
- provider. This widget is particularly useful for offering search in the Action Bar.</p></li>
+ <p>Provides a search box that works in conjunction with the Search Manager (in the same manner
+as the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>). It
+can also display recent query suggestions or custom suggestions as configured by the search
+provider. This widget is particularly useful for offering search in the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>.</p></li>
<li>{@link android.widget.StackView}
- <p>A view that displays its children in a 3D stack and allows users to discretely swipe through
- the
- children.</p></li>
+ <p>A view that displays its children in a 3D stack and allows users to swipe through
+ views like a rolodex.</p></li>
</ul>
</li>
@@ -470,13 +573,6 @@
-
-<!--
-<h3>WebKit</h3>
-<h3>JSON (utilities)</h3>
- -->
-
-
<h3>Graphics</h3>
<ul>
@@ -519,7 +615,10 @@
<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
as a special, platform-independent shader language for maximum performance. Using Renderscript, you
can accelerate graphics operations and data processing. Renderscript is an ideal way to create
-high-performance 3D effects for applications, wallpapers, carousels, and more.</p></li>
+high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
+<p>For more information, see the <a
+href="{@docRoot}guide/topics/graphics/renderscript.html">3D Rendering and Computation with
+Renderscript</a> documentation.</p></li>
</ul>
@@ -548,7 +647,9 @@
<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live
streaming session. The media framework supports most of the HTTP Live streaming specification,
-including adaptive bit rate.</p></li>
+including adaptive bit rate. See the <a
+href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a> document for
+more information.</p></li>
<li><b>EXIF data</b>
@@ -599,6 +700,301 @@
+<h3>Keyboard support</h3>
+
+<ul>
+<li>Support for Control, Meta, Caps Lock, Num Lock and Scroll Lock modifiers. For more information,
+see {@link android.view.KeyEvent#META_CTRL_ON} and related fields.</li>
+
+<li>Support for full desktop-style keyboards, including support for keys such as Escape, Home, End,
+Delete and others. You can determine whether key events are coming from a full keyboard by
+querying {@link android.view.KeyCharacterMap#getKeyboardType()} and checking for {@link
+android.view.KeyCharacterMap#FULL KeyCharacterMap.FULL}</li>
+
+<li>{@link android.widget.TextView} now supports keyboard-based cut, copy, paste, and select-all,
+using the key combinations Ctrl+X, Ctrl+C, Ctrl+V, and Ctrl+A. It also supports PageUp/PageDown,
+Home/End, and keyboard-based text selection.</li>
+
+<li>{@link android.view.KeyEvent} adds several new methods to make it easier to check the key
+modifier state correctly and consistently. See {@link android.view.KeyEvent#hasModifiers(int)},
+{@link android.view.KeyEvent#hasNoModifiers()},
+{@link android.view.KeyEvent#metaStateHasModifiers(int,int) metaStateHasModifiers()},
+{@link android.view.KeyEvent#metaStateHasNoModifiers(int) metaStateHasNoModifiers()}.</li>
+
+<li>Applications can implement custom keyboard shortcuts by subclassing {@link
+android.app.Activity}, {@link android.app.Dialog}, or {@link android.view.View} and implementing
+{@link android.app.Activity#onKeyShortcut onKeyShortcut()}. The framework calls this method
+whenever a key is combined with Ctrl key. When creating an <a
+href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>, you can register keyboard
+shortcuts by setting either the {@code android:alphabeticShortcut} or {@code
+android:numericShortcut} attribute for each <a
+href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code <item>}</a>
+element (or with {@link android.view.MenuItem#setShortcut setShortcut()}).</li>
+
+<li>Android 3.0 includes a new "virtual keyboard" device with the id {@link
+android.view.KeyCharacterMap#VIRTUAL_KEYBOARD KeyCharacterMap.VIRTUAL_KEYBOARD}. The virtual
+keyboard has a desktop-style US key map which is useful for synthesizing key events for testing
+input.</li>
+
+</ul>
+
+
+
+
+<h3>Split touch events</h3>
+
+<p>Previously, only a single view could accept touch events at one time. Android 3.0
+adds support for splitting touch events across views and even windows, so different views can accept
+simultaneous touch events.</p>
+
+<p>Split touch events is enabled by default when an application targets
+Android 3.0. That is, when the application has set either the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
+or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+android:targetSdkVersion}</a> attribute's value to {@code "11"}.</p>
+
+<p>However, the following properties allow you to disable split touch events across views inside
+specific view groups and across windows.</p>
+
+<ul>
+<li>The {@link android.R.attr#splitMotionEvents android:splitMotionEvents} attribute for view groups
+allows you to disable split touch events that occur between child views in a layout. For example:
+<pre>
+<LinearLayout android:splitMotionEvents="false" ... >
+ ...
+</LinearLayout>
+</pre>
+<p>This way, child views in the linear layout cannot split touch events—only one view can
+receive touch events at a time.</p>
+</li>
+
+<li>The {@link android.R.attr#windowEnableSplitTouch android:windowEnableSplitTouch} style property
+allows you to disable split touch events across windows, by applying it to a theme for the activity
+or entire application. For example:
+<pre>
+<style name="NoSplitMotionEvents" parent="android:Theme.Holo">
+ <item name="android:windowEnableSplitTouch">false</item>
+ ...
+</style>
+</pre>
+<p>When this theme is applied to an <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> or <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>,
+only touch events within the current activity window are accepted. For example, by disabling split
+touch events across windows, the system bar cannot receive touch events at the same time as the
+activity. This does <em>not</em> affect whether views inside the activity can split touch
+events—by default, the activity can still split touch events across views.</p>
+
+<p>For more information about creating a theme, read <a
+href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
+</li>
+</ul>
+
+
+
+<h3>WebKit</h3>
+
+<ul>
+ <li>New {@link android.webkit.WebViewFragment} class to create a fragment composed of a
+{@link android.webkit.WebView}.</li>
+ <li>New {@link android.webkit.WebSettings} methods:
+ <ul>
+ <li>{@link
+android.webkit.WebSettings#setDisplayZoomControls setDisplayZoomControls()} allows you to hide
+the on-screen zoom controls while still allowing the user to zoom with finger gestures ({@link
+android.webkit.WebSettings#setBuiltInZoomControls setBuiltInZoomControls()} must be set
+{@code true}).</li>
+ <li>New {@link android.webkit.WebSettings} method, {@link
+android.webkit.WebSettings#setEnableSmoothTransition setEnableSmoothTransition()}, allows you
+to enable smooth transitions when panning and zooming. When enabled, WebView will choose a solution
+to maximize the performance (for example, the WebView's content may not update during the
+transition).</li>
+ </ul>
+ <li>New {@link android.webkit.WebView} methods:
+ <ul>
+ <li>{@link android.webkit.WebView#onPause onPause()} callback, to pause any processing
+associated with the WebView when it becomes hidden. This is useful to reduce unnecessary CPU or
+network traffic when the WebView is not in the foreground.</li>
+ <li>{@link android.webkit.WebView#onResume onResume()} callback, to resume processing
+associated with the WebView, which was paused during {@link android.webkit.WebView#onPause
+onPause()}.</li>
+ <li>{@link android.webkit.WebView#saveWebArchive saveWebArchive()} allows you to save the
+current view as a web archive on the device.</li>
+ <li>{@link android.webkit.WebView#showFindDialog showFindDialog()} initiates a text search in
+the current view.</li>
+ </ul>
+ </li>
+</ul>
+
+
+
+<h3>Browser</h3>
+
+<p>The Browser application adds the following features to support web applications:</p>
+
+<ul>
+ <li><b>Media capture</b>
+ <p>As defined by the <a href="http://dev.w3.org/2009/dap/camera/">HTML Media Capture</a>
+specification, the Browser allows web applications to access audio, image and video capture
+capabilities of the device. For example, the following HTML provides an input for the user to
+capture a photo to upload:</p>
+<pre>
+<input type="file" accept="image/*;capture=camera" />
+</pre>
+<p>Or by excluding the {@code capture=camera} parameter, the user can choose to either capture a
+new image with the camera or select one from the device (such as from the Gallery application).</p>
+ </li>
+
+ <li><b>Device Orientation</b>
+ <p>As defined by the <a
+href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device Orientation Event</a>
+specification, the Browser allows web applications to listen to DOM events that provide information
+about the physical orientation and motion of the device.</p>
+ <p>The device orientation is expressed with the x, y, and z axes, in degrees and motion is
+expressed with acceleration and rotation rate data. A web page can register for orientation
+events by calling {@code window.addEventListener} with event type {@code "deviceorientation"}
+and register for motion events by registering the {@code "devicemotion"} event type.</p>
+ </li>
+
+ <li><b>CSS 3D Transforms</b>
+ <p>As defined by the <a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D Transform
+Module</a> specification, the Browser allows elements rendered by CSS to be transformed in three
+dimensions.</p>
+ </li>
+</ul>
+
+
+
+<h3>JSON utilities</h3>
+
+<p>New classes, {@link android.util.JsonReader} and {@link android.util.JsonWriter}, help you
+read and write JSON streams. The new APIs compliment the {@link org.json} classes which manipulate a
+document in memory.</p>
+
+<p>You can create an instance of {@link android.util.JsonReader} by calling
+its constructor method and passing the {@link java.io.InputStreamReader} that feeds the JSON string.
+Then begin reading an object by calling {@link android.util.JsonReader#beginObject()}, read a
+key name with {@link android.util.JsonReader#nextName()}, read the value using methods
+respective to the type, such as {@link android.util.JsonReader#nextString()} and {@link
+android.util.JsonReader#nextInt()}, and continue doing so while {@link
+android.util.JsonReader#hasNext()} is true.</p>
+
+<p>You can create an instance of {@link android.util.JsonWriter} by calling its constructor and
+passing the appropriate {@link java.io.OutputStreamWriter}. Then write the JSON data in a manner
+similar to the reader, using {@link android.util.JsonWriter#name name()} to add a property name
+and an appropriate {@link android.util.JsonWriter#value value()} method to add the respective
+value.</p>
+
+<p>These classes are strict by default. The {@link android.util.JsonReader#setLenient setLenient()}
+method in each class configures them to be more liberal in what they accept. This lenient
+parse mode is also compatible with the {@link org.json}'s default parser.</p>
+
+
+
+
+<h3>New feature constants</h3>
+
+<p>The <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+manfest element should be used to inform external entities (such as Android Market) of the set of
+hardware and software features on which your application depends. In this release, Android adds the
+following new constants that applications can declare with this element:</p>
+
+<ul>
+ <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}
+ <p>When declared, this indicates that the application is compatible with a device that offers an
+emulated touchscreen (or better). A device that offers an emulated touchscreen provides a user input
+system that can emulate a subset of touchscreen
+capabilities. An example of such an input system is a mouse or remote control that drives an
+on-screen cursor. Such input systems support basic touch events like click down, click up, and drag.
+However, more complicated input types (such as gestures, flings, etc.) may be more difficult or
+impossible on faketouch devices (and multitouch gestures are definitely not possible).</p>
+ <p>If your application does <em>not</em> require complicated gestures and you do
+<em>not</em> want your application filtered from devices with an emulated touchscreen, you
+should declare {@link
+android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"} with a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+element. This way, your application will be available to the greatest number of device types,
+including those that provide only an emulated touchscreen input.</p>
+ <p>All devices that include a touchscreen also support {@link
+android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}, because
+touchscreen capabilities are a superset of faketouch capabilities. Thus, unless you actually require
+a touchscreen, you should add a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+element for faketouch.</p>
+ </li>
+</ul>
+
+
+
+
+<h3>New permissions</h3>
+
+<ul>
+ <li>{@link android.Manifest.permission#BIND_REMOTEVIEWS
+"android.permission.BIND_REMOTEVIEWS"}
+ <p>This must be declared as a required permission in the <a
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> manifest
+element for an implementation of {@link android.widget.RemoteViewsService}. For example, when
+creating an App Widget that uses {@link android.widget.RemoteViewsService} to populate a
+collection view, the manifest entry may look like this:</p>
+<pre>
+<service android:name=".widget.WidgetService"
+ android:exported="false"
+ android:permission="android.permission.BIND_REMOTEVIEWS" />
+</pre>
+</ul>
+
+
+
+<h3>New platform technologies</h3>
+
+<ul>
+<li><strong>Storage</strong>
+ <ul>
+ <li>ext4 file system support to enable onboard eMMC storage.</li>
+ <li>FUSE file system to support MTP devices.</li>
+ <li>USB host mode support to support keyboards and USB hubs.</li>
+ <li>Support for MTP/PTP </li>
+ </ul>
+</li>
+
+<li><strong>Linux Kernel</strong>
+ <ul>
+ <li>Upgraded to 2.6.36</li>
+ </ul>
+</li>
+
+<li><strong>Dalvik VM</strong>
+ <ul>
+ <li>New code to support and optimize for SMP</li>
+ <li>Various improvements to the JIT infrastructure</li>
+ <li>Garbage collector improvements:
+ <ul>
+ <li>Tuned for SMP</li>
+ <li>Support for larger heap sizes</li>
+ <li>Unified handling for bitmaps and byte buffers</li>
+ </ul>
+ </li>
+ </ul>
+</li>
+
+<li><strong>Dalvik Core Libraries</strong>
+ <ul>
+ <li>New, much faster implementation of NIO (modern I/O library)</li>
+ <li>Improved exception messages</li>
+ <li>Correctness and performance fixes throughout</li>
+ </ul>
+</li>
+</ul>
+
+
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
+{@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
@@ -606,21 +1002,25 @@
<h2 id="api-level">API Level</h2>
-<p>The Android 3.0 platform delivers an updated version of
-the framework API. Because this is a preview of the Android 3.0 API, it uses a provisional API
-level of "Honeycomb", instead of an integer identifier, which will be provided when the final SDK
-is made available and all APIs are final.</p>
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier —
+<strong>{@sdkPlatformApiLevel}</strong> — that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
-<p>To use APIs introduced in Android 3.0 in your application, you need compile the application
-against the Android library that is provided in the Android 3.0 preview SDK platform and you must
-declare this API Level in your manifest as <code>android:minSdkVersion="Honeycomb"</code>, in the
-<code><uses-sdk></code> element in the application's manifest.</p>
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
+you need compile the application against the Android library that is provided in
+the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might
+also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
+attribute to the <code><uses-sdk></code> element in the application's
+manifest. If your application is designed to run only on Android 2.3 and higher,
+declaring the attribute prevents the application from being installed on earlier
+versions of the platform.</p>
-<p>For more information about using this provisional API Level and setting up your environment
-to use the preview SDK, please see the <a href="{@docRoot}sdk/preview/start.html">Getting
-Started</a> document.</p>
-
-
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
<h2 id="apps">Built-in Applications</h2>
@@ -632,6 +1032,7 @@
<tr>
<td style="border:0;padding-bottom:0;margin-bottom:0;">
<ul>
+<li>API Demos</li>
<li>Browser</li>
<li>Calculator</li>
<li>Camera</li>
@@ -646,11 +1047,14 @@
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
<ul>
<li>Gallery</li>
+<li>Gestures Builder</li>
+<li>Messaging</li>
<li>Music</li>
<li>Search</li>
<li>Settings</li>
-<li>Spare Parts (developer app)</li>
+<li>Spare Parts</li>
<li>Speech Recorder</li>
+<li>Widget Preview</li>
</ul>
</td>
</tr>
diff --git a/docs/html/sdk/api_diff/11/changes.html b/docs/html/sdk/api_diff/11/changes.html
index 5166a8f..508ed16 100644
--- a/docs/html/sdk/api_diff/11/changes.html
+++ b/docs/html/sdk/api_diff/11/changes.html
@@ -4,7 +4,7 @@
<meta name="generator" content="JDiff v1.1.0">
<!-- Generated by the JDiff Javadoc doclet -->
<!-- (http://www.jdiff.org) -->
-<!-- on Tue Feb 08 11:41:20 PST 2011 -->
+<!-- on Sat Feb 19 17:19:55 PST 2011 -->
<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
<TITLE>
diff --git a/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html
index 1be3b83..454d0d8 100644
--- a/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html
@@ -1117,9 +1117,6 @@
<!-- Method getFragmentManager -->
<nobr><A HREF="android.app.Activity.html#android.app.Activity.getFragmentManager_added()" class="hiddenlink" target="rightframe"><b>getFragmentManager</b>
()</A></nobr><br>
-<!-- Method getGlobalProxyAdmin -->
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getGlobalProxyAdmin_added()" class="hiddenlink" target="rightframe"><b>getGlobalProxyAdmin</b>
-()</A></nobr><br>
<!-- Method getIcon -->
<nobr><A HREF="android.preference.Preference.html#android.preference.Preference.getIcon_added()" class="hiddenlink" target="rightframe"><b>getIcon</b>
()</A></nobr><br>
@@ -3058,9 +3055,6 @@
<nobr><A HREF="android.widget.Scroller.html#android.widget.Scroller.setFriction_added(float)" class="hiddenlink" target="rightframe">type <b>
(<code>float</code>)</b> in android.widget.Scroller
</A></nobr><br>
-<!-- Method setGlobalProxy -->
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setGlobalProxy_added(android.content.ComponentName, java.net.Proxy, java.util.List<java.lang.String>)" class="hiddenlink" target="rightframe"><b>setGlobalProxy</b>
-(<code>ComponentName, Proxy, List<String></code>)</A></nobr><br>
<!-- Method setGravity -->
<nobr><A HREF="android.widget.Spinner.html#android.widget.Spinner.setGravity_added(int)" class="hiddenlink" target="rightframe"><b>setGravity</b>
(<code>int</code>)</A></nobr><br>
@@ -3810,9 +3804,6 @@
<!-- Field USES_POLICY_EXPIRE_PASSWORD -->
<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD" class="hiddenlink" target="rightframe">USES_POLICY_EXPIRE_PASSWORD</A>
</nobr><br>
-<!-- Field USES_POLICY_SETS_GLOBAL_PROXY -->
-<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY" class="hiddenlink" target="rightframe">USES_POLICY_SETS_GLOBAL_PROXY</A>
-</nobr><br>
<!-- Field valueFrom -->
<A NAME="V"></A>
<br><font size="+2">V</font>
diff --git a/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html
index d62c2dc..c36382a 100644
--- a/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html
@@ -1520,9 +1520,6 @@
<!-- Method getGlobalExternalFreedSize -->
<nobr><A HREF="android.os.Debug.html#android.os.Debug.getGlobalExternalFreedSize_changed()" class="hiddenlink" target="rightframe">getGlobalExternalFreedSize
()</A></nobr><br>
-<!-- Method getGlobalProxyAdmin -->
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getGlobalProxyAdmin_added()" class="hiddenlink" target="rightframe"><b>getGlobalProxyAdmin</b>
-()</A></nobr><br>
<!-- Method getHost -->
<nobr><A HREF="android.net.Proxy.html#android.net.Proxy.getHost_changed(android.content.Context)" class="hiddenlink" target="rightframe">getHost
(<code>Context</code>)</A></nobr><br>
@@ -3923,9 +3920,6 @@
<!-- Method setGlobalAllocationLimit -->
<nobr><A HREF="android.os.Debug.html#android.os.Debug.setGlobalAllocationLimit_changed(int)" class="hiddenlink" target="rightframe">setGlobalAllocationLimit
(<code>int</code>)</A></nobr><br>
-<!-- Method setGlobalProxy -->
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setGlobalProxy_added(android.content.ComponentName, java.net.Proxy, java.util.List<java.lang.String>)" class="hiddenlink" target="rightframe"><b>setGlobalProxy</b>
-(<code>ComponentName, Proxy, List<String></code>)</A></nobr><br>
<!-- Method setGravity -->
<nobr><A HREF="android.widget.Spinner.html#android.widget.Spinner.setGravity_added(int)" class="hiddenlink" target="rightframe"><b>setGravity</b>
(<code>int</code>)</A></nobr><br>
@@ -4826,9 +4820,6 @@
<!-- Field USES_POLICY_EXPIRE_PASSWORD -->
<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD" class="hiddenlink" target="rightframe">USES_POLICY_EXPIRE_PASSWORD</A>
</nobr><br>
-<!-- Field USES_POLICY_SETS_GLOBAL_PROXY -->
-<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY" class="hiddenlink" target="rightframe">USES_POLICY_SETS_GLOBAL_PROXY</A>
-</nobr><br>
<!-- Field valueFrom -->
<A NAME="V"></A>
<br><font size="+2">V</font>
diff --git a/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html
index 0de6f00..79aaf10 100644
--- a/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.attr.html b/docs/html/sdk/api_diff/11/changes/android.R.attr.html
index 3d896e1..b6cac99 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.attr.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.dimen.html b/docs/html/sdk/api_diff/11/changes/android.R.dimen.html
index ba8688f..205f3fc 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.dimen.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.dimen.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.drawable.html b/docs/html/sdk/api_diff/11/changes/android.R.drawable.html
index ddce2d3..8172aed 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.drawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.drawable.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.id.html b/docs/html/sdk/api_diff/11/changes/android.R.id.html
index 1ac126d..163425d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.id.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.id.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.layout.html b/docs/html/sdk/api_diff/11/changes/android.R.layout.html
index 85ae20e..a596cfd 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.layout.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.layout.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.string.html b/docs/html/sdk/api_diff/11/changes/android.R.string.html
index c28dc59..0e0f105 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.string.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.string.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.style.html b/docs/html/sdk/api_diff/11/changes/android.R.style.html
index 832221e..74ff759a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.style.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html b/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html
index 5d39a581..f3c6626 100644
--- a/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html b/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
index 354ded0..58c532a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
+++ b/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Activity.html b/docs/html/sdk/api_diff/11/changes/android.app.Activity.html
index 24ee0f8..96d728a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Activity.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
index c14fb27..2823629 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html
index 4163480..6c46ba7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
index 2bbac02..532eb6b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html
index 0382b73..cb5c2f2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html b/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
index e5cb692..d6b69c0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html b/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html
index a514fcb..fe83a77 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
index 24049ec..f85ec18 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html
index f6de68c..3c138ad 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Notification.html b/docs/html/sdk/api_diff/11/changes/android.app.Notification.html
index 1d0948f..19086f5 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Notification.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Notification.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html
index a66438b..fed6b615 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html b/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html
index bf32ac5..7437921 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html
index 9be408e..4621bf0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Service.html b/docs/html/sdk/api_diff/11/changes/android.app.Service.html
index bc2ce97..0bf322d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Service.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Service.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html
index 308a055..42c6f8b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
index 8801ac5..1bb82b3 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
@@ -96,13 +96,6 @@
</TD>
<TD> </TD>
</TR>
-<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
- <TD VALIGN="TOP" WIDTH="25%">
- <A NAME="android.app.admin.DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY"></A>
- <nobr><code>int</code> <A HREF="../../../../reference/android/app/admin/DeviceAdminInfo.html#USES_POLICY_SETS_GLOBAL_PROXY" target="_top"><code>USES_POLICY_SETS_GLOBAL_PROXY</code></A></nobr>
- </TD>
- <TD> </TD>
-</TR>
</TABLE>
</div>
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
index aebcd6f..28691bc 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html b/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
index b54a22d..9527bda 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
@@ -83,13 +83,6 @@
</TH>
<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
<TD VALIGN="TOP" WIDTH="25%">
- <A NAME="android.app.admin.DevicePolicyManager.getGlobalProxyAdmin_added()"></A>
- <nobr><code>ComponentName</code> <A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html#getGlobalProxyAdmin()" target="_top"><code>getGlobalProxyAdmin</code></A>()</nobr>
- </TD>
- <TD> </TD>
-</TR>
-<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
- <TD VALIGN="TOP" WIDTH="25%">
<A NAME="android.app.admin.DevicePolicyManager.getPasswordExpiration_added(android.content.ComponentName)"></A>
<nobr><code>long</code> <A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html#getPasswordExpiration(android.content.ComponentName)" target="_top"><code>getPasswordExpiration</code></A>(<code>ComponentName</code>)</nobr>
</TD>
@@ -174,13 +167,6 @@
</TR>
<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
<TD VALIGN="TOP" WIDTH="25%">
- <A NAME="android.app.admin.DevicePolicyManager.setGlobalProxy_added(android.content.ComponentName, java.net.Proxy, java.util.List<java.lang.String>)"></A>
- <nobr><code>ComponentName</code> <A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html#setGlobalProxy(android.content.ComponentName, java.net.Proxy, java.util.List<java.lang.String>)" target="_top"><code>setGlobalProxy</code></A>(<code>ComponentName,</nobr> Proxy<nobr>,</nobr> List<String><nobr><nobr></code>)</nobr>
- </TD>
- <TD> </TD>
-</TR>
-<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
- <TD VALIGN="TOP" WIDTH="25%">
<A NAME="android.app.admin.DevicePolicyManager.setPasswordExpirationTimeout_added(android.content.ComponentName, long)"></A>
<nobr><code>void</code> <A HREF="../../../../reference/android/app/admin/DevicePolicyManager.html#setPasswordExpirationTimeout(android.content.ComponentName, long)" target="_top"><code>setPasswordExpirationTimeout</code></A>(<code>ComponentName,</nobr> long<nobr><nobr></code>)</nobr>
</TD>
diff --git a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
index 4f1a5b8..ec97611 100644
--- a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
+++ b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
index 88afafe..81585ba 100644
--- a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
index 36a3ce3..dbcbce2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html b/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
index 3ca03e3..e71af0f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html b/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
index 37e96ab..0c3d615 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html b/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
index eefe15d..526c923 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html
index 1c60641..a1c2be1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
index 24de46c..569e158 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html
index 0cbeea0..33c85fc 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html
index 98b3e0f..c5348d3 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.Context.html b/docs/html/sdk/api_diff/11/changes/android.content.Context.html
index 4c6b4eb..ae902c0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.Context.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html
index f3ac2cc..e7c38ce 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.Intent.html b/docs/html/sdk/api_diff/11/changes/android.content.Intent.html
index f5abec5..20f5cf9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.Intent.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
index ff6a71d..b36c517 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html
index c46e257..7d77e1b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html b/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
index 7fe598d..4b810a5 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html
index c00e677..d8b75aa 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
index 0514240..32c8de7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
index c79d5f9..cb1994e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
index 58341f9..f1a5385 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
index 5a6f4bf..42e668a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
index 14708d0..11536cb8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html
index 5eaf4c8..a2c3198 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html b/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html
index e8cf9e8..12811ed 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html b/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
index 4511dc1..2425924 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html b/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html
index 1c4bda4..5df7634 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html b/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html
index 0a1ed45..50284fb 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html b/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html
index d9fdcec..d5152d1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html b/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
index 628ce54..97436a2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
index 705a8cf..324912c 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
index 259192d..779678d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
index c38367b..b782814 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
index e61a066..20aab20 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
index aae8194..aa6bc15 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
index 7bedb5d..ee6c8fb 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html b/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
index 53d3fdb..68aa872 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html
index bf25436..a4cf3e6 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
index 2977fb3..b2dd308 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
index 09f7e5d..0b28b32 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
index 55990327..603d4e7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
index 6f5a1e6..7c69ecd 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
index 688fb54..d933421 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
index fa67596..f2edcf9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html
index a8f2f56..32dfdde 100644
--- a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html b/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html
index 6973a64..14d24ad 100644
--- a/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
index 3cc8fcb..9769634 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
index f4bb841..83d5e9e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
index c025fc0..c6e749a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
index 5ce6d47..58490d8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html
index 6a201ae..d946c68 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html b/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
index 0cda7ef..94a0784 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html b/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html
index 53630fc..e99c6de 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
index 3bcc197..1035e58 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html
index d4fb6cb..57241e2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html b/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html
index c4053de..90d43f2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html
+++ b/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html b/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html
index 14e94d0..3261b03 100644
--- a/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.net.Uri.html b/docs/html/sdk/api_diff/11/changes/android.net.Uri.html
index 7bb8b183..c0afdd2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.net.Uri.html
+++ b/docs/html/sdk/api_diff/11/changes/android.net.Uri.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html b/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
index ba9366c..d49cd65 100644
--- a/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html b/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html
index 3b6caca..6655d8ad 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html b/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html
index 7c43f4c..832a5f0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
index 5c7e9be..14357aa 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html b/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html
index a10c6ee..14964de 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Debug.html b/docs/html/sdk/api_diff/11/changes/android.os.Debug.html
index e246dab2..7688959 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Debug.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Debug.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html b/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html
index c52aa3e..0615328 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Environment.html b/docs/html/sdk/api_diff/11/changes/android.os.Environment.html
index d442c3c..4c9554a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Environment.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Environment.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
index 11d58cb..3413c07 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
index 2a2d2a1..89cc546 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html
index f6f67bc..91cacad 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html b/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html
index 33e97af..eb400c0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html b/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html
index 769be1f..68b1829 100644
--- a/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html
+++ b/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html b/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
index 4818c3b..f4c2b97 100644
--- a/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
+++ b/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html b/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html
index 378b739..56e510f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
index 8310d79..2297049 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
index 79a10ef..ee96c98 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
index 977cb16..584d98b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
index 5dd50fa..023a1dc 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
index 245ccd6..4fe9e12 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
index 83cdcad..f4bf4d8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
index 8cd4f79..7071f67 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
index 93ecc6b..5817b98 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
index a4b9a61..5c83818 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
index 9c1624c..2988b8b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
index 8164d5b..986064e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
index a39f75f..7f2786a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
index e474257..e3b6975 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
index 4dc3604..795461f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
index cc8991c..fb3a818 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html
index c46e247..91f1cc9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html b/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
index 027b99f..f0b2458 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
index 8a7dfac..017b8b7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html
index 1069d4f..546a8a1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html
index ed4c14c..d01ded8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html b/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
index b8d0f2de..528ba3e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html b/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
index abb12f2..ecd4ae2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
+++ b/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
index d052e33..13258f9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html
index d29faf5..80b7071 100644
--- a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
index fa78a3d..44479f2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
index 242543a..ba731ba 100644
--- a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html b/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html
index cfa9b82..58d4081 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.InputType.html b/docs/html/sdk/api_diff/11/changes/android.text.InputType.html
index e1c90c7..0bc0783 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.InputType.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.InputType.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html b/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
index e5142ad..2b30205 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html b/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html
index 04481b5..733ae32 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html b/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
index 874bc56..e8018ff 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html b/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
index 0a9d7d2..f8476bc 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html b/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
index 6ce55bf..326579d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html b/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
index f7a04af..4c2a5af 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html b/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html
index df81a2c..4e5829a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html b/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
index f33dc97..e4d3735 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html b/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html
index 31db636..8985ccb 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html b/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html
index da2d421..3dd7be2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html b/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html
index 0bf93e3..c40f954 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
index 9adcb31..945bee7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
index d46a5f7..07150bc 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html
index a8cb83a..7eab63e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html b/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html
index 44fee2e0..384f01e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html b/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html
index 4fa11b9..ae27c1d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html
index 9a2994e..d5cb341 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html b/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
index 952c6f1..bc9da111 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.Surface.html b/docs/html/sdk/api_diff/11/changes/android.view.Surface.html
index 95daf0e..dfbfde3 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.Surface.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.Surface.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html b/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
index d97f6eb..409e310 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.View.html b/docs/html/sdk/api_diff/11/changes/android.view.View.html
index 97a38dc7..6de1ad7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.View.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html
index c014d5c..c14d36f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html b/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html
index 79646cd..9caa391 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html b/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html
index 9bc54f5..73aa436 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.Window.html b/docs/html/sdk/api_diff/11/changes/android.view.Window.html
index 62c3bb9..c55a207 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.Window.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.Window.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
index 15cf4ee..c68dce7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html b/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html
index d2a593b..8bf383b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html b/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
index de6170c..c292c24 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
index 10a1b51..6104007 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
index 8dd751e..bd0e913 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
index 14a56f4..3a21f56 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
index 21c2053..1f8cd1e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
index c8e7c24..faa103b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
index 680e2fe..5e8ef7f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
index ae7396b..68a58d3 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
index 2924189..9ba6fb2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html
index f85b0d2..0330d94 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html
index 6a59505..d5dd2ca 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html
index 023f085..dbd3c12 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html b/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
index 5f1bb1a..65172a0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html b/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html
index 294126e..03dc6a1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
index 4480a6c..4dbdc6e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
index 4a58279..537dd79 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html b/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html
index 64f70b5..2309fed 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html b/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html
index 4ad3720..73b9dbc 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html b/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html
index 7eb3d5d..2658d25 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html b/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html
index 29324a70..acdd2b7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html b/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html
index 1f82834..922cbd7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html b/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html
index 58c0677..9cc2fa8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html b/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html
index 4aad339..f3aebe0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html b/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
index 1d6d6b7..de5f6eb 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html
index be2a0e2..53eef91 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
index 169abdd..a41e9df 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html b/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html
index 340fbd0..b6e77be 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
index ba62dd3..602482b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html b/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html
index 23773e8..e2ee047 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html b/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html
index e63bee4..45488a7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html
index 48e551e..780259e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/changes-summary.html b/docs/html/sdk/api_diff/11/changes/changes-summary.html
index a042283..b6af9ae 100644
--- a/docs/html/sdk/api_diff/11/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/11/changes/changes-summary.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html b/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
index e91f266..5bbc2a8 100644
--- a/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
+++ b/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/fields_index_additions.html b/docs/html/sdk/api_diff/11/changes/fields_index_additions.html
index 8562538..12ecd4f 100644
--- a/docs/html/sdk/api_diff/11/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/fields_index_additions.html
@@ -1552,8 +1552,6 @@
</nobr><br>
<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD" class="hiddenlink" target="rightframe">USES_POLICY_EXPIRE_PASSWORD</A>
</nobr><br>
-<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY" class="hiddenlink" target="rightframe">USES_POLICY_SETS_GLOBAL_PROXY</A>
-</nobr><br>
<A NAME="V"></A>
<br><font size="+2">V</font>
<a href="#A"><font size="-2">A</font></a>
diff --git a/docs/html/sdk/api_diff/11/changes/fields_index_all.html b/docs/html/sdk/api_diff/11/changes/fields_index_all.html
index a218b9c..52705a5 100644
--- a/docs/html/sdk/api_diff/11/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/fields_index_all.html
@@ -1633,8 +1633,6 @@
</nobr><br>
<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD" class="hiddenlink" target="rightframe">USES_POLICY_EXPIRE_PASSWORD</A>
</nobr><br>
-<nobr><A HREF="android.app.admin.DeviceAdminInfo.html#android.app.admin.DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY" class="hiddenlink" target="rightframe">USES_POLICY_SETS_GLOBAL_PROXY</A>
-</nobr><br>
<A NAME="V"></A>
<br><font size="+2">V</font>
<a href="#A"><font size="-2">A</font></a>
diff --git a/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html b/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
index 911563e..4ba7af5 100644
--- a/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
+++ b/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.lang.Object.html b/docs/html/sdk/api_diff/11/changes/java.lang.Object.html
index 724f0e8..c894b07 100644
--- a/docs/html/sdk/api_diff/11/changes/java.lang.Object.html
+++ b/docs/html/sdk/api_diff/11/changes/java.lang.Object.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.Deque.html b/docs/html/sdk/api_diff/11/changes/java.util.Deque.html
index 221750f..1039093 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.Deque.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.Deque.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.Locale.html b/docs/html/sdk/api_diff/11/changes/java.util.Locale.html
index 8967c69..c27208e 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.Locale.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.Locale.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html b/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html
index 74f15ba..e611d87 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html b/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html
index e441b9d..7fbc133 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.Queue.html b/docs/html/sdk/api_diff/11/changes/java.util.Queue.html
index 29a1256..0595cfa 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.Queue.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.Queue.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
index a1e371a..a0f3777 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html
index 232c8c0..3cf915b 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html
index db430c4..044e5ca 100644
--- a/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
@@ -71,7 +71,7 @@
<div id="doc-content" style="position:relative;">
<div id="mainBodyFluid">
<h1>API Change Statistics</h1>
-<p>The overall difference between API Levels 10 and 11 is approximately <span style="color:222;font-weight:bold;">2.57%</span>.
+<p>The overall difference between API Levels 10 and 11 is approximately <span style="color:222;font-weight:bold;">2.56%</span>.
</p>
<br>
<a name="numbers"></a>
@@ -110,24 +110,24 @@
</TR>
<TR>
<TD>Methods</TD>
- <TD ALIGN="right">433</TD>
+ <TD ALIGN="right">431</TD>
<TD ALIGN="right">100</TD>
<TD ALIGN="right">26</TD>
- <TD ALIGN="right">559</TD>
+ <TD ALIGN="right">557</TD>
</TR>
<TR>
<TD>Fields</TD>
- <TD ALIGN="right">620</TD>
+ <TD ALIGN="right">619</TD>
<TD ALIGN="right">36</TD>
<TD ALIGN="right">0</TD>
- <TD ALIGN="right">656</TD>
+ <TD ALIGN="right">655</TD>
</TR>
<TR>
<TD style="background-color:#FAFAFA"><b>Total</b></TD>
- <TD style="background-color:#FAFAFA" ALIGN="right"><strong>1185</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>1182</strong></TD>
<TD style="background-color:#FAFAFA" ALIGN="right"><strong>375</strong></TD>
<TD style="background-color:#FAFAFA" ALIGN="right"><strong>27</strong></TD>
- <TD style="background-color:#FAFAFA" ALIGN="right"><strong>1587</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>1584</strong></TD>
</TR>
</TABLE>
<br>
@@ -159,12 +159,12 @@
<TD><A HREF="pkg_android.html">android</A></TD>
</TR>
<TR>
- <TD ALIGN="center">15</TD>
- <TD><A HREF="pkg_android.app.admin.html">android.app.admin</A></TD>
+ <TD ALIGN="center">14</TD>
+ <TD><A HREF="pkg_android.preference.html">android.preference</A></TD>
</TR>
<TR>
<TD ALIGN="center">14</TD>
- <TD><A HREF="pkg_android.preference.html">android.preference</A></TD>
+ <TD><A HREF="pkg_android.app.admin.html">android.app.admin</A></TD>
</TR>
<TR>
<TD ALIGN="center">11</TD>
@@ -336,11 +336,6 @@
android.R.style</A></TD>
</TR>
<TR>
- <TD ALIGN="center">34</TD>
- <TD><A HREF="android.app.admin.DevicePolicyManager.html">
-android.app.admin.DevicePolicyManager</A></TD>
-</TR>
-<TR>
<TD ALIGN="center">33</TD>
<TD><A HREF="android.R.dimen.html">
android.R.dimen</A></TD>
@@ -361,6 +356,11 @@
android.widget.DatePicker</A></TD>
</TR>
<TR>
+ <TD ALIGN="center">32</TD>
+ <TD><A HREF="android.app.admin.DevicePolicyManager.html">
+android.app.admin.DevicePolicyManager</A></TD>
+</TR>
+<TR>
<TD ALIGN="center">30</TD>
<TD><A HREF="android.media.CamcorderProfile.html">
android.media.CamcorderProfile</A></TD>
@@ -762,11 +762,6 @@
</TR>
<TR>
<TD ALIGN="center">6</TD>
- <TD><A HREF="android.app.admin.DeviceAdminInfo.html">
-android.app.admin.DeviceAdminInfo</A></TD>
-</TR>
-<TR>
- <TD ALIGN="center">6</TD>
<TD><A HREF="android.media.MediaRecorder.AudioSource.html">
android.media.MediaRecorder.AudioSource</A></TD>
</TR>
@@ -867,6 +862,11 @@
</TR>
<TR>
<TD ALIGN="center">4</TD>
+ <TD><A HREF="android.app.admin.DeviceAdminInfo.html">
+android.app.admin.DeviceAdminInfo</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
<TD><A HREF="android.appwidget.AppWidgetHost.html">
android.appwidget.AppWidgetHost</A></TD>
</TR>
diff --git a/docs/html/sdk/api_diff/11/changes/methods_index_additions.html b/docs/html/sdk/api_diff/11/changes/methods_index_additions.html
index ba21317..b3a67ab 100644
--- a/docs/html/sdk/api_diff/11/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/methods_index_additions.html
@@ -430,8 +430,6 @@
()</A></nobr><br>
<nobr><A HREF="android.app.Activity.html#android.app.Activity.getFragmentManager_added()" class="hiddenlink" target="rightframe"><b>getFragmentManager</b>
()</A></nobr><br>
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getGlobalProxyAdmin_added()" class="hiddenlink" target="rightframe"><b>getGlobalProxyAdmin</b>
-()</A></nobr><br>
<nobr><A HREF="android.preference.Preference.html#android.preference.Preference.getIcon_added()" class="hiddenlink" target="rightframe"><b>getIcon</b>
()</A></nobr><br>
<nobr><A HREF="android.text.method.QwertyKeyListener.html#android.text.method.QwertyKeyListener.getInstanceForFullKeyboard_added()" class="hiddenlink" target="rightframe"><b>getInstanceForFullKeyboard</b>
@@ -1273,8 +1271,6 @@
<nobr><A HREF="android.widget.Scroller.html#android.widget.Scroller.setFriction_added(float)" class="hiddenlink" target="rightframe">type <b>
(<code>float</code>)</b> in android.widget.Scroller
</A></nobr><br>
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setGlobalProxy_added(android.content.ComponentName, java.net.Proxy, java.util.List<java.lang.String>)" class="hiddenlink" target="rightframe"><b>setGlobalProxy</b>
-(<code>ComponentName, Proxy, List<String></code>)</A></nobr><br>
<nobr><A HREF="android.widget.Spinner.html#android.widget.Spinner.setGravity_added(int)" class="hiddenlink" target="rightframe"><b>setGravity</b>
(<code>int</code>)</A></nobr><br>
<i>setIcon</i><br>
diff --git a/docs/html/sdk/api_diff/11/changes/methods_index_all.html b/docs/html/sdk/api_diff/11/changes/methods_index_all.html
index 79ac20a..2f1d865 100644
--- a/docs/html/sdk/api_diff/11/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/methods_index_all.html
@@ -544,8 +544,6 @@
()</A></nobr><br>
<nobr><A HREF="android.os.Debug.html#android.os.Debug.getGlobalExternalFreedSize_changed()" class="hiddenlink" target="rightframe">getGlobalExternalFreedSize
()</A></nobr><br>
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.getGlobalProxyAdmin_added()" class="hiddenlink" target="rightframe"><b>getGlobalProxyAdmin</b>
-()</A></nobr><br>
<nobr><A HREF="android.net.Proxy.html#android.net.Proxy.getHost_changed(android.content.Context)" class="hiddenlink" target="rightframe">getHost
(<code>Context</code>)</A></nobr><br>
<nobr><A HREF="android.preference.Preference.html#android.preference.Preference.getIcon_added()" class="hiddenlink" target="rightframe"><b>getIcon</b>
@@ -1590,8 +1588,6 @@
</A></nobr><br>
<nobr><A HREF="android.os.Debug.html#android.os.Debug.setGlobalAllocationLimit_changed(int)" class="hiddenlink" target="rightframe">setGlobalAllocationLimit
(<code>int</code>)</A></nobr><br>
-<nobr><A HREF="android.app.admin.DevicePolicyManager.html#android.app.admin.DevicePolicyManager.setGlobalProxy_added(android.content.ComponentName, java.net.Proxy, java.util.List<java.lang.String>)" class="hiddenlink" target="rightframe"><b>setGlobalProxy</b>
-(<code>ComponentName, Proxy, List<String></code>)</A></nobr><br>
<nobr><A HREF="android.widget.Spinner.html#android.widget.Spinner.setGravity_added(int)" class="hiddenlink" target="rightframe"><b>setGravity</b>
(<code>int</code>)</A></nobr><br>
<i>setIcon</i><br>
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html b/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html
index f52f77d..b2a2812 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html b/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html
index ab6c604..54220b1 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.app.html b/docs/html/sdk/api_diff/11/changes/pkg_android.app.html
index d251b5c..da5df6f 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.app.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html
index 4ca6abc..d3df6f3 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html
index 95550d7..286de69 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.content.html b/docs/html/sdk/api_diff/11/changes/pkg_android.content.html
index b409999..814b57c 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.content.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html
index 5e599e6..e791cbc 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html
index 6801657..1966151 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.database.html b/docs/html/sdk/api_diff/11/changes/pkg_android.database.html
index fe1f8d4..94564d3 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.database.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
index bc66f4b..7200032 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
index afe6b4a..18d15cc 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html
index 74c158e..4f1c440 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html
index f542030..ea84a38 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.html b/docs/html/sdk/api_diff/11/changes/pkg_android.html
index 5e25eb4..29df82c 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html b/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
index 699635b..d2c4e27 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.media.html b/docs/html/sdk/api_diff/11/changes/pkg_android.media.html
index b7352581..2cd99a5 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.media.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.net.html b/docs/html/sdk/api_diff/11/changes/pkg_android.net.html
index 8c89b35..e1e2bf5 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.net.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html
index 4cbf960..f871db5 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.os.html b/docs/html/sdk/api_diff/11/changes/pkg_android.os.html
index a76e62c..eedacd3 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.os.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html b/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html
index c7e1fe9..35ef0bc 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html
index c273c1c..842355e 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html
index dfcd56f..e981387 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html
index d9cec6b..f0bde9f 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html
index c6263c4..8a2d08b 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.test.html b/docs/html/sdk/api_diff/11/changes/pkg_android.test.html
index 9d746cb..39db204 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.test.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.test.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html
index 105c032..45914ea 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html b/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html
index 48429be..cc395ca 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.text.html b/docs/html/sdk/api_diff/11/changes/pkg_android.text.html
index 7be7925..0d47282 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.text.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html b/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html
index 9bf1ec4..eefed4b 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.util.html b/docs/html/sdk/api_diff/11/changes/pkg_android.util.html
index 99e977b7..b6444ba 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.util.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html b/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html
index b12ffa3..3fd23d1 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.view.html b/docs/html/sdk/api_diff/11/changes/pkg_android.view.html
index 6f31108..2ec022d 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.view.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
index 44d3371..d7f85e0 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html
index efbfcaa..0fd65d3 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html
index 6ba274e..64f2bc2 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html b/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
index 18325d7..6479d33 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html b/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html
index 075dadc..9415d76 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_java.util.html b/docs/html/sdk/api_diff/11/changes/pkg_java.util.html
index 4f6d8a0..461d0ac 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_java.util.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_java.util.html
@@ -54,7 +54,7 @@
</tr>
<tr>
<td class="diffspec">Generated</td>
- <td class="diffvalue">2011.02.08 11:41</td>
+ <td class="diffvalue">2011.02.19 17:19</td>
</tr>
</table>
</div><!-- End and-diff-id -->
diff --git a/docs/html/sdk/eclipse-adt.jd b/docs/html/sdk/eclipse-adt.jd
index c283167..3a7b39f 100644
--- a/docs/html/sdk/eclipse-adt.jd
+++ b/docs/html/sdk/eclipse-adt.jd
@@ -1,8 +1,8 @@
page.title=ADT Plugin for Eclipse
-adt.zip.version=9.0.0
-adt.zip.download=ADT_9.0.0.zip
-adt.zip.bytes=4433536
-adt.zip.checksum=bc2757f2a5a11d131390ce547bae154b
+adt.zip.version=10.0.0
+adt.zip.download=ADT-10.0.0.zip
+adt.zip.bytes=4243777
+adt.zip.checksum=bf88bff62bc45c3b6d062e2beed67765
@jd:body
@@ -116,22 +116,27 @@
<ul>
<li>The tools now automatically generate Java Programming Language source files (in the <code>gen/</code> directory) and
bytecode (in the <code>res/raw/</code> directory) from your <code>.rs</code> files.</li>
- <li>A Binary XML editor has been added.</li>
+ <li>A Binary XML editor has been added (<a href="http://tools.android.com/recent/binaryxmleditor">details</a>).</li>
<li>Traceview is now integrated into the Eclipse UI (<a href="http://tools.android.com/recent/traceviewineclipse">details</a>).</li>
<li>The "Go To Declaration" feature for XML and <code>.java</code> files quickly show all the matches in the project
- and allows you jump to specific items such as string translations or <code>onClick</code> handlers.</li>
- <li>The Resource Chooser can create items such as dimensions, integers, ids, and booleans.</li>
+ and allows you jump to specific items such as string translations or <code>onClick</code> handlers
+ (<a href="http://tools.android.com/recent/gotodeclarationimprovements">details</a>).</li>
+ <li>The Resource Chooser can create items such as dimensions, integers, ids, and booleans
+ (<a href="http://tools.android.com/recent/resourcechoosercannowcreatearbitraryvalues">details</a>).</li>
<li>Improvements to the Visual Layout Editor:
<ul>
<li>A new Palette with categories and rendering previews
(<a href="http://tools.android.com/recent/newpalette">details</a>).</li>
- <li>A Layout action bar.</li>
+ <li>A Layout Actions bar that provides quick access to common layout operations
+ (<a href="http://tools.android.com/recent/layoutactionsbar">details</a>).</li>
<li>When the Android 3.0 rendering library is selected, layouts render more like they do on devices.
This includes rendering of status and title bars to more accurately reflect the actual
- screen space available to applications.</li>
+ screen space available to applications
+ (<a href="http://tools.android.com/recent/systembarandactionbar">details</a>).</li>
<li>Zoom improvements such as fit to view, persistent scale, and keyboard access.
(<a href="http://tools.android.com/recent/zoomimprovements">details</a>).</li>
- <li>Further improvements to <code><merge></code> layouts, as well as layouts with gesture overlays.</li>
+ <li>Further improvements to <code><merge></code> layouts, as well as layouts with gesture overlays
+ (<a href="http://tools.android.com/recent/improvedsupportformergetags">details</a>).</li>
<li>Improved rendering error diagnostics.</li>
</ul>
</li>
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 499b31f..df8869e 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,21 +1,21 @@
page.title=Android SDK
sdk.redirect=0
-sdk.win_installer=installer_r09-windows.exe
-sdk.win_installer_bytes=32828818
-sdk.win_installer_checksum=a0185701ac0d635a4fbf8169ac949a3c5b3d31e0
+sdk.win_installer=installer_r10-windows.exe
+sdk.win_installer_bytes=32845713
+sdk.win_installer_checksum=4e4356c472a6271ac9c062df0219dcb3
-sdk.win_download=android-sdk_r09-windows.zip
-sdk.win_bytes=32779808
-sdk.win_checksum=1a1bb8fad80bcc2dfbd00443b9a13e6b
+sdk.win_download=android-sdk_r10-windows.zip
+sdk.win_bytes=30112516
+sdk.win_checksum=643a75d99f5d4ca39dcf743fe894d599
-sdk.mac_download=android-sdk_r09-mac_x86.zip
-sdk.mac_bytes=28829553
-sdk.mac_checksum=ef3102fdbbbbd9bf4d9b572624aa9dc1
+sdk.mac_download=android-sdk_r10-mac_x86.zip
+sdk.mac_bytes=28224540
+sdk.mac_checksum=4d0a99a458e4f4bde65a01f8545f27e9
-sdk.linux_download=android-sdk_r09-linux_x86.tgz
-sdk.linux_bytes=26917824
-sdk.linux_checksum=9fefac5ff85d329836439f6e77a78cae
+sdk.linux_download=android-sdk_r10-linux_x86.tgz
+sdk.linux_bytes=26556013
+sdk.linux_checksum=10cafdd44771bfe2ba9d4440886389e7
@jd:body
diff --git a/docs/html/sdk/ndk/index.jd b/docs/html/sdk/ndk/index.jd
index 10887c6..bc9ba4b 100644
--- a/docs/html/sdk/ndk/index.jd
+++ b/docs/html/sdk/ndk/index.jd
@@ -61,55 +61,6 @@
<div class="toggleable open">
<a href="#"
- onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-opened.png"
- class="toggle-img"
- height="9px"
- width="9px" /> Android NDK, Revision 6</a> <em>(February 2011)</em>
-
- <div class="toggleme">
- <p>This release of the NDK introduces the following header files:</p>
- <ul>
- <li><p><code><android/asset_manager.h></code>: Allows access to assets
- using 64-bit file offsets and sizes. This is useful for very large assets that exceed
- 2GB, as required by some games. The following APIs are provided:<p>
- <ul>
- <li><code>AAsset_getLength64</code></li>
- <li><code>AAsset_getRemainingLength64</code></li>
- <li><code>AAsset_openFileDescriptor64</code></li>
- <li><code>AAsset_seek64</code></li>
- </ul>
- </li>
-
- <li><code><android/input.h></code>: Provides the following AMETA_XXX constants
- that are related to the new input framework in Honeycomb:
-<pre>
-AMETA_FUNCTION_ON = 0x08,
-AMETA_CTRL_ON = 0x1000,
-AMETA_CTRL_LEFT_ON = 0x2000,
-AMETA_CTRL_RIGHT_ON = 0x4000,
-AMETA_META_ON = 0x10000,
-AMETA_META_LEFT_ON = 0x20000,
-AMETA_META_RIGHT_ON = 0x40000,
-AMETA_CAPS_LOCK_ON = 0x100000,
-AMETA_NUM_LOCK_ON = 0x200000,
-AMETA_SCROLL_LOCK_ON = 0x400000,
-</pre>
- </li>
-
- <li><code><android/keycodes></code>: Provides <code>AKEYCODE_XXX</code>
- constants that are related to the new input framework in Honeycomb.
- </li>
-
- <li><code><android/native_activity.h></code>: Adds a new field to the
- system-allocated <code>ANativeActivity</code> structure named <code>obbPath</code> that
- contains the path of your application's OBB files, if any.
- </li>
- </ul>
- </div>
- </div>
-
-<div class="toggleable closed">
- <a href="#"
onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
class="toggle-img"
height="9px"
diff --git a/docs/html/sdk/preview/start.jd b/docs/html/sdk/preview/start.jd
deleted file mode 100644
index 3bf70b3..0000000
--- a/docs/html/sdk/preview/start.jd
+++ /dev/null
@@ -1,294 +0,0 @@
-page.title=Getting Started with the Android 3.0 Preview
-@jd:body
-
-<p>Welcome to Android 3.0!</p>
-
-<p>Android 3.0 is the next major release of the Android platform and is optimized for larger screen
-devices, particularly tablets. We're offering a preview SDK so you can get a head-start developing
-applications for it or simply test and optimize your existing application for upcoming devices.</p>
-
-<p><strong>Be aware that:</strong></p>
-<ul>
- <li>The APIs in the preview SDK are <strong>not final</strong>. Some APIs may change in behavior
-or availability when the final SDK is made available.</li>
- <li>You <strong>cannot</strong> publish an application that's built against the preview
-SDK—you can only run an application built against the preview SDK on the Android
-emulator.</li>
- <li>The documentation on <a href="http://developer.android.com">developer.android.com</a>
-does <strong>not</strong> include the Android 3.0 documentation—to read the API reference and
-developer guides for Android 3.0, you must install the Android 3.0 preview documentation from
-the AVD and SDK Manager.</li>
-</ul>
-
-
-
-<h3>How do I start?</h3>
-
-<ol>
- <li><a href="#Setup">Set up the preview SDK</a></li>
- <li>Then choose your app adventure:
- <ol type="a">
- <li><a href="#Optimize">Optimize Your App for Tablets and Similar Devices</a>
- <p>When you have an existing application and you want to maintain compatibility with
-older versions of Android.</p>
- </li>
- <li><a href="#Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</a>
- <p>When you want to upgrade your application to use APIs introduced in Android 3.0 or
- create a new application targeted to tablets and similar devices.</p></li>
- </ol>
- </li>
-</ol>
-
-<h3>Code samples</h3>
-<p>Many of the new features and APIs that are described in the <a href="{@docRoot}sdk/android-3.0.html#api">
-Android 3.0 Platform Preview</a> also have accompanying samples that help you understand how to use them.
-To get the samples, download them from the SDK repository using the Android SDK Manager. After download
-the samples are located in <code><sdk_root>/samples/android-Honeycomb</code>. The list of links
-below helps you find samples for the features you are interested in:</p>
-<ul>
- <li><a href="{@docRoot}resources/samples/Honeycomb-Gallery/index.html">Honeycomb Gallery</a> -
- A demo application highlighting how to use some of the new APIs in Honeycomb, including fragments, the action bar,
- drag and drop, transition animations, and a stack widget.</li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">Fragments</a>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html">Action Bar</a></li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html">Clipboard</a></li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">Drag and Drop</a></li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">
- Multiple-choice selection for ListView and GridView</a></li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">Content Loaders</a></li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">Property Animation</a></li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.html">Search View Widget</a></li>
- <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/PopupMenu1.html">Popup Menu Widget</a></li>
-</ul>
-
-
-<h2 id="Setup">Set Up the Preview SDK</h2>
-
-<p>To start using the Android 3.0 preview SDK, set up your existing Android SDK with the new
-platform:</p>
-<p>(If you don't have an existing SDK, <a href="{@docRoot}sdk/index.html">download it
-now</a>.)</p>
-<ol>
- <li><a href="{@docRoot}sdk/adding-components.html#launching">Launch the Android SDK and AVD
-Manager</a> and install the following:
- <ul>
- <li>SDK Platform Android 3.0 Preview</li>
- <li>Android SDK Tools, revision 9</li>
- <li>Documentation for Android 'Honeycomb' Preview</li>
- <li>Samples for SDK API Honeycomb Preview</li>
- </ul>
- </li>
- <li><a href="{@docRoot}guide/developing/other-ide.html#AVD">Create an AVD</a> for tablets: set
-the target to "Android 3.0 (Preview)" and the skin to "WXGA".</li>
-</ol>
-
-
-<h3>About emulator performance</h3>
-
-<p>Because the Android emulator must simulate the ARM instruction set architecture on your
-computer and the WXGA screen is significantly larger than what the emulator
-normally handles, emulator performance is much slower than usual.</p>
-
-<p>In particular, initializing the emulator can be slow and can take several
-minutes, depending on your hardware. When the emulator is booting there is
-limited user feedback, so please be patient and continue waiting until you see
-the home screen appear. </p>
-
-<p>Note that you do not need to do a full boot of your emulator each time you
-rebuild your application — typically you only need to boot at the start of
-a session. See the Tips section below for information about using Snapshots to
-cut startup time after first initialization. </p>
-
-<p>We're working hard to resolve the performance issues and it will improve in future releases.
-Unfortunately, the emulator will perform slowly during your trial with the preview SDK. For the time
-being, the emulator is still best way to evaluate your application's appearance and functionality on
-Android 3.0.</p>
-
-<p class="note"><strong>Tip:</strong> To improve the startup time for the emulator, enable
-snapshots for the AVD when you create it with the SDK and AVD Manager (there's a checkbox in
-the GUI). Then, start the AVD from the manager and check <b>Launch from snapshot</b> and <b>Save to
-snapshot</b>. This way, when you close the emulator, a snapshot of the AVD state is saved and
-used to quickly relaunch the AVD next time. However, when you choose to save a snapshot, the
-emulator will be slow to close, so you might want to enable <b>Save to
-snapshot</b> only for the first time you launch the AVD.</p>
-
-
-<h3>Known issues</h3>
-
-<p>The following known issues occur for Android 3.0 AVDs that are loaded in the emulator:</p>
- <ul>
- <li>You cannot take screenshots of an emulator screen. The Device Screen
- Capture window displays <strong>Screen not available</strong>.</li>
- <li>The emulator cannot receive incoming SMS messages.</li>
- <li>GPS emulation is currently not supported.</li>
- <li>When rotating the emulator screen by pressing Ctrl-F11, the screen turns green momentarily,
-then displays the normal interface.</li>
- <li>In some circumstances, the emulator displays a rotated portrait screen while in landscape
-mode. To view the screen correctly, rotate the emulator to portrait mode by pressing Ctrl-F11 or
-turn off the auto-rotate setting in <strong>Settings > Screen > Auto-rotate screen</strong>.</li>
- <li>The Dev Tools application sometimes crashes when trying to use the Package Browser
-feature.</li>
- <li>On Ubuntu 10.04 64-bit machines, you cannot create an AVD that has an SD card.</li>
- </ul>
-
-
-
-<h2 id="Optimize">Optimize Your Application for Tablets and Similar Devices</h2>
-
-<p>If you've already developed an application for Android, there are a few things you can do
-to optimize it for a tablet-style experience, without changing the minimum platform version required
-(you don't need to change the manifest {@code minSdkVersion}).</p>
-
-<p class="note"><strong>Note:</strong> All Android applications are forward-compatible, so
-there's nothing you <em>have to</em> do—if your application is a good citizen of the Android
-APIs, your app should work fine on devices running Android 3.0. However, in order to provide users
-a better experience when running your app on an Android 3.0 tablet or similar-size device, we
-recommend that you update your application to adapt to the new system theme and optimize your
-application for larger screens.</p>
-
-<p>Here's what you can do to optimize your application for tablets running Android
-3.0:</p>
-
-<ol>
- <li><b>Test your current application on Android 3.0</b>
- <ol>
- <li>Build your application as-is and install it on your WXGA AVD (created above).</li>
- <li>Perform your usual tests to be sure everything works and looks as expected.</li>
- </ol>
- </li>
-
- <li><b>Apply the new "holographic" theme to your application</b>
- <ol>
- <li>Open your manifest file and update the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element to
-set {@code android:targetSdkVersion} to {@code "Honeycomb"}. For example:
-<pre>
-<manifest ... >
- <uses-sdk android:minSdkVersion="4"
- android:targetSdkVersion="Honeycomb" />
- <application ... >
- ...
- <application>
-</manifest>
-</pre>
- <p class="note"><strong>Note:</strong> The API Level value "Honeycomb" is a provisional API
-Level that is valid only while testing against the preview SDK. You
-<strong>should not</strong> publish your application using this API Level. When the final version of
-the Android 3.0 SDK is made available, you must change this value to the real API Level that will be
-specified for Android 3.0. For more information, read about <a
-href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a>.</p>
- <p>By targeting the Android 3.0 platform, the system automatically applies the Holographic theme
-to each of your activities, when running on an Android 3.0 device.</p>
- </li>
- <li>Continue to build against your application's {@code minSdkVersion}, but install it
-on the Android 3.0 AVD. Perform more testing on your application to be sure that your user interface
-works well with the Holographic theme.
- <p class="note"><strong>Note:</strong> If you've applied themes to your activities already,
-they will override the Holographic theme that the system applies when you set the {@code
-android:targetSdkVersion} to {@code "Honeycomb"}.
-Once the Android 3.0 APIs are finalized and an official API Level is assigned, you can use
-the <a href="{@docRoot}guide/topics/resources/providing-resources.html#VersionQualifier">system
-version qualifier</a> to provide an alternative theme that's based on the Holographic theme when
-your application is running on Android 3.0.</p>
- </ol>
- </li>
-
- <li><b>Supply alternative layout resources for xlarge screens</b>
- <p>As discussed in the guide to <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>, Android
-2.3 and above support the <code>xlarge</code> resource qualifier, which you should use to supply
-alternative layouts for extra large screens.</p>
- <p>By providing alternative layouts for some of your activities when running on extra large
-screens, you can improve the user experience of your application on a tablet without using any
-new APIs.</p>
- <p>For example, here are some things to consider when creating a new layout for tables:</p>
- <ul>
- <li>Landscape layout: The "normal" orientation for tablets is usually landscape (wide), so
-you should be sure that your activities offer an appropriate layout for such a wide viewing
-area.</li>
- <li>Button position: Consider whether the position of the most common buttons in your UI are
-easily accessible while holding a tablet with two hands.</li>
- </ul>
- </li>
-</ol>
-
- <p>In general, always be sure that your application follows the <a
-href="{@docRoot}guide/practices/screens_support.html#screen-independence">Best Practices
-for Screen Independence</a>.</p>
-
-
-<h2 id="Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</h2>
-
-<p>If you want to develop something truly for tablet-type devices running Android 3.0, then you need
-to use new APIs available in Android 3.0. This section introduces some of the new features that you
-should use.</p>
-
-<p>The first thing to do when you create a project with the Android 3.0 preview is set the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element to
-use {@code "Honeycomb"} for the {@code android:minSdkVersion}. For example:</p>
-
-<pre>
-<manifest ... >
- <uses-sdk android:minSdkVersion="Honeycomb" />
- <application ... >
- ...
- <application>
-</manifest>
-</pre>
-
-<p class="note"><strong>Note:</strong> The API Level value "Honeycomb" is a provisional API
-Level that is valid only while building and testing against the preview SDK. You
-<strong>cannot</strong> publish your application using this API Level. When the final version of the
-Android 3.0 SDK is made available, you must change this value to the real API Level that is
-specified for Android 3.0. For more information, read about <a
-href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a>.</p>
-
-<p>Be sure that the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a> element appears <strong>before</strong> the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
-element.</p>
-
-<p>By targeting the Android 3.0 platform (and declaring it before <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>),
-the system automatically applies the new Holographic theme to each of your
-activities.</p>
-
-
-
-<h3>Publishing your app for tablet-type devices only</h3>
-
-<p>Additionally, you should decide whether your application is for <em>only</em> tablet devices
-(specifically, <em>xlarge</em> devices) or for devices of all sizes that may run Android 3.0.</p>
-
-<p>If your application is <em>only</em> for tablets (<em>xlarge</em> screens; not for mobile
-devices/phones), then you should include the <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element in your manifest with all sizes except for xlarge declared
-false. For example:</p>
-
-<pre>
-<manifest ... >
- <uses-sdk android:minSdkVersion="Honeycomb" />
- <supports-screens android:smallScreens="false"
- android:normalScreens="false"
- android:largeScreens="false"
- android:xlargeScreens="true" />
- <application ... >
- ...
- <application>
-</manifest>
-</pre>
-
-<p>With this declaration, you indicate that your application does not support any screen size except
-extra large. External services such as Android Market may use this to filter your application
-from devices that do not have an extra large screen.</p>
-
-<p>Otherwise, if you want your application to be available to both small devices (phones) and large
-devices (tablets), do <em>not</em> include the <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element.</p>
-
-<div class="special">
-<p>To learn more about some of the new APIs,
-see the <a href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform Preview</a> document.</p>
-</div>
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 2ba8076..a1c26db 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -40,25 +40,15 @@
if:sdk.preview ?>
<li><h2>Android 3.0 Preview SDK</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/preview/start.html">Getting Started</a> <span class="new">new!</span></li>
- <li class="toggle-list">
- <div><a href="<?cs var:toroot ?>sdk/android-3.0.html">
- <span class="en">Android 3.0 Platform</span></a> <span class="new">new!</span></div>
- <ul>
- <li><a href="<?cs var:toroot ?>sdk/api_diff/honeycomb/changes.html">API Differences Report
-»</a></li>
- </ul>
- </li>
+ <li><a href="<?cs var:toroot ?>sdk/preview/start.html">Getting Started</a> <span
+class="new">new!</span></li>
</ul>
</li><?cs
/if ?>
<?cs
if:sdk.preview ?>
- <li><h2>Android 3.0 Preview</h2>
+ <li><h2>Android x.x Preview</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a> <span
-class="new">new!</span></li>
- <li><a href="<?cs var:toroot ?>sdk/preview/index.html">SDK</a> <span class="new">new!</span></li>
</ul>
</li><?cs
/if ?>
@@ -87,8 +77,16 @@
</ul>
<ul>
<li class="toggle-list">
+ <div><a href="<?cs var:toroot ?>sdk/android-3.0.html">
+ <span class="en">Android 3.0 Platform</span></a> <span class="new">new!</span></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/api_diff/11/changes.html">API Differences Report »</a></li>
+ </ul>
+ </li>
+ <li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-2.3.3.html">
- <span class="en">Android 2.3.3 Platform</span></a> <span class="new">new!</span></div>
+ <span class="en">Android 2.3.3 Platform</span></a> <span class="new">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>sdk/api_diff/10/changes.html">API Differences Report »</a></li>
</ul>
@@ -115,7 +113,7 @@
</li>
</ul>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r9</a> <span class="new">new!</span></li>
+ <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r10</a> <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a></li>
</ul>
</li>
@@ -131,7 +129,7 @@
<span style="display:none" class="zh-TW"></span>
</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 9.0.0
+ <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 10.0.0
<span style="display:none" class="de"></span>
<span style="display:none" class="es"></span>
<span style="display:none" class="fr"></span>
@@ -154,7 +152,7 @@
</h2>
<ul>
<li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r5b</a>
- <span class="new">new!</span></li>
+ </li>
<li><a href="<?cs var:toroot ?>sdk/ndk/overview.html">What is the NDK?</a></li>
</ul>
</li>
diff --git a/libs/rs/java/Balls/_index.html b/libs/rs/java/Balls/_index.html
new file mode 100644
index 0000000..8760485
--- /dev/null
+++ b/libs/rs/java/Balls/_index.html
@@ -0,0 +1 @@
+<p>A brute force physics simulation that renders many balls onto the screen and moves them according to user touch and gravity.</p>
\ No newline at end of file
diff --git a/libs/rs/java/Fountain/_index.html b/libs/rs/java/Fountain/_index.html
new file mode 100644
index 0000000..223242f
--- /dev/null
+++ b/libs/rs/java/Fountain/_index.html
@@ -0,0 +1,5 @@
+<p>An example that renders many dots on the screen that follow a user's touch. The dots fall
+to the bottom of the screen when the user releases the finger.</p>
+
+
+
diff --git a/libs/rs/java/HelloCompute/_index.html b/libs/rs/java/HelloCompute/_index.html
new file mode 100644
index 0000000..abfd978
--- /dev/null
+++ b/libs/rs/java/HelloCompute/_index.html
@@ -0,0 +1,2 @@
+<p>A Renderscript compute sample that filters a bitmap. No Renderscript graphics APIs are used
+in this sample.</p>
\ No newline at end of file
diff --git a/libs/rs/java/HelloWorld/_index.html b/libs/rs/java/HelloWorld/_index.html
new file mode 100644
index 0000000..4cab738
--- /dev/null
+++ b/libs/rs/java/HelloWorld/_index.html
@@ -0,0 +1 @@
+<p>A Renderscript graphics application that draws the text "Hello, World!" where the user touches.</p>
\ No newline at end of file
diff --git a/libs/rs/java/ImageProcessing/Android.mk b/libs/rs/java/ImageProcessing/Android.mk
deleted file mode 100644
index 7fa30d0..0000000
--- a/libs/rs/java/ImageProcessing/Android.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright (C) 2009 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-ifneq ($(TARGET_SIMULATOR),true)
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) \
- $(call all-renderscript-files-under, src)
-#LOCAL_STATIC_JAVA_LIBRARIES := android.renderscript
-
-LOCAL_PACKAGE_NAME := ImageProcessing
-
-include $(BUILD_PACKAGE)
-
-endif
diff --git a/libs/rs/java/ImageProcessing/AndroidManifest.xml b/libs/rs/java/ImageProcessing/AndroidManifest.xml
deleted file mode 100644
index 0fcbf1e..0000000
--- a/libs/rs/java/ImageProcessing/AndroidManifest.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.rs.image">
-
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-sdk android:minSdkVersion="11" />
- <application android:label="Image Processing">
- <activity android:name="ImageProcessingActivity"
- android:screenOrientation="portrait">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
-</manifest>
diff --git a/libs/rs/java/ImageProcessing/res/drawable-hdpi/data.jpg b/libs/rs/java/ImageProcessing/res/drawable-hdpi/data.jpg
deleted file mode 100644
index 81a87b1..0000000
--- a/libs/rs/java/ImageProcessing/res/drawable-hdpi/data.jpg
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/ImageProcessing/res/drawable/data.jpg b/libs/rs/java/ImageProcessing/res/drawable/data.jpg
deleted file mode 100644
index 81a87b1..0000000
--- a/libs/rs/java/ImageProcessing/res/drawable/data.jpg
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/ImageProcessing/res/layout/main.xml b/libs/rs/java/ImageProcessing/res/layout/main.xml
deleted file mode 100644
index c6ec729..0000000
--- a/libs/rs/java/ImageProcessing/res/layout/main.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
- <SurfaceView
- android:id="@+id/surface"
- android:layout_width="1dip"
- android:layout_height="1dip" />
-
- <ImageView
- android:id="@+id/display"
- android:layout_width="320dip"
- android:layout_height="266dip" />
-
- <Button
- android:layout_marginBottom="170dip"
- android:layout_width="wrap_content"
- android:layout_height="40dip"
- android:text="@string/benchmark"
- android:onClick="benchmark"
- android:layout_gravity="bottom"/>
-
- <TextView
- android:id="@+id/benchmarkText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="100dip"
- android:layout_marginBottom="175dip"
- android:layout_gravity="bottom"
- android:text="@string/saturation"/>
-
- <SeekBar
- android:id="@+id/inSaturation"
- android:layout_marginBottom="140dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
-
- <TextView
- android:id="@+id/inSaturationText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="50dip"
- android:layout_marginBottom="142dip"
- android:textColor="#000"
- android:layout_gravity="bottom"
- android:text="@string/saturation"/>
-
- <SeekBar
- android:id="@+id/inGamma"
- android:layout_marginBottom="110dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
-
- <TextView
- android:id="@+id/inGammaText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="50dip"
- android:layout_marginBottom="112dip"
- android:textColor="#000"
- android:layout_gravity="bottom"
- android:text="@string/gamma"/>
-
- <SeekBar
- android:id="@+id/outWhite"
- android:layout_marginBottom="80dip"
- android:layout_marginLeft="170dip"
- android:layout_marginRight="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
-
- <TextView
- android:id="@+id/outWhiteText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="220dip"
- android:layout_marginBottom="82dip"
- android:textColor="#000"
- android:layout_gravity="bottom"
- android:text="@string/out_white"/>
-
- <SeekBar
- android:id="@+id/inWhite"
- android:layout_marginBottom="80dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="170dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
-
- <TextView
- android:id="@+id/inWhiteText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="50dip"
- android:layout_marginBottom="82dip"
- android:textColor="#000"
- android:layout_gravity="bottom"
- android:text="@string/in_white"/>
-
- <SeekBar
- android:id="@+id/outBlack"
- android:layout_marginBottom="50dip"
- android:layout_marginLeft="170dip"
- android:layout_marginRight="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
-
- <TextView
- android:id="@+id/outBlackText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="220dip"
- android:layout_marginBottom="52dip"
- android:textColor="#000"
- android:layout_gravity="bottom"
- android:text="@string/out_black"/>
-
- <SeekBar
- android:id="@+id/inBlack"
- android:layout_marginBottom="50dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="170dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
-
- <TextView
- android:id="@+id/inBlackText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="50dip"
- android:layout_marginBottom="52dip"
- android:textColor="#000"
- android:layout_gravity="bottom"
- android:text="@string/in_black"/>
-
- <SeekBar
- android:id="@+id/radius"
- android:layout_marginBottom="10dip"
- android:layout_marginLeft="10dip"
- android:layout_marginRight="10dip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
-
- <TextView
- android:id="@+id/blurText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:layout_marginLeft="50dip"
- android:layout_marginBottom="12dip"
- android:textColor="#000"
- android:layout_gravity="bottom"
- android:text="@string/blur_description"/>
-
-</merge>
\ No newline at end of file
diff --git a/libs/rs/java/ImageProcessing/res/values/strings.xml b/libs/rs/java/ImageProcessing/res/values/strings.xml
deleted file mode 100644
index cc5cc4d..0000000
--- a/libs/rs/java/ImageProcessing/res/values/strings.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-* Copyright (C) 2008 The Android Open Source Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- General -->
- <skip />
- <!--slider label -->
- <string name="blur_description">Blur Radius</string>
- <string name="in_white">In White</string>
- <string name="out_white">Out White</string>
- <string name="in_black">In Black</string>
- <string name="out_black">Out Black</string>
- <string name="gamma">Gamma</string>
- <string name="saturation">Saturation</string>
- <string name="benchmark">Benchmark</string>
-
-</resources>
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
deleted file mode 100644
index 5de09f7..0000000
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.image;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.graphics.BitmapFactory;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.renderscript.ScriptC;
-import android.renderscript.RenderScript;
-import android.renderscript.Type;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.Script;
-import android.view.SurfaceView;
-import android.view.SurfaceHolder;
-import android.widget.ImageView;
-import android.widget.SeekBar;
-import android.widget.TextView;
-import android.view.View;
-import java.lang.Math;
-
-public class ImageProcessingActivity extends Activity
- implements SurfaceHolder.Callback,
- SeekBar.OnSeekBarChangeListener {
- private Bitmap mBitmapIn;
- private Bitmap mBitmapOut;
- private Bitmap mBitmapScratch;
- private ScriptC_threshold mScript;
- private ScriptC_vertical_blur mScriptVBlur;
- private ScriptC_horizontal_blur mScriptHBlur;
- private int mRadius = 0;
- private SeekBar mRadiusSeekBar;
-
- private float mInBlack = 0.0f;
- private SeekBar mInBlackSeekBar;
- private float mOutBlack = 0.0f;
- private SeekBar mOutBlackSeekBar;
- private float mInWhite = 255.0f;
- private SeekBar mInWhiteSeekBar;
- private float mOutWhite = 255.0f;
- private SeekBar mOutWhiteSeekBar;
- private float mGamma = 1.0f;
- private SeekBar mGammaSeekBar;
-
- private float mSaturation = 1.0f;
- private SeekBar mSaturationSeekBar;
-
- private TextView mBenchmarkResult;
-
- @SuppressWarnings({"FieldCanBeLocal"})
- private RenderScript mRS;
- @SuppressWarnings({"FieldCanBeLocal"})
- private Type mPixelType;
- @SuppressWarnings({"FieldCanBeLocal"})
- private Allocation mInPixelsAllocation;
- @SuppressWarnings({"FieldCanBeLocal"})
- private Allocation mOutPixelsAllocation;
- @SuppressWarnings({"FieldCanBeLocal"})
- private Allocation mScratchPixelsAllocation1;
- private Allocation mScratchPixelsAllocation2;
-
- private SurfaceView mSurfaceView;
- private ImageView mDisplayView;
-
- class FilterCallback extends RenderScript.RSMessageHandler {
- private Runnable mAction = new Runnable() {
- public void run() {
- mDisplayView.invalidate();
- }
- };
-
- @Override
- public void run() {
- mSurfaceView.removeCallbacks(mAction);
- mSurfaceView.post(mAction);
- }
- }
-
- int in[];
- int interm[];
- int out[];
- int MAX_RADIUS = 25;
- // Store our coefficients here
- float gaussian[];
-
- private long javaFilter() {
- final int width = mBitmapIn.getWidth();
- final int height = mBitmapIn.getHeight();
- final int count = width * height;
-
- if (in == null) {
- in = new int[count];
- interm = new int[count];
- out = new int[count];
- gaussian = new float[MAX_RADIUS * 2 + 1];
- mBitmapIn.getPixels(in, 0, width, 0, 0, width, height);
- }
-
- long t = java.lang.System.currentTimeMillis();
-
- int w, h, r;
-
- float fRadius = (float)mRadius;
- int radius = (int)mRadius;
-
- // Compute gaussian weights for the blur
- // e is the euler's number
- float e = 2.718281828459045f;
- float pi = 3.1415926535897932f;
- // g(x) = ( 1 / sqrt( 2 * pi ) * sigma) * e ^ ( -x^2 / 2 * sigma^2 )
- // x is of the form [-radius .. 0 .. radius]
- // and sigma varies with radius.
- // Based on some experimental radius values and sigma's
- // we approximately fit sigma = f(radius) as
- // sigma = radius * 0.4 + 0.6
- // The larger the radius gets, the more our gaussian blur
- // will resemble a box blur since with large sigma
- // the gaussian curve begins to lose its shape
- float sigma = 0.4f * fRadius + 0.6f;
- // Now compute the coefficints
- // We will store some redundant values to save some math during
- // the blur calculations
- // precompute some values
- float coeff1 = 1.0f / (float)(Math.sqrt( 2.0f * pi ) * sigma);
- float coeff2 = - 1.0f / (2.0f * sigma * sigma);
- float normalizeFactor = 0.0f;
- float floatR = 0.0f;
- for (r = -radius; r <= radius; r ++) {
- floatR = (float)r;
- gaussian[r + radius] = coeff1 * (float)Math.pow(e, floatR * floatR * coeff2);
- normalizeFactor += gaussian[r + radius];
- }
-
- //Now we need to normalize the weights because all our coefficients need to add up to one
- normalizeFactor = 1.0f / normalizeFactor;
- for (r = -radius; r <= radius; r ++) {
- floatR = (float)r;
- gaussian[r + radius] *= normalizeFactor;
- }
-
- float blurredPixelR = 0.0f;
- float blurredPixelG = 0.0f;
- float blurredPixelB = 0.0f;
- float blurredPixelA = 0.0f;
-
- for (h = 0; h < height; h ++) {
- for (w = 0; w < width; w ++) {
-
- blurredPixelR = 0.0f;
- blurredPixelG = 0.0f;
- blurredPixelB = 0.0f;
- blurredPixelA = 0.0f;
-
- for (r = -radius; r <= radius; r ++) {
- // Stepping left and right away from the pixel
- int validW = w + r;
- // Clamp to zero and width max() isn't exposed for ints yet
- if (validW < 0) {
- validW = 0;
- }
- if (validW > width - 1) {
- validW = width - 1;
- }
-
- int input = in[h*width + validW];
-
- int R = ((input >> 24) & 0xff);
- int G = ((input >> 16) & 0xff);
- int B = ((input >> 8) & 0xff);
- int A = (input & 0xff);
-
- float weight = gaussian[r + radius];
-
- blurredPixelR += (float)(R)*weight;
- blurredPixelG += (float)(G)*weight;
- blurredPixelB += (float)(B)*weight;
- blurredPixelA += (float)(A)*weight;
- }
-
- int R = (int)blurredPixelR;
- int G = (int)blurredPixelG;
- int B = (int)blurredPixelB;
- int A = (int)blurredPixelA;
-
- interm[h*width + w] = (R << 24) | (G << 16) | (B << 8) | (A);
- }
- }
-
- for (h = 0; h < height; h ++) {
- for (w = 0; w < width; w ++) {
-
- blurredPixelR = 0.0f;
- blurredPixelG = 0.0f;
- blurredPixelB = 0.0f;
- blurredPixelA = 0.0f;
- for (r = -radius; r <= radius; r ++) {
- int validH = h + r;
- // Clamp to zero and width
- if (validH < 0) {
- validH = 0;
- }
- if (validH > height - 1) {
- validH = height - 1;
- }
-
- int input = interm[validH*width + w];
-
- int R = ((input >> 24) & 0xff);
- int G = ((input >> 16) & 0xff);
- int B = ((input >> 8) & 0xff);
- int A = (input & 0xff);
-
- float weight = gaussian[r + radius];
-
- blurredPixelR += (float)(R)*weight;
- blurredPixelG += (float)(G)*weight;
- blurredPixelB += (float)(B)*weight;
- blurredPixelA += (float)(A)*weight;
- }
-
- int R = (int)blurredPixelR;
- int G = (int)blurredPixelG;
- int B = (int)blurredPixelB;
- int A = (int)blurredPixelA;
-
- out[h*width + w] = (R << 24) | (G << 16) | (B << 8) | (A);
- }
- }
-
- t = java.lang.System.currentTimeMillis() - t;
- android.util.Log.v("Img", "Java frame time ms " + t);
- mBitmapOut.setPixels(out, 0, width, 0, 0, width, height);
- return t;
- }
-
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- if (fromUser) {
-
- if (seekBar == mRadiusSeekBar) {
- float fRadius = progress / 100.0f;
- fRadius *= (float)(MAX_RADIUS);
- mRadius = (int)fRadius;
-
- mScript.set_radius(mRadius);
- } else if (seekBar == mInBlackSeekBar) {
- mInBlack = (float)progress;
- mScriptVBlur.invoke_setLevels(mInBlack, mOutBlack, mInWhite, mOutWhite);
- } else if (seekBar == mOutBlackSeekBar) {
- mOutBlack = (float)progress;
- mScriptVBlur.invoke_setLevels(mInBlack, mOutBlack, mInWhite, mOutWhite);
- } else if (seekBar == mInWhiteSeekBar) {
- mInWhite = (float)progress + 127.0f;
- mScriptVBlur.invoke_setLevels(mInBlack, mOutBlack, mInWhite, mOutWhite);
- } else if (seekBar == mOutWhiteSeekBar) {
- mOutWhite = (float)progress + 127.0f;
- mScriptVBlur.invoke_setLevels(mInBlack, mOutBlack, mInWhite, mOutWhite);
- } else if (seekBar == mGammaSeekBar) {
- mGamma = (float)progress/100.0f;
- mGamma = Math.max(mGamma, 0.1f);
- mGamma = 1.0f / mGamma;
- mScriptVBlur.invoke_setGamma(mGamma);
- } else if (seekBar == mSaturationSeekBar) {
- mSaturation = (float)progress / 50.0f;
- mScriptVBlur.invoke_setSaturation(mSaturation);
- }
-
- long t = java.lang.System.currentTimeMillis();
- if (true) {
- mScript.invoke_filter();
- mOutPixelsAllocation.copyTo(mBitmapOut);
- } else {
- javaFilter();
- mDisplayView.invalidate();
- }
-
- t = java.lang.System.currentTimeMillis() - t;
- android.util.Log.v("Img", "Renderscript frame time core ms " + t);
- }
- }
-
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- mBitmapIn = loadBitmap(R.drawable.data);
- mBitmapOut = loadBitmap(R.drawable.data);
- mBitmapScratch = loadBitmap(R.drawable.data);
-
- mSurfaceView = (SurfaceView) findViewById(R.id.surface);
- mSurfaceView.getHolder().addCallback(this);
-
- mDisplayView = (ImageView) findViewById(R.id.display);
- mDisplayView.setImageBitmap(mBitmapOut);
-
- mRadiusSeekBar = (SeekBar) findViewById(R.id.radius);
- mRadiusSeekBar.setOnSeekBarChangeListener(this);
-
- mInBlackSeekBar = (SeekBar)findViewById(R.id.inBlack);
- mInBlackSeekBar.setOnSeekBarChangeListener(this);
- mInBlackSeekBar.setMax(128);
- mInBlackSeekBar.setProgress(0);
- mOutBlackSeekBar = (SeekBar)findViewById(R.id.outBlack);
- mOutBlackSeekBar.setOnSeekBarChangeListener(this);
- mOutBlackSeekBar.setMax(128);
- mOutBlackSeekBar.setProgress(0);
-
- mInWhiteSeekBar = (SeekBar)findViewById(R.id.inWhite);
- mInWhiteSeekBar.setOnSeekBarChangeListener(this);
- mInWhiteSeekBar.setMax(128);
- mInWhiteSeekBar.setProgress(128);
- mOutWhiteSeekBar = (SeekBar)findViewById(R.id.outWhite);
- mOutWhiteSeekBar.setOnSeekBarChangeListener(this);
- mOutWhiteSeekBar.setMax(128);
- mOutWhiteSeekBar.setProgress(128);
-
- mGammaSeekBar = (SeekBar)findViewById(R.id.inGamma);
- mGammaSeekBar.setOnSeekBarChangeListener(this);
- mGammaSeekBar.setMax(150);
- mGammaSeekBar.setProgress(100);
-
- mSaturationSeekBar = (SeekBar)findViewById(R.id.inSaturation);
- mSaturationSeekBar.setOnSeekBarChangeListener(this);
- mSaturationSeekBar.setProgress(50);
-
- mBenchmarkResult = (TextView) findViewById(R.id.benchmarkText);
- mBenchmarkResult.setText("Benchmark not yet run");
- }
-
- public void surfaceCreated(SurfaceHolder holder) {
- createScript();
- mScript.invoke_filter();
- mOutPixelsAllocation.copyTo(mBitmapOut);
- }
-
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- }
-
- public void surfaceDestroyed(SurfaceHolder holder) {
- }
-
- private void createScript() {
- mRS = RenderScript.create(this);
- mRS.setMessageHandler(new FilterCallback());
-
- mInPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapIn,
- Allocation.MipmapControl.MIPMAP_NONE,
- Allocation.USAGE_SCRIPT);
- mOutPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapOut,
- Allocation.MipmapControl.MIPMAP_NONE,
- Allocation.USAGE_SCRIPT);
-
- Type.Builder tb = new Type.Builder(mRS, Element.F32_4(mRS));
- tb.setX(mBitmapIn.getWidth());
- tb.setY(mBitmapIn.getHeight());
- mScratchPixelsAllocation1 = Allocation.createTyped(mRS, tb.create());
- mScratchPixelsAllocation2 = Allocation.createTyped(mRS, tb.create());
-
- mScriptVBlur = new ScriptC_vertical_blur(mRS, getResources(), R.raw.vertical_blur);
- mScriptHBlur = new ScriptC_horizontal_blur(mRS, getResources(), R.raw.horizontal_blur);
-
- mScript = new ScriptC_threshold(mRS, getResources(), R.raw.threshold);
- mScript.set_width(mBitmapIn.getWidth());
- mScript.set_height(mBitmapIn.getHeight());
- mScript.set_radius(mRadius);
-
- mScriptVBlur.invoke_setLevels(mInBlack, mOutBlack, mInWhite, mOutWhite);
- mScriptVBlur.invoke_setGamma(mGamma);
- mScriptVBlur.invoke_setSaturation(mSaturation);
-
- mScript.bind_InPixel(mInPixelsAllocation);
- mScript.bind_OutPixel(mOutPixelsAllocation);
- mScript.bind_ScratchPixel1(mScratchPixelsAllocation1);
- mScript.bind_ScratchPixel2(mScratchPixelsAllocation2);
-
- mScript.set_vBlurScript(mScriptVBlur);
- mScript.set_hBlurScript(mScriptHBlur);
- }
-
- private Bitmap loadBitmap(int resource) {
- final BitmapFactory.Options options = new BitmapFactory.Options();
- options.inPreferredConfig = Bitmap.Config.ARGB_8888;
- return copyBitmap(BitmapFactory.decodeResource(getResources(), resource, options));
- }
-
- private static Bitmap copyBitmap(Bitmap source) {
- Bitmap b = Bitmap.createBitmap(source.getWidth(), source.getHeight(), source.getConfig());
- Canvas c = new Canvas(b);
- c.drawBitmap(source, 0, 0, null);
- source.recycle();
- return b;
- }
-
- // button hook
- public void benchmark(View v) {
- android.util.Log.v("Img", "Benchmarking");
- int oldRadius = mRadius;
- mRadius = MAX_RADIUS;
- mScript.set_radius(mRadius);
-
- long t = java.lang.System.currentTimeMillis();
-
- mScript.invoke_filter();
- mOutPixelsAllocation.copyTo(mBitmapOut);
-
- t = java.lang.System.currentTimeMillis() - t;
- android.util.Log.v("Img", "Renderscript frame time core ms " + t);
-
- //long javaTime = javaFilter();
- //mBenchmarkResult.setText("RS: " + t + " ms Java: " + javaTime + " ms");
- mBenchmarkResult.setText("RS: " + t + " ms");
-
- mRadius = oldRadius;
- mScript.set_radius(mRadius);
-
- mScript.invoke_filter();
- mOutPixelsAllocation.copyTo(mBitmapOut);
- }
-}
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/horizontal_blur.rs b/libs/rs/java/ImageProcessing/src/com/android/rs/image/horizontal_blur.rs
deleted file mode 100644
index 652ffd7..0000000
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/horizontal_blur.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma version(1)
-
-#include "ip.rsh"
-
-void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32_t y) {
- float4 *output = (float4 *)v_out;
- const FilterStruct *fs = (const FilterStruct *)usrData;
- const float4 *input = (const float4 *)rsGetElementAt(fs->ain, 0, y);
-
- float3 blurredPixel = 0;
- const float *gPtr = fs->gaussian;
- if ((x > fs->radius) && (x < (fs->width - fs->radius))) {
- const float4 *i = input + (x - fs->radius);
- for (int r = -fs->radius; r <= fs->radius; r ++) {
- blurredPixel += i->xyz * gPtr[0];
- gPtr++;
- i++;
- }
- } else {
- for (int r = -fs->radius; r <= fs->radius; r ++) {
- // Stepping left and right away from the pixel
- int validW = rsClamp(x + r, (uint)0, (uint)(fs->width - 1));
- blurredPixel += input[validW].xyz * gPtr[0];
- gPtr++;
- }
- }
-
- output->xyz = blurredPixel;
-}
-
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ip.rsh b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ip.rsh
deleted file mode 100644
index 1d7a719..0000000
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ip.rsh
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma rs java_package_name(com.android.rs.image)
-
-#define MAX_RADIUS 25
-
-typedef struct FilterStruct_s {
- rs_allocation ain;
-
- float *gaussian; //[MAX_RADIUS * 2 + 1];
- int height;
- int width;
- int radius;
-
-} FilterStruct;
-
-
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/threshold.rs b/libs/rs/java/ImageProcessing/src/com/android/rs/image/threshold.rs
deleted file mode 100644
index f2f9a36..0000000
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/threshold.rs
+++ /dev/null
@@ -1,93 +0,0 @@
-#pragma version(1)
-
-#include "ip.rsh"
-
-int height;
-int width;
-int radius;
-
-uchar4 * InPixel;
-uchar4 * OutPixel;
-float4 * ScratchPixel1;
-float4 * ScratchPixel2;
-
-rs_script vBlurScript;
-rs_script hBlurScript;
-
-const int CMD_FINISHED = 1;
-
-// Store our coefficients here
-static float gaussian[MAX_RADIUS * 2 + 1];
-
-
-static void computeGaussianWeights() {
- // Compute gaussian weights for the blur
- // e is the euler's number
- float e = 2.718281828459045f;
- float pi = 3.1415926535897932f;
- // g(x) = ( 1 / sqrt( 2 * pi ) * sigma) * e ^ ( -x^2 / 2 * sigma^2 )
- // x is of the form [-radius .. 0 .. radius]
- // and sigma varies with radius.
- // Based on some experimental radius values and sigma's
- // we approximately fit sigma = f(radius) as
- // sigma = radius * 0.4 + 0.6
- // The larger the radius gets, the more our gaussian blur
- // will resemble a box blur since with large sigma
- // the gaussian curve begins to lose its shape
- float sigma = 0.4f * (float)radius + 0.6f;
-
- // Now compute the coefficints
- // We will store some redundant values to save some math during
- // the blur calculations
- // precompute some values
- float coeff1 = 1.0f / (sqrt( 2.0f * pi ) * sigma);
- float coeff2 = - 1.0f / (2.0f * sigma * sigma);
-
- float normalizeFactor = 0.0f;
- float floatR = 0.0f;
- int r;
- for (r = -radius; r <= radius; r ++) {
- floatR = (float)r;
- gaussian[r + radius] = coeff1 * pow(e, floatR * floatR * coeff2);
- normalizeFactor += gaussian[r + radius];
- }
-
- //Now we need to normalize the weights because all our coefficients need to add up to one
- normalizeFactor = 1.0f / normalizeFactor;
- for (r = -radius; r <= radius; r ++) {
- floatR = (float)r;
- gaussian[r + radius] *= normalizeFactor;
- }
-}
-
-
-static void copyInput() {
- rs_allocation ain;
- rsSetObject(&ain,rsGetAllocation(InPixel));
- uint32_t dimx = rsAllocationGetDimX(ain);
- uint32_t dimy = rsAllocationGetDimY(ain);
- for (uint32_t y = 0; y < dimy; y++) {
- for (uint32_t x = 0; x < dimx; x++) {
- ScratchPixel1[x + y * dimx] = convert_float4(InPixel[x + y * dimx]);
- }
- }
-}
-
-void filter() {
- copyInput();
- computeGaussianWeights();
-
- FilterStruct fs;
- fs.gaussian = gaussian;
- fs.width = width;
- fs.height = height;
- fs.radius = radius;
-
- fs.ain = rsGetAllocation(ScratchPixel1);
- rsForEach(hBlurScript, fs.ain, rsGetAllocation(ScratchPixel2), &fs);
-
- fs.ain = rsGetAllocation(ScratchPixel2);
- rsForEach(vBlurScript, fs.ain, rsGetAllocation(OutPixel), &fs);
- rsSendToClientBlocking(CMD_FINISHED);
-}
-
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/vertical_blur.rs b/libs/rs/java/ImageProcessing/src/com/android/rs/image/vertical_blur.rs
deleted file mode 100644
index bd4ae4e..0000000
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/vertical_blur.rs
+++ /dev/null
@@ -1,93 +0,0 @@
-#pragma version(1)
-
-#include "ip.rsh"
-
-static float inBlack;
-static float outBlack;
-static float inWhite;
-static float outWhite;
-static float3 gamma;
-static float saturation;
-
-static float inWMinInB;
-static float outWMinOutB;
-static float overInWMinInB;
-static rs_matrix3x3 colorMat;
-
-void setLevels(float iBlk, float oBlk, float iWht, float oWht) {
- inBlack = iBlk;
- outBlack = oBlk;
- inWhite = iWht;
- outWhite = oWht;
-
- inWMinInB = inWhite - inBlack;
- outWMinOutB = outWhite - outBlack;
- overInWMinInB = 1.f / inWMinInB;
-}
-
-void setSaturation(float sat) {
- saturation = sat;
-
- // Saturation
- // Linear weights
- //float rWeight = 0.3086f;
- //float gWeight = 0.6094f;
- //float bWeight = 0.0820f;
-
- // Gamma 2.2 weights (we haven't converted our image to linear space yet for perf reasons)
- float rWeight = 0.299f;
- float gWeight = 0.587f;
- float bWeight = 0.114f;
-
- float oneMinusS = 1.0f - saturation;
- rsMatrixSet(&colorMat, 0, 0, oneMinusS * rWeight + saturation);
- rsMatrixSet(&colorMat, 0, 1, oneMinusS * rWeight);
- rsMatrixSet(&colorMat, 0, 2, oneMinusS * rWeight);
- rsMatrixSet(&colorMat, 1, 0, oneMinusS * gWeight);
- rsMatrixSet(&colorMat, 1, 1, oneMinusS * gWeight + saturation);
- rsMatrixSet(&colorMat, 1, 2, oneMinusS * gWeight);
- rsMatrixSet(&colorMat, 2, 0, oneMinusS * bWeight);
- rsMatrixSet(&colorMat, 2, 1, oneMinusS * bWeight);
- rsMatrixSet(&colorMat, 2, 2, oneMinusS * bWeight + saturation);
-}
-
-void setGamma(float g) {
- gamma = (float3)g;
-}
-
-//sliao
-extern uchar3 __attribute__((overloadable)) convert2uchar3(float3 xyz);
-
-void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32_t y) {
- uchar4 *output = (uchar4 *)v_out;
- const FilterStruct *fs = (const FilterStruct *)usrData;
- const float4 *input = (const float4 *)rsGetElementAt(fs->ain, x, 0);
-
- float3 blurredPixel = 0;
- const float *gPtr = fs->gaussian;
- if ((y > fs->radius) && (y < (fs->height - fs->radius))) {
- const float4 *i = input + ((y - fs->radius) * fs->width);
- for (int r = -fs->radius; r <= fs->radius; r ++) {
- blurredPixel += i->xyz * gPtr[0];
- gPtr++;
- i += fs->width;
- }
- } else {
- for (int r = -fs->radius; r <= fs->radius; r ++) {
- int validH = rsClamp(y + r, (uint)0, (uint)(fs->height - 1));
- const float4 *i = input + validH * fs->width;
- blurredPixel += i->xyz * gPtr[0];
- gPtr++;
- }
- }
-
- float3 temp = rsMatrixMultiply(&colorMat, blurredPixel);
- temp = (clamp(temp, 0.f, 255.f) - inBlack) * overInWMinInB;
- if (gamma.x != 1.0f)
- temp = pow(temp, (float3)gamma);
- temp = clamp(temp * outWMinOutB + outBlack, 0.f, 255.f);
-
- output->xyz = convert_uchar3(temp);
- //output->w = input->w;
-}
-
diff --git a/libs/rs/java/ModelViewer/Android.mk b/libs/rs/java/ModelViewer/Android.mk
deleted file mode 100644
index efe77d7..0000000
--- a/libs/rs/java/ModelViewer/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright (C) 2008 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-ifneq ($(TARGET_SIMULATOR),true)
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
-#LOCAL_STATIC_JAVA_LIBRARIES := android.renderscript
-
-LOCAL_PACKAGE_NAME := ModelViewer
-
-include $(BUILD_PACKAGE)
-
-endif
diff --git a/libs/rs/java/ModelViewer/AndroidManifest.xml b/libs/rs/java/ModelViewer/AndroidManifest.xml
deleted file mode 100644
index 959fe53..0000000
--- a/libs/rs/java/ModelViewer/AndroidManifest.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.modelviewer">
- <application android:label="ModelViewer">
- <activity android:name="SimpleModel"
- android:label="SimpleModel"
- android:screenOrientation="portrait"
- android:theme="@android:style/Theme.Black.NoTitleBar">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name="SceneGraph"
- android:label="SceneGraph"
- android:theme="@android:style/Theme.Black.NoTitleBar">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
-</manifest>
diff --git a/libs/rs/java/ModelViewer/res/drawable/robot.png b/libs/rs/java/ModelViewer/res/drawable/robot.png
deleted file mode 100644
index f7353fd..0000000
--- a/libs/rs/java/ModelViewer/res/drawable/robot.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/ModelViewer/res/raw/robot.a3d b/libs/rs/java/ModelViewer/res/raw/robot.a3d
deleted file mode 100644
index f48895c..0000000
--- a/libs/rs/java/ModelViewer/res/raw/robot.a3d
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraph.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraph.java
deleted file mode 100644
index b8717a7..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraph.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.modelviewer;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-
-import android.app.Activity;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.provider.Settings.System;
-import android.util.Config;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.ListView;
-
-import java.lang.Runtime;
-
-public class SceneGraph extends Activity {
-
- private SceneGraphView mView;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- // Create our Preview view and set it as the content of our
- // Activity
- mView = new SceneGraphView(this);
- setContentView(mView);
- }
-
- @Override
- protected void onResume() {
- // Ideally a game should implement onResume() and onPause()
- // to take appropriate action when the activity looses focus
- super.onResume();
- mView.resume();
- }
-
- @Override
- protected void onPause() {
- // Ideally a game should implement onResume() and onPause()
- // to take appropriate action when the activity looses focus
- super.onPause();
- mView.pause();
- }
-
-}
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphRS.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphRS.java
deleted file mode 100644
index f91f31e..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphRS.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.modelviewer;
-
-import java.io.Writer;
-import java.util.Map;
-import java.util.Vector;
-
-import android.content.res.Resources;
-import android.renderscript.*;
-import android.renderscript.Element.Builder;
-import android.renderscript.Font.Style;
-import android.renderscript.ProgramStore.DepthFunc;
-import android.util.Log;
-
-
-public class SceneGraphRS {
-
- private final int STATE_LAST_FOCUS = 1;
-
- int mWidth;
- int mHeight;
- int mRotation;
-
- public SceneGraphRS() {
- }
-
- public void init(RenderScriptGL rs, Resources res, int width, int height) {
- mRS = rs;
- mRes = res;
- mWidth = width;
- mHeight = height;
- mRotation = 0;
- initRS();
- }
-
- private Resources mRes;
- private RenderScriptGL mRS;
- private Sampler mSampler;
- private ProgramStore mPSBackground;
- private ProgramFragment mPFBackground;
- private ProgramVertex mPVBackground;
- private ProgramVertexFixedFunction.Constants mPVA;
-
- private Allocation mGridImage;
- private Allocation mAllocPV;
-
- private Mesh mMesh;
-
- private Font mItalic;
- private Allocation mTextAlloc;
-
- private ScriptC_scenegraph mScript;
- private ScriptC_transform mTransformScript;
-
- int mLastX;
- int mLastY;
-
- public void touchEvent(int x, int y) {
- int dx = mLastX - x;
- if (Math.abs(dx) > 50 || Math.abs(dx) < 3) {
- dx = 0;
- }
-
- mRotation -= dx;
- if (mRotation > 360) {
- mRotation -= 360;
- }
- if (mRotation < 0) {
- mRotation += 360;
- }
-
- mScript.set_gRotate(-(float)mRotation);
-
- mLastX = x;
- mLastY = y;
- }
-
- private void initPFS() {
- ProgramStore.Builder b = new ProgramStore.Builder(mRS);
-
- b.setDepthFunc(ProgramStore.DepthFunc.LESS);
- b.setDitherEnabled(false);
- b.setDepthMaskEnabled(true);
- mPSBackground = b.create();
-
- mScript.set_gPFSBackground(mPSBackground);
- }
-
- private void initPF() {
- Sampler.Builder bs = new Sampler.Builder(mRS);
- bs.setMinification(Sampler.Value.LINEAR);
- bs.setMagnification(Sampler.Value.LINEAR);
- bs.setWrapS(Sampler.Value.CLAMP);
- bs.setWrapT(Sampler.Value.CLAMP);
- mSampler = bs.create();
-
- ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS);
- b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
- ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
- mPFBackground = b.create();
- mPFBackground.bindSampler(mSampler, 0);
-
- mScript.set_gPFBackground(mPFBackground);
- }
-
- private void initPV() {
- ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS);
- mPVBackground = pvb.create();
-
- mPVA = new ProgramVertexFixedFunction.Constants(mRS);
- ((ProgramVertexFixedFunction)mPVBackground).bindConstants(mPVA);
-
- mScript.set_gPVBackground(mPVBackground);
- }
-
- private void loadImage() {
- mGridImage = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot,
- Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
- Allocation.USAGE_GRAPHICS_TEXTURE);
- mScript.set_gTGrid(mGridImage);
- }
-
- private void initTextAllocation() {
- String allocString = "Displaying file: R.raw.robot";
- mTextAlloc = Allocation.createFromString(mRS, allocString, Allocation.USAGE_SCRIPT);
- mScript.set_gTextAlloc(mTextAlloc);
- }
-
- SgTransform mRootTransform;
- SgTransform mGroup1;
-
- SgTransform mRobot1;
- SgTransform mRobot2;
-
- void initTransformHierarchy() {
- mRootTransform = new SgTransform(mRS);
-
- mGroup1 = new SgTransform(mRS);
- mRootTransform.addChild(mGroup1);
-
- mRobot1 = new SgTransform(mRS);
- mRobot2 = new SgTransform(mRS);
-
- mGroup1.addChild(mRobot1);
- mGroup1.addChild(mRobot2);
-
- mGroup1.setTransform(0, new Float4(0.0f, 0.0f, -15.0f, 0.0f), TransformType.TRANSLATE);
- mGroup1.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, 15.0f), TransformType.ROTATE);
-
- mRobot1.setTransform(0, new Float4(-3.0f, -0.5f, 0.0f, 0.0f), TransformType.TRANSLATE);
- mRobot1.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, 20.0f), TransformType.ROTATE);
- mRobot1.setTransform(2, new Float4(0.2f, 0.2f, 0.2f, 0.0f), TransformType.SCALE);
-
- mRobot2.setTransform(0, new Float4(3.0f, 0.0f, 0.0f, 0.0f), TransformType.TRANSLATE);
- mRobot2.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, -20.0f), TransformType.ROTATE);
- mRobot2.setTransform(2, new Float4(0.3f, 0.3f, 0.3f, 0.0f), TransformType.SCALE);
- }
-
- private void initRS() {
-
- mScript = new ScriptC_scenegraph(mRS, mRes, R.raw.scenegraph);
- mTransformScript = new ScriptC_transform(mRS, mRes, R.raw.transform);
- mTransformScript.set_transformScript(mTransformScript);
-
- mScript.set_gTransformRS(mTransformScript);
-
- initPFS();
- initPF();
- initPV();
-
- loadImage();
-
- FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot);
- FileA3D.IndexEntry entry = model.getIndexEntry(0);
- if (entry == null || entry.getEntryType() != FileA3D.EntryType.MESH) {
- Log.e("rs", "could not load model");
- } else {
- mMesh = (Mesh)entry.getObject();
- mScript.set_gTestMesh(mMesh);
- }
-
- mItalic = Font.create(mRS, mRes, "serif", Font.Style.ITALIC, 8);
- mScript.set_gItalic(mItalic);
-
- initTextAllocation();
-
- initTransformHierarchy();
-
- mScript.bind_gRootNode(mRootTransform.getField());
-
- mScript.bind_gGroup(mGroup1.mParent.mChildField);
- mScript.bind_gRobot1(mRobot1.mParent.mChildField);
- mScript.set_gRobot1Index(mRobot1.mIndexInParentGroup);
- mScript.bind_gRobot2(mRobot2.mParent.mChildField);
- mScript.set_gRobot2Index(mRobot2.mIndexInParentGroup);
-
- mRS.bindRootScript(mScript);
- }
-}
-
-
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphView.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphView.java
deleted file mode 100644
index 0b6a3b8..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphView.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.modelviewer;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.concurrent.Semaphore;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-import android.renderscript.RenderScriptGL;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.Message;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
-public class SceneGraphView extends RSSurfaceView {
-
- public SceneGraphView(Context context) {
- super(context);
- //setFocusable(true);
- }
-
- private RenderScriptGL mRS;
- private SceneGraphRS mRender;
-
-
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
- super.surfaceChanged(holder, format, w, h);
- if (mRS == null) {
- RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
- sc.setDepth(16, 24);
- mRS = createRenderScriptGL(sc);
- mRS.setSurface(holder, w, h);
- mRender = new SceneGraphRS();
- mRender.init(mRS, getResources(), w, h);
- }
- }
-
- @Override
- protected void onDetachedFromWindow() {
- if (mRS != null) {
- mRS = null;
- destroyRenderScriptGL();
- }
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- // break point at here
- // this method doesn't work when 'extends View' include 'extends ScrollView'.
- return super.onKeyDown(keyCode, event);
- }
-
-
- @Override
- public boolean onTouchEvent(MotionEvent ev)
- {
- boolean ret = true;
- int act = ev.getAction();
- if (act == ev.ACTION_UP) {
- ret = false;
- }
-
- mRender.touchEvent((int)ev.getX(), (int)ev.getY());
- return ret;
- }
-}
-
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SgTransform.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SgTransform.java
deleted file mode 100644
index f5484e2..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SgTransform.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.modelviewer;
-
-import java.io.Writer;
-import java.util.Map;
-import java.util.Vector;
-
-import android.content.res.Resources;
-import android.renderscript.*;
-import android.renderscript.Element.Builder;
-import android.renderscript.ProgramStore.DepthFunc;
-import android.util.Log;
-
-enum TransformType {
-
- NONE(0),
- TRANSLATE(1),
- ROTATE(2),
- SCALE(3);
-
- int mID;
- TransformType(int id) {
- mID = id;
- }
-}
-
-public class SgTransform {
-
-
- ScriptField_SgTransform mTransformField;
- ScriptField_SgTransform mChildField;
- public ScriptField_SgTransform.Item mTransformData;
-
- RenderScript mRS;
-
- Vector mChildren;
- SgTransform mParent;
- int mIndexInParentGroup;
-
- public void setParent(SgTransform parent, int parentIndex) {
- mParent = parent;
- mIndexInParentGroup = parentIndex;
- }
-
- public void addChild(SgTransform child) {
- mChildren.add(child);
- child.setParent(this, mChildren.size() - 1);
- }
-
- public void setTransform(int index, Float4 value, TransformType type) {
- mTransformData.transforms[index] = value;
- mTransformData.transformTypes[index] = type.mID;
- }
-
- void initData() {
- int numElements = mTransformData.transforms.length;
- mTransformData.transformTypes = new int[numElements];
- for (int i = 0; i < numElements; i ++) {
- mTransformData.transforms[i] = new Float4(0, 0, 0, 0);
- mTransformData.transformTypes[i] = TransformType.NONE.mID;
- }
-
- mTransformData.isDirty = 1;
- mTransformData.children = null;
- }
-
- public SgTransform(RenderScript rs) {
- mRS = rs;
- mTransformData = new ScriptField_SgTransform.Item();
- mChildren = new Vector();
- initData();
- }
-
- public ScriptField_SgTransform.Item getData() {
- if (mChildren.size() != 0) {
- mChildField = new ScriptField_SgTransform(mRS, mChildren.size());
- mTransformData.children = mChildField.getAllocation();
-
- for (int i = 0; i < mChildren.size(); i ++) {
- SgTransform child = (SgTransform)mChildren.get(i);
- mChildField.set(child.getData(), i, false);
- }
- mChildField.copyAll();
- }
-
- return mTransformData;
- }
-
- public ScriptField_SgTransform getField() {
- mTransformField = new ScriptField_SgTransform(mRS, 1);
- mTransformField.set(getData(), 0, true);
- return mTransformField;
- }
-}
-
-
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModel.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModel.java
deleted file mode 100644
index 9910970..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModel.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.modelviewer;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-
-import android.app.Activity;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.provider.Settings.System;
-import android.util.Config;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.ListView;
-
-import java.lang.Runtime;
-
-public class SimpleModel extends Activity {
-
- private SimpleModelView mView;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- // Create our Preview view and set it as the content of our
- // Activity
- mView = new SimpleModelView(this);
- setContentView(mView);
- }
-
- @Override
- protected void onResume() {
- // Ideally a game should implement onResume() and onPause()
- // to take appropriate action when the activity looses focus
- super.onResume();
- mView.resume();
- }
-
- @Override
- protected void onPause() {
- // Ideally a game should implement onResume() and onPause()
- // to take appropriate action when the activity looses focus
- super.onPause();
- mView.pause();
- }
-
-}
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java
deleted file mode 100644
index b18a327..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.modelviewer;
-
-import java.io.Writer;
-
-import android.content.res.Resources;
-import android.renderscript.*;
-import android.renderscript.ProgramStore.DepthFunc;
-import android.util.Log;
-
-
-public class SimpleModelRS {
-
- private final int STATE_LAST_FOCUS = 1;
-
- int mWidth;
- int mHeight;
- int mRotation;
-
- public SimpleModelRS() {
- }
-
- public void init(RenderScriptGL rs, Resources res, int width, int height) {
- mRS = rs;
- mRes = res;
- mWidth = width;
- mHeight = height;
- mRotation = 0;
- initRS();
- }
-
- private Resources mRes;
- private RenderScriptGL mRS;
- private Sampler mSampler;
- private ProgramStore mPSBackground;
- private ProgramFragment mPFBackground;
- private ProgramVertex mPVBackground;
- private ProgramVertexFixedFunction.Constants mPVA;
-
- private Allocation mGridImage;
- private Allocation mAllocPV;
-
- private Mesh mMesh;
-
- private Font mItalic;
- private Allocation mTextAlloc;
-
- private ScriptC_simplemodel mScript;
-
- int mLastX;
- int mLastY;
-
- public void touchEvent(int x, int y) {
- int dx = mLastX - x;
- if (Math.abs(dx) > 50 || Math.abs(dx) < 3) {
- dx = 0;
- }
-
- mRotation -= dx;
- if (mRotation > 360) {
- mRotation -= 360;
- }
- if (mRotation < 0) {
- mRotation += 360;
- }
-
- mScript.set_gRotate((float)mRotation);
-
- mLastX = x;
- mLastY = y;
- }
-
- private void initPFS() {
- ProgramStore.Builder b = new ProgramStore.Builder(mRS);
-
- b.setDepthFunc(ProgramStore.DepthFunc.LESS);
- b.setDitherEnabled(false);
- b.setDepthMaskEnabled(true);
- mPSBackground = b.create();
-
- mScript.set_gPFSBackground(mPSBackground);
- }
-
- private void initPF() {
- Sampler.Builder bs = new Sampler.Builder(mRS);
- bs.setMinification(Sampler.Value.LINEAR);
- bs.setMagnification(Sampler.Value.LINEAR);
- bs.setWrapS(Sampler.Value.CLAMP);
- bs.setWrapT(Sampler.Value.CLAMP);
- mSampler = bs.create();
-
- ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS);
- b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
- ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
- mPFBackground = b.create();
- mPFBackground.bindSampler(mSampler, 0);
-
- mScript.set_gPFBackground(mPFBackground);
- }
-
- private void initPV() {
- ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS);
- mPVBackground = pvb.create();
-
- mPVA = new ProgramVertexFixedFunction.Constants(mRS);
- ((ProgramVertexFixedFunction)mPVBackground).bindConstants(mPVA);
-
- mScript.set_gPVBackground(mPVBackground);
- }
-
- private void loadImage() {
- mGridImage = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot,
- Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
- Allocation.USAGE_GRAPHICS_TEXTURE);
- mScript.set_gTGrid(mGridImage);
- }
-
- private void initTextAllocation() {
- String allocString = "Displaying file: R.raw.robot";
- mTextAlloc = Allocation.createFromString(mRS, allocString, Allocation.USAGE_SCRIPT);
- mScript.set_gTextAlloc(mTextAlloc);
- }
-
- private void initRS() {
-
- mScript = new ScriptC_simplemodel(mRS, mRes, R.raw.simplemodel);
-
- initPFS();
- initPF();
- initPV();
-
- loadImage();
-
- FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot);
- FileA3D.IndexEntry entry = model.getIndexEntry(0);
- if (entry == null || entry.getEntryType() != FileA3D.EntryType.MESH) {
- Log.e("rs", "could not load model");
- } else {
- mMesh = (Mesh)entry.getObject();
- mScript.set_gTestMesh(mMesh);
- }
-
- mItalic = Font.create(mRS, mRes, "serif", Font.Style.ITALIC, 8);
- mScript.set_gItalic(mItalic);
-
- initTextAllocation();
-
- mRS.bindRootScript(mScript);
- }
-}
-
-
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelView.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
deleted file mode 100644
index 5c5956d..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.modelviewer;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.concurrent.Semaphore;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-import android.renderscript.RenderScriptGL;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.Message;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
-public class SimpleModelView extends RSSurfaceView {
-
- public SimpleModelView(Context context) {
- super(context);
- //setFocusable(true);
- }
-
- private RenderScriptGL mRS;
- private SimpleModelRS mRender;
-
-
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
- super.surfaceChanged(holder, format, w, h);
- if (mRS == null) {
- RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
- sc.setDepth(16, 24);
- mRS = createRenderScriptGL(sc);
- mRS.setSurface(holder, w, h);
- mRender = new SimpleModelRS();
- mRender.init(mRS, getResources(), w, h);
- }
- }
-
- @Override
- protected void onDetachedFromWindow() {
- if (mRS != null) {
- mRS = null;
- destroyRenderScriptGL();
- }
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- // break point at here
- // this method doesn't work when 'extends View' include 'extends ScrollView'.
- return super.onKeyDown(keyCode, event);
- }
-
-
- @Override
- public boolean onTouchEvent(MotionEvent ev)
- {
- boolean ret = true;
- int act = ev.getAction();
- if (act == ev.ACTION_UP) {
- ret = false;
- }
-
- mRender.touchEvent((int)ev.getX(), (int)ev.getY());
- return ret;
- }
-}
-
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/scenegraph.rs b/libs/rs/java/ModelViewer/src/com/android/modelviewer/scenegraph.rs
deleted file mode 100644
index 3679068..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/scenegraph.rs
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.modelviewer)
-
-#include "rs_graphics.rsh"
-#include "transform_def.rsh"
-
-rs_program_vertex gPVBackground;
-rs_program_fragment gPFBackground;
-
-rs_allocation gTGrid;
-rs_mesh gTestMesh;
-
-rs_program_store gPFSBackground;
-
-float gRotate;
-
-rs_font gItalic;
-rs_allocation gTextAlloc;
-
-rs_script gTransformRS;
-
-SgTransform *gGroup;
-SgTransform *gRobot1;
-int gRobot1Index;
-SgTransform *gRobot2;
-int gRobot2Index;
-
-SgTransform *gRootNode;
-
-void init() {
- gRotate = 0.0f;
-}
-
-int root(int launchID) {
-
- gGroup->transforms[1].w += 0.5f;
- gGroup->isDirty = 1;
-
- SgTransform *robot1Ptr = gRobot1 + gRobot1Index;
-
- robot1Ptr->transforms[1].w -= 1.5f;
- robot1Ptr->isDirty = 1;
-
- SgTransform *robot2Ptr = gRobot2 + gRobot2Index;
- robot2Ptr->transforms[1].w += 2.5f;
- robot2Ptr->isDirty = 1;
-
- rsForEach(gTransformRS, gRootNode->children, gRootNode->children, 0);
-
- rsgClearColor(1.0f, 1.0f, 1.0f, 1.0f);
- rsgClearDepth(1.0f);
-
- rsgBindProgramVertex(gPVBackground);
- rs_matrix4x4 proj;
- float aspect = (float)rsgGetWidth() / (float)rsgGetHeight();
- rsMatrixLoadPerspective(&proj, 30.0f, aspect, 0.1f, 100.0f);
- rsgProgramVertexLoadProjectionMatrix(&proj);
-
- rsgBindProgramFragment(gPFBackground);
- rsgBindProgramStore(gPFSBackground);
- rsgBindTexture(gPFBackground, 0, gTGrid);
-
- rsgProgramVertexLoadModelMatrix(&robot1Ptr->globalMat);
- rsgDrawMesh(gTestMesh);
-
- rsgProgramVertexLoadModelMatrix(&robot2Ptr->globalMat);
- rsgDrawMesh(gTestMesh);
-
- //color(0.3f, 0.3f, 0.3f, 1.0f);
- rsgDrawText("Renderscript transform test", 30, 695);
-
- rsgBindFont(gItalic);
- rsgDrawText(gTextAlloc, 30, 730);
-
- return 10;
-}
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/simplemodel.rs b/libs/rs/java/ModelViewer/src/com/android/modelviewer/simplemodel.rs
deleted file mode 100644
index 419de62..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/simplemodel.rs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.modelviewer)
-
-#include "rs_graphics.rsh"
-
-rs_program_vertex gPVBackground;
-rs_program_fragment gPFBackground;
-
-rs_allocation gTGrid;
-rs_mesh gTestMesh;
-
-rs_program_store gPFSBackground;
-
-float gRotate;
-
-rs_font gItalic;
-rs_allocation gTextAlloc;
-
-void init() {
- gRotate = 0.0f;
-}
-
-int root(int launchID) {
-
- rsgClearColor(1.0f, 1.0f, 1.0f, 1.0f);
- rsgClearDepth(1.0f);
-
- rsgBindProgramVertex(gPVBackground);
- rs_matrix4x4 proj;
- float aspect = (float)rsgGetWidth() / (float)rsgGetHeight();
- rsMatrixLoadPerspective(&proj, 30.0f, aspect, 0.1f, 100.0f);
- rsgProgramVertexLoadProjectionMatrix(&proj);
-
- rsgBindProgramFragment(gPFBackground);
- rsgBindProgramStore(gPFSBackground);
- rsgBindTexture(gPFBackground, 0, gTGrid);
-
- rs_matrix4x4 matrix;
- rsMatrixLoadIdentity(&matrix);
- // Position our model on the screen
- rsMatrixTranslate(&matrix, 0.0f, -0.3f, -10.0f);
- rsMatrixScale(&matrix, 0.2f, 0.2f, 0.2f);
- rsMatrixRotate(&matrix, 25.0f, 1.0f, 0.0f, 0.0f);
- rsMatrixRotate(&matrix, gRotate, 0.0f, 1.0f, 0.0f);
- rsgProgramVertexLoadModelMatrix(&matrix);
-
- rsgDrawMesh(gTestMesh);
-
- rsgFontColor(0.3f, 0.3f, 0.3f, 1.0f);
- rsgDrawText("Renderscript model test", 30, 695);
-
- rsgBindFont(gItalic);
- rsgDrawText(gTextAlloc, 30, 730);
-
- return 10;
-}
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/transform.rs b/libs/rs/java/ModelViewer/src/com/android/modelviewer/transform.rs
deleted file mode 100644
index f328025..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/transform.rs
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.modelviewer)
-
-#include "transform_def.rsh"
-
-rs_script transformScript;
-
-typedef struct {
- int changed;
- rs_matrix4x4 *mat;
-} ParentData;
-
-static void appendTransformation(int type, float4 data, rs_matrix4x4 *mat) {
- rs_matrix4x4 temp;
-
- switch (type) {
- case TRANSFORM_TRANSLATE:
- rsMatrixLoadTranslate(&temp, data.x, data.y, data.z);
- break;
- case TRANSFORM_ROTATE:
- rsMatrixLoadRotate(&temp, data.w, data.x, data.y, data.z);
- break;
- case TRANSFORM_SCALE:
- rsMatrixLoadScale(&temp, data.x, data.y, data.z);
- break;
- }
- rsMatrixMultiply(mat, &temp);
-}
-
-void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32_t y) {
-
- SgTransform *data = (SgTransform *)v_out;
- const ParentData *parent = (const ParentData *)usrData;
-
- //rsDebug("Transform data", (int)data);
- //rsDebug("Entering parent", (int)parent);
-
- rs_matrix4x4 *localMat = &data->localMat;
- rs_matrix4x4 *globalMat = &data->globalMat;
-
- ParentData toChild;
- toChild.changed = 0;
- toChild.mat = globalMat;
-
- //rsDebug("Transform is dirty", data->isDirty);
-
- // Refresh matrices if dirty
- if (data->isDirty) {
- data->isDirty = 0;
- toChild.changed = 1;
-
- // Reset our local matrix
- rsMatrixLoadIdentity(localMat);
-
- for (int i = 0; i < 16; i ++) {
- if (data->transformTypes[i] == TRANSFORM_NONE) {
- break;
- }
- //rsDebug("Transform adding transformation", transformTypes[i]);
- appendTransformation(data->transformTypes[i], data->transforms[i], localMat);
- }
- }
-
- //rsDebug("Transform checking parent", (int)0);
-
- if (parent) {
- if (parent->changed) {
- toChild.changed = 1;
-
- rsMatrixLoad(globalMat, parent->mat);
- rsMatrixMultiply(globalMat, localMat);
- }
- } else {
- rsMatrixLoad(globalMat, localMat);
- }
-
- //rsDebug("Transform calling self with child ", (int)data->children.p);
- if (data->children.p) {
- rsForEach(transformScript, data->children, data->children, (void*)&toChild);
- }
-}
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/transform_def.rsh b/libs/rs/java/ModelViewer/src/com/android/modelviewer/transform_def.rsh
deleted file mode 100644
index 24a36c1..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/transform_def.rsh
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.modelviewer)
-
-#define TRANSFORM_NONE 0
-#define TRANSFORM_TRANSLATE 1
-#define TRANSFORM_ROTATE 2
-#define TRANSFORM_SCALE 3
-
-typedef struct __attribute__((packed, aligned(4))) SgTransform {
- rs_matrix4x4 globalMat;
- rs_matrix4x4 localMat;
-
- float4 transforms[16];
- int transformTypes[16];
-
- int isDirty;
-
- rs_allocation children;
-
-} SgTransform;
diff --git a/libs/rs/java/Samples/_index.html b/libs/rs/java/Samples/_index.html
new file mode 100644
index 0000000..5872431
--- /dev/null
+++ b/libs/rs/java/Samples/_index.html
@@ -0,0 +1 @@
+<p>A set of samples that demonstrate how to use various features of the Renderscript APIs.</p>
\ No newline at end of file
diff --git a/libs/rs/java/_index.html b/libs/rs/java/_index.html
new file mode 100644
index 0000000..5872431
--- /dev/null
+++ b/libs/rs/java/_index.html
@@ -0,0 +1 @@
+<p>A set of samples that demonstrate how to use various features of the Renderscript APIs.</p>
\ No newline at end of file
diff --git a/libs/rs/java/tests/Android.mk b/libs/rs/java/tests/Android.mk
deleted file mode 100644
index 6c992d5..0000000
--- a/libs/rs/java/tests/Android.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright (C) 2008 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-ifneq ($(TARGET_SIMULATOR),true)
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
-
-LOCAL_PACKAGE_NAME := RSTest
-
-include $(BUILD_PACKAGE)
-
-endif
diff --git a/libs/rs/java/tests/AndroidManifest.xml b/libs/rs/java/tests/AndroidManifest.xml
deleted file mode 100644
index b660398..0000000
--- a/libs/rs/java/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.rs.test">
- <application
- android:label="_RS_Test"
- android:icon="@drawable/test_pattern">
- <activity android:name="RSTest"
- android:screenOrientation="portrait">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
-</manifest>
diff --git a/libs/rs/java/tests/res/drawable/test_pattern.png b/libs/rs/java/tests/res/drawable/test_pattern.png
deleted file mode 100644
index e7d1455..0000000
--- a/libs/rs/java/tests/res/drawable/test_pattern.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/tests/src/com/android/rs/test/RSTest.java b/libs/rs/java/tests/src/com/android/rs/test/RSTest.java
deleted file mode 100644
index 6b8fa6b..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/RSTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-
-import android.app.Activity;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.provider.Settings.System;
-import android.util.Config;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.ListView;
-
-import java.lang.Runtime;
-
-public class RSTest extends Activity {
- //EventListener mListener = new EventListener();
-
- private static final String LOG_TAG = "libRS_jni";
- private static final boolean DEBUG = false;
- private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
-
- private RSTestView mView;
-
- // get the current looper (from your Activity UI thread for instance
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- // Create our Preview view and set it as the content of our
- // Activity
- mView = new RSTestView(this);
- setContentView(mView);
- }
-
- @Override
- protected void onResume() {
- // Ideally a game should implement onResume() and onPause()
- // to take appropriate action when the activity loses focus
- super.onResume();
- mView.resume();
- }
-
- @Override
- protected void onPause() {
- // Ideally a game should implement onResume() and onPause()
- // to take appropriate action when the activity loses focus
- super.onPause();
- mView.pause();
- }
-
- static void log(String message) {
- if (LOG_ENABLED) {
- Log.v(LOG_TAG, message);
- }
- }
-
-
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java b/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java
deleted file mode 100644
index 541bf22..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.renderscript.*;
-import android.util.Log;
-import java.util.ArrayList;
-import java.util.ListIterator;
-import java.util.Timer;
-import java.util.TimerTask;
-
-
-public class RSTestCore {
- int mWidth;
- int mHeight;
- Context mCtx;
-
- public RSTestCore(Context ctx) {
- mCtx = ctx;
- }
-
- private Resources mRes;
- private RenderScriptGL mRS;
-
- private Font mFont;
- ScriptField_ListAllocs_s mListAllocs;
- int mLastX;
- int mLastY;
- private ScriptC_rslist mScript;
-
- private ArrayList<UnitTest> unitTests;
- private ListIterator<UnitTest> test_iter;
- private UnitTest activeTest;
- private boolean stopTesting;
-
- /* Periodic timer for ensuring future tests get scheduled */
- private Timer mTimer;
- public static final int RS_TIMER_PERIOD = 100;
-
- public void init(RenderScriptGL rs, Resources res, int width, int height) {
- mRS = rs;
- mRes = res;
- mWidth = width;
- mHeight = height;
- stopTesting = false;
-
- mScript = new ScriptC_rslist(mRS, mRes, R.raw.rslist);
-
- unitTests = new ArrayList<UnitTest>();
-
- unitTests.add(new UT_primitives(this, mRes, mCtx));
- unitTests.add(new UT_rsdebug(this, mRes, mCtx));
- unitTests.add(new UT_rstime(this, mRes, mCtx));
- unitTests.add(new UT_rstypes(this, mRes, mCtx));
- unitTests.add(new UT_math(this, mRes, mCtx));
- unitTests.add(new UT_fp_mad(this, mRes, mCtx));
- /*
- unitTests.add(new UnitTest(null, "<Pass>", 1));
- unitTests.add(new UnitTest());
- unitTests.add(new UnitTest(null, "<Fail>", -1));
-
- for (int i = 0; i < 20; i++) {
- unitTests.add(new UnitTest(null, "<Pass>", 1));
- }
- */
-
- UnitTest [] uta = new UnitTest[unitTests.size()];
- uta = unitTests.toArray(uta);
-
- mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length);
- for (int i = 0; i < uta.length; i++) {
- ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item();
- listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT);
- listElem.result = uta[i].result;
- mListAllocs.set(listElem, i, false);
- uta[i].setItem(listElem);
- }
-
- mListAllocs.copyAll();
-
- mScript.bind_gList(mListAllocs);
-
- mFont = Font.create(mRS, mRes, "serif", Font.Style.BOLD, 8);
- mScript.set_gFont(mFont);
-
- mRS.bindRootScript(mScript);
-
- test_iter = unitTests.listIterator();
- refreshTestResults(); /* Kick off the first test */
-
- TimerTask pTask = new TimerTask() {
- public void run() {
- refreshTestResults();
- }
- };
-
- mTimer = new Timer();
- mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD);
- }
-
- public void checkAndRunNextTest() {
- if (activeTest != null) {
- if (!activeTest.isAlive()) {
- /* Properly clean up on our last test */
- try {
- activeTest.join();
- }
- catch (InterruptedException e) {
- }
- activeTest = null;
- }
- }
-
- if (!stopTesting && activeTest == null) {
- if (test_iter.hasNext()) {
- activeTest = test_iter.next();
- activeTest.start();
- /* This routine will only get called once when a new test
- * should start running. The message handler in UnitTest.java
- * ensures this. */
- }
- else {
- if (mTimer != null) {
- mTimer.cancel();
- mTimer.purge();
- mTimer = null;
- }
- }
- }
- }
-
- public void refreshTestResults() {
- checkAndRunNextTest();
-
- if (mListAllocs != null && mScript != null && mRS != null) {
- mListAllocs.copyAll();
-
- mScript.bind_gList(mListAllocs);
- mRS.bindRootScript(mScript);
- }
- }
-
- public void cleanup() {
- stopTesting = true;
- UnitTest t = activeTest;
-
- /* Stop periodic refresh of testing */
- if (mTimer != null) {
- mTimer.cancel();
- mTimer.purge();
- mTimer = null;
- }
-
- /* Wait to exit until we finish the current test */
- if (t != null) {
- try {
- t.join();
- }
- catch (InterruptedException e) {
- }
- t = null;
- }
-
- }
-
- public void newTouchPosition(float x, float y, float pressure, int id) {
- }
-
- public void onActionDown(int x, int y) {
- mScript.set_gDY(0.0f);
- mLastX = x;
- mLastY = y;
- refreshTestResults();
- }
-
- public void onActionMove(int x, int y) {
- int dx = mLastX - x;
- int dy = mLastY - y;
-
- if (Math.abs(dy) <= 2) {
- dy = 0;
- }
-
- mScript.set_gDY(dy);
-
- mLastX = x;
- mLastY = y;
- refreshTestResults();
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/RSTestView.java b/libs/rs/java/tests/src/com/android/rs/test/RSTestView.java
deleted file mode 100644
index 368f286..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/RSTestView.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.concurrent.Semaphore;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-import android.renderscript.RenderScriptGL;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.Message;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
-public class RSTestView extends RSSurfaceView {
-
- private Context mCtx;
-
- public RSTestView(Context context) {
- super(context);
- mCtx = context;
- //setFocusable(true);
- }
-
- private RenderScriptGL mRS;
- private RSTestCore mRender;
-
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
- super.surfaceChanged(holder, format, w, h);
- if (mRS == null) {
- RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
- mRS = createRenderScriptGL(sc);
- mRS.setSurface(holder, w, h);
- mRender = new RSTestCore(mCtx);
- mRender.init(mRS, getResources(), w, h);
- }
- }
-
- @Override
- protected void onDetachedFromWindow() {
- if(mRS != null) {
- mRender.cleanup();
- mRS = null;
- destroyRenderScriptGL();
- }
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev)
- {
- boolean ret = false;
- int act = ev.getAction();
- if (act == ev.ACTION_DOWN) {
- mRender.onActionDown((int)ev.getX(), (int)ev.getY());
- ret = true;
- }
- else if (act == ev.ACTION_MOVE) {
- mRender.onActionMove((int)ev.getX(), (int)ev.getY());
- ret = true;
- }
-
- return ret;
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UT_fp_mad.java b/libs/rs/java/tests/src/com/android/rs/test/UT_fp_mad.java
deleted file mode 100644
index f2c91af..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/UT_fp_mad.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.renderscript.*;
-
-public class UT_fp_mad extends UnitTest {
- private Resources mRes;
-
- protected UT_fp_mad(RSTestCore rstc, Resources res, Context ctx) {
- super(rstc, "Fp_Mad", ctx);
- mRes = res;
- }
-
- public void run() {
- RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_fp_mad s = new ScriptC_fp_mad(pRS, mRes, R.raw.fp_mad);
- pRS.setMessageHandler(mRsMessage);
- s.invoke_fp_mad_test(0, 0);
- pRS.finish();
- waitForMessage();
- pRS.destroy();
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UT_math.java b/libs/rs/java/tests/src/com/android/rs/test/UT_math.java
deleted file mode 100644
index bf133be..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/UT_math.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.renderscript.*;
-
-public class UT_math extends UnitTest {
- private Resources mRes;
-
- protected UT_math(RSTestCore rstc, Resources res, Context ctx) {
- super(rstc, "Math", ctx);
- mRes = res;
- }
-
- public void run() {
- RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_math s = new ScriptC_math(pRS, mRes, R.raw.math);
- pRS.setMessageHandler(mRsMessage);
- s.invoke_math_test(0, 0);
- pRS.finish();
- waitForMessage();
- pRS.destroy();
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UT_primitives.java b/libs/rs/java/tests/src/com/android/rs/test/UT_primitives.java
deleted file mode 100644
index b7a65a5..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/UT_primitives.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.renderscript.*;
-
-public class UT_primitives extends UnitTest {
- private Resources mRes;
-
- protected UT_primitives(RSTestCore rstc, Resources res, Context ctx) {
- super(rstc, "Primitives", ctx);
- mRes = res;
- }
-
- private boolean initializeGlobals(ScriptC_primitives s) {
- float pF = s.get_floatTest();
- if (pF != 1.99f) {
- return false;
- }
- s.set_floatTest(2.99f);
-
- double pD = s.get_doubleTest();
- if (pD != 2.05) {
- return false;
- }
- s.set_doubleTest(3.05);
-
- byte pC = s.get_charTest();
- if (pC != -8) {
- return false;
- }
- s.set_charTest((byte)-16);
-
- short pS = s.get_shortTest();
- if (pS != -16) {
- return false;
- }
- s.set_shortTest((short)-32);
-
- int pI = s.get_intTest();
- if (pI != -32) {
- return false;
- }
- s.set_intTest(-64);
-
- long pL = s.get_longTest();
- if (pL != 17179869184l) {
- return false;
- }
- s.set_longTest(17179869185l);
-
- long puL = s.get_ulongTest();
- if (puL != 4611686018427387904L) {
- return false;
- }
- s.set_ulongTest(4611686018427387903L);
-
-
- long pLL = s.get_longlongTest();
- if (pLL != 68719476736L) {
- return false;
- }
- s.set_longlongTest(68719476735L);
-
- long pu64 = s.get_uint64_tTest();
- if (pu64 != 117179869184l) {
- return false;
- }
- s.set_uint64_tTest(117179869185l);
-
- return true;
- }
-
- public void run() {
- RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_primitives s = new ScriptC_primitives(pRS, mRes, R.raw.primitives);
- pRS.setMessageHandler(mRsMessage);
- if (!initializeGlobals(s)) {
- // initializeGlobals failed
- result = -1;
- } else {
- s.invoke_primitives_test(0, 0);
- pRS.finish();
- waitForMessage();
- }
- pRS.destroy();
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UT_rsdebug.java b/libs/rs/java/tests/src/com/android/rs/test/UT_rsdebug.java
deleted file mode 100644
index 0614b1a..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/UT_rsdebug.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.renderscript.*;
-
-public class UT_rsdebug extends UnitTest {
- private Resources mRes;
-
- protected UT_rsdebug(RSTestCore rstc, Resources res, Context ctx) {
- super(rstc, "rsDebug", ctx);
- mRes = res;
- }
-
- public void run() {
- RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_rsdebug s = new ScriptC_rsdebug(pRS, mRes, R.raw.rsdebug);
- pRS.setMessageHandler(mRsMessage);
- s.invoke_test_rsdebug(0, 0);
- pRS.finish();
- waitForMessage();
- pRS.destroy();
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UT_rstime.java b/libs/rs/java/tests/src/com/android/rs/test/UT_rstime.java
deleted file mode 100644
index f302e1a..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/UT_rstime.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.renderscript.*;
-
-public class UT_rstime extends UnitTest {
- private Resources mRes;
-
- protected UT_rstime(RSTestCore rstc, Resources res, Context ctx) {
- super(rstc, "rsTime", ctx);
- mRes = res;
- }
-
- public void run() {
- RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_rstime s = new ScriptC_rstime(pRS, mRes, R.raw.rstime);
- pRS.setMessageHandler(mRsMessage);
- s.invoke_test_rstime(0, 0);
- pRS.finish();
- waitForMessage();
- pRS.destroy();
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UT_rstypes.java b/libs/rs/java/tests/src/com/android/rs/test/UT_rstypes.java
deleted file mode 100644
index 74211c8..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/UT_rstypes.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.renderscript.*;
-
-public class UT_rstypes extends UnitTest {
- private Resources mRes;
-
- protected UT_rstypes(RSTestCore rstc, Resources res, Context ctx) {
- super(rstc, "rsTypes", ctx);
- mRes = res;
- }
-
- public void run() {
- RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_rstypes s = new ScriptC_rstypes(pRS, mRes, R.raw.rstypes);
- pRS.setMessageHandler(mRsMessage);
- s.invoke_test_rstypes(0, 0);
- pRS.finish();
- waitForMessage();
- pRS.destroy();
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UnitTest.java b/libs/rs/java/tests/src/com/android/rs/test/UnitTest.java
deleted file mode 100644
index a7722c7..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/UnitTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.rs.test;
-import android.content.Context;
-import android.renderscript.RenderScript.RSMessageHandler;
-import android.util.Log;
-
-public class UnitTest extends Thread {
- public String name;
- public int result;
- private ScriptField_ListAllocs_s.Item mItem;
- private RSTestCore mRSTC;
- private boolean msgHandled;
- protected Context mCtx;
-
- /* These constants must match those in shared.rsh */
- public static final int RS_MSG_TEST_PASSED = 100;
- public static final int RS_MSG_TEST_FAILED = 101;
-
- private static int numTests = 0;
- public int testID;
-
- protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) {
- super();
- mRSTC = rstc;
- name = n;
- msgHandled = false;
- mCtx = ctx;
- result = initResult;
- testID = numTests++;
- }
-
- protected UnitTest(RSTestCore rstc, String n, Context ctx) {
- this(rstc, n, 0, ctx);
- }
-
- protected UnitTest(RSTestCore rstc, Context ctx) {
- this (rstc, "<Unknown>", ctx);
- }
-
- protected UnitTest(Context ctx) {
- this (null, ctx);
- }
-
- protected RSMessageHandler mRsMessage = new RSMessageHandler() {
- public void run() {
- if (result == 0) {
- switch (mID) {
- case RS_MSG_TEST_PASSED:
- result = 1;
- break;
- case RS_MSG_TEST_FAILED:
- result = -1;
- break;
- default:
- android.util.Log.v("RenderScript", "Unit test got unexpected message");
- return;
- }
- }
-
- if (mItem != null) {
- mItem.result = result;
- msgHandled = true;
- try {
- mRSTC.refreshTestResults();
- }
- catch (IllegalStateException e) {
- /* Ignore the case where our message receiver has been
- disconnected. This happens when we leave the application
- before it finishes running all of the unit tests. */
- }
- }
- }
- };
-
- public void waitForMessage() {
- while (!msgHandled) {
- yield();
- }
- }
-
- public void setItem(ScriptField_ListAllocs_s.Item item) {
- mItem = item;
- }
-
- public void run() {
- /* This method needs to be implemented for each subclass */
- if (mRSTC != null) {
- mRSTC.refreshTestResults();
- }
- }
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/fp_mad.rs b/libs/rs/java/tests/src/com/android/rs/test/fp_mad.rs
deleted file mode 100644
index b6f2b2a6..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/fp_mad.rs
+++ /dev/null
@@ -1,174 +0,0 @@
-#include "shared.rsh"
-
-const int TEST_COUNT = 1;
-
-static float data_f1[1025];
-static float4 data_f4[1025];
-
-static void test_mad4(uint32_t index) {
- start();
-
- float total = 0;
- // Do ~1 billion ops
- for (int ct=0; ct < 1000 * (1000 / 80); ct++) {
- for (int i=0; i < (1000); i++) {
- data_f4[i] = (data_f4[i] * 0.02f +
- data_f4[i+1] * 0.04f +
- data_f4[i+2] * 0.05f +
- data_f4[i+3] * 0.1f +
- data_f4[i+4] * 0.2f +
- data_f4[i+5] * 0.2f +
- data_f4[i+6] * 0.1f +
- data_f4[i+7] * 0.05f +
- data_f4[i+8] * 0.04f +
- data_f4[i+9] * 0.02f + 1.f);
- }
- }
-
- float time = end(index);
- rsDebug("fp_mad4 M ops", 1000.f / time);
-}
-
-static void test_mad(uint32_t index) {
- start();
-
- float total = 0;
- // Do ~1 billion ops
- for (int ct=0; ct < 1000 * (1000 / 20); ct++) {
- for (int i=0; i < (1000); i++) {
- data_f1[i] = (data_f1[i] * 0.02f +
- data_f1[i+1] * 0.04f +
- data_f1[i+2] * 0.05f +
- data_f1[i+3] * 0.1f +
- data_f1[i+4] * 0.2f +
- data_f1[i+5] * 0.2f +
- data_f1[i+6] * 0.1f +
- data_f1[i+7] * 0.05f +
- data_f1[i+8] * 0.04f +
- data_f1[i+9] * 0.02f + 1.f);
- }
- }
-
- float time = end(index);
- rsDebug("fp_mad M ops", 1000.f / time);
-}
-
-static void test_norm(uint32_t index) {
- start();
-
- float total = 0;
- // Do ~10 M ops
- for (int ct=0; ct < 1000 * 10; ct++) {
- for (int i=0; i < (1000); i++) {
- data_f4[i] = normalize(data_f4[i]);
- }
- }
-
- float time = end(index);
- rsDebug("fp_norm M ops", 10.f / time);
-}
-
-static void test_sincos4(uint32_t index) {
- start();
-
- float total = 0;
- // Do ~10 M ops
- for (int ct=0; ct < 1000 * 10 / 4; ct++) {
- for (int i=0; i < (1000); i++) {
- data_f4[i] = sin(data_f4[i]) * cos(data_f4[i]);
- }
- }
-
- float time = end(index);
- rsDebug("fp_sincos4 M ops", 10.f / time);
-}
-
-static void test_sincos(uint32_t index) {
- start();
-
- float total = 0;
- // Do ~10 M ops
- for (int ct=0; ct < 1000 * 10; ct++) {
- for (int i=0; i < (1000); i++) {
- data_f1[i] = sin(data_f1[i]) * cos(data_f1[i]);
- }
- }
-
- float time = end(index);
- rsDebug("fp_sincos M ops", 10.f / time);
-}
-
-static void test_clamp(uint32_t index) {
- start();
-
- // Do ~100 M ops
- for (int ct=0; ct < 1000 * 100; ct++) {
- for (int i=0; i < (1000); i++) {
- data_f1[i] = clamp(data_f1[i], -1.f, 1.f);
- }
- }
-
- float time = end(index);
- rsDebug("fp_clamp M ops", 100.f / time);
-
- start();
- // Do ~100 M ops
- for (int ct=0; ct < 1000 * 100; ct++) {
- for (int i=0; i < (1000); i++) {
- if (data_f1[i] < -1.f) data_f1[i] = -1.f;
- if (data_f1[i] > -1.f) data_f1[i] = 1.f;
- }
- }
-
- time = end(index);
- rsDebug("fp_clamp ref M ops", 100.f / time);
-}
-
-static void test_clamp4(uint32_t index) {
- start();
-
- float total = 0;
- // Do ~100 M ops
- for (int ct=0; ct < 1000 * 100 /4; ct++) {
- for (int i=0; i < (1000); i++) {
- data_f4[i] = clamp(data_f4[i], -1.f, 1.f);
- }
- }
-
- float time = end(index);
- rsDebug("fp_clamp4 M ops", 100.f / time);
-}
-
-void fp_mad_test(uint32_t index, int test_num) {
- int x;
- for (x=0; x < 1025; x++) {
- data_f1[x] = (x & 0xf) * 0.1f;
- data_f4[x].x = (x & 0xf) * 0.1f;
- data_f4[x].y = (x & 0xf0) * 0.1f;
- data_f4[x].z = (x & 0x33) * 0.1f;
- data_f4[x].w = (x & 0x77) * 0.1f;
- }
-
- test_mad4(index);
- test_mad(index);
-
- for (x=0; x < 1025; x++) {
- data_f1[x] = (x & 0xf) * 0.1f + 1.f;
- data_f4[x].x = (x & 0xf) * 0.1f + 1.f;
- data_f4[x].y = (x & 0xf0) * 0.1f + 1.f;
- data_f4[x].z = (x & 0x33) * 0.1f + 1.f;
- data_f4[x].w = (x & 0x77) * 0.1f + 1.f;
- }
-
- test_norm(index);
- test_sincos4(index);
- test_sincos(index);
- test_clamp4(index);
- test_clamp(index);
-
- // TODO Actually verify test result accuracy
- rsDebug("fp_mad_test PASSED", 0);
- rsSendToClientBlocking(RS_MSG_TEST_PASSED);
-}
-
-
diff --git a/libs/rs/java/tests/src/com/android/rs/test/math.rs b/libs/rs/java/tests/src/com/android/rs/test/math.rs
deleted file mode 100644
index 8cad82b..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/math.rs
+++ /dev/null
@@ -1,322 +0,0 @@
-#include "shared.rsh"
-
-// Testing math library
-
-volatile float f1;
-volatile float2 f2;
-volatile float3 f3;
-volatile float4 f4;
-
-volatile int i1;
-volatile int2 i2;
-volatile int3 i3;
-volatile int4 i4;
-
-volatile uint ui1;
-volatile uint2 ui2;
-volatile uint3 ui3;
-volatile uint4 ui4;
-
-volatile short s1;
-volatile short2 s2;
-volatile short3 s3;
-volatile short4 s4;
-
-volatile ushort us1;
-volatile ushort2 us2;
-volatile ushort3 us3;
-volatile ushort4 us4;
-
-volatile char c1;
-volatile char2 c2;
-volatile char3 c3;
-volatile char4 c4;
-
-volatile uchar uc1;
-volatile uchar2 uc2;
-volatile uchar3 uc3;
-volatile uchar4 uc4;
-
-#define TEST_FN_FUNC_FN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1); \
- f2 = fnc(f2); \
- f3 = fnc(f3); \
- f4 = fnc(f4);
-
-#define TEST_FN_FUNC_FN_PFN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, (float*) &f1); \
- f2 = fnc(f2, (float2*) &f2); \
- f3 = fnc(f3, (float3*) &f3); \
- f4 = fnc(f4, (float4*) &f4);
-
-#define TEST_FN_FUNC_FN_FN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, f1); \
- f2 = fnc(f2, f2); \
- f3 = fnc(f3, f3); \
- f4 = fnc(f4, f4);
-
-#define TEST_FN_FUNC_FN_F(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, f1); \
- f2 = fnc(f2, f1); \
- f3 = fnc(f3, f1); \
- f4 = fnc(f4, f1);
-
-#define TEST_FN_FUNC_FN_IN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, i1); \
- f2 = fnc(f2, i2); \
- f3 = fnc(f3, i3); \
- f4 = fnc(f4, i4);
-
-#define TEST_FN_FUNC_FN_I(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, i1); \
- f2 = fnc(f2, i1); \
- f3 = fnc(f3, i1); \
- f4 = fnc(f4, i1);
-
-#define TEST_FN_FUNC_FN_FN_FN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, f1, f1); \
- f2 = fnc(f2, f2, f2); \
- f3 = fnc(f3, f3, f3); \
- f4 = fnc(f4, f4, f4);
-
-#define TEST_FN_FUNC_FN_PIN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, (int*) &i1); \
- f2 = fnc(f2, (int2*) &i2); \
- f3 = fnc(f3, (int3*) &i3); \
- f4 = fnc(f4, (int4*) &i4);
-
-#define TEST_FN_FUNC_FN_FN_PIN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- f1 = fnc(f1, f1, (int*) &i1); \
- f2 = fnc(f2, f2, (int2*) &i2); \
- f3 = fnc(f3, f3, (int3*) &i3); \
- f4 = fnc(f4, f4, (int4*) &i4);
-
-#define TEST_IN_FUNC_FN(fnc) \
- rsDebug("Testing " #fnc, 0); \
- i1 = fnc(f1); \
- i2 = fnc(f2); \
- i3 = fnc(f3); \
- i4 = fnc(f4);
-
-
-static bool test_fp_math(uint32_t index) {
- bool failed = false;
- start();
-
- TEST_FN_FUNC_FN(acos);
- TEST_FN_FUNC_FN(acosh);
- TEST_FN_FUNC_FN(acospi);
- TEST_FN_FUNC_FN(asin);
- TEST_FN_FUNC_FN(asinh);
- TEST_FN_FUNC_FN(asinpi);
- TEST_FN_FUNC_FN(atan);
- TEST_FN_FUNC_FN_FN(atan2);
- TEST_FN_FUNC_FN(atanh);
- TEST_FN_FUNC_FN(atanpi);
- TEST_FN_FUNC_FN_FN(atan2pi);
- TEST_FN_FUNC_FN(cbrt);
- TEST_FN_FUNC_FN(ceil);
- TEST_FN_FUNC_FN_FN(copysign);
- TEST_FN_FUNC_FN(cos);
- TEST_FN_FUNC_FN(cosh);
- TEST_FN_FUNC_FN(cospi);
- TEST_FN_FUNC_FN(erfc);
- TEST_FN_FUNC_FN(erf);
- TEST_FN_FUNC_FN(exp);
- TEST_FN_FUNC_FN(exp2);
- TEST_FN_FUNC_FN(exp10);
- TEST_FN_FUNC_FN(expm1);
- TEST_FN_FUNC_FN(fabs);
- TEST_FN_FUNC_FN_FN(fdim);
- TEST_FN_FUNC_FN(floor);
- TEST_FN_FUNC_FN_FN_FN(fma);
- TEST_FN_FUNC_FN_FN(fmax);
- TEST_FN_FUNC_FN_F(fmax);
- TEST_FN_FUNC_FN_FN(fmin);
- TEST_FN_FUNC_FN_F(fmin);
- TEST_FN_FUNC_FN_FN(fmod);
- TEST_FN_FUNC_FN_PFN(fract);
- TEST_FN_FUNC_FN_PIN(frexp);
- TEST_FN_FUNC_FN_FN(hypot);
- TEST_IN_FUNC_FN(ilogb);
- TEST_FN_FUNC_FN_IN(ldexp);
- TEST_FN_FUNC_FN_I(ldexp);
- TEST_FN_FUNC_FN(lgamma);
- TEST_FN_FUNC_FN_PIN(lgamma);
- TEST_FN_FUNC_FN(log);
- TEST_FN_FUNC_FN(log2);
- TEST_FN_FUNC_FN(log10);
- TEST_FN_FUNC_FN(log1p);
- TEST_FN_FUNC_FN(logb);
- TEST_FN_FUNC_FN_FN_FN(mad);
- TEST_FN_FUNC_FN_PFN(modf);
- // nan
- TEST_FN_FUNC_FN_FN(nextafter);
- TEST_FN_FUNC_FN_FN(pow);
- TEST_FN_FUNC_FN_IN(pown);
- TEST_FN_FUNC_FN_FN(powr);
- TEST_FN_FUNC_FN_FN(remainder);
- TEST_FN_FUNC_FN_FN_PIN(remquo);
- TEST_FN_FUNC_FN(rint);
- TEST_FN_FUNC_FN_IN(rootn);
- TEST_FN_FUNC_FN(round);
- TEST_FN_FUNC_FN(rsqrt);
- TEST_FN_FUNC_FN(sin);
- TEST_FN_FUNC_FN_PFN(sincos);
- TEST_FN_FUNC_FN(sinh);
- TEST_FN_FUNC_FN(sinpi);
- TEST_FN_FUNC_FN(sqrt);
- TEST_FN_FUNC_FN(tan);
- TEST_FN_FUNC_FN(tanh);
- TEST_FN_FUNC_FN(tanpi);
- TEST_FN_FUNC_FN(tgamma);
- TEST_FN_FUNC_FN(trunc);
-
- float time = end(index);
-
- if (failed) {
- rsDebug("test_fp_math FAILED", time);
- }
- else {
- rsDebug("test_fp_math PASSED", time);
- }
-
- return failed;
-}
-
-#define DECL_INT(prefix) \
-volatile char prefix##_c_1 = 1; \
-volatile char2 prefix##_c_2 = 1; \
-volatile char3 prefix##_c_3 = 1; \
-volatile char4 prefix##_c_4 = 1; \
-volatile uchar prefix##_uc_1 = 1; \
-volatile uchar2 prefix##_uc_2 = 1; \
-volatile uchar3 prefix##_uc_3 = 1; \
-volatile uchar4 prefix##_uc_4 = 1; \
-volatile short prefix##_s_1 = 1; \
-volatile short2 prefix##_s_2 = 1; \
-volatile short3 prefix##_s_3 = 1; \
-volatile short4 prefix##_s_4 = 1; \
-volatile ushort prefix##_us_1 = 1; \
-volatile ushort2 prefix##_us_2 = 1; \
-volatile ushort3 prefix##_us_3 = 1; \
-volatile ushort4 prefix##_us_4 = 1; \
-volatile int prefix##_i_1 = 1; \
-volatile int2 prefix##_i_2 = 1; \
-volatile int3 prefix##_i_3 = 1; \
-volatile int4 prefix##_i_4 = 1; \
-volatile uint prefix##_ui_1 = 1; \
-volatile uint2 prefix##_ui_2 = 1; \
-volatile uint3 prefix##_ui_3 = 1; \
-volatile uint4 prefix##_ui_4 = 1; \
-volatile long prefix##_l_1 = 1; \
-volatile ulong prefix##_ul_1 = 1;
-
-#define TEST_INT_OP_TYPE(op, type) \
-rsDebug("Testing " #op " for " #type "1", i++); \
-res_##type##_1 = src1_##type##_1 op src2_##type##_1; \
-rsDebug("Testing " #op " for " #type "2", i++); \
-res_##type##_2 = src1_##type##_2 op src2_##type##_2; \
-rsDebug("Testing " #op " for " #type "3", i++); \
-res_##type##_3 = src1_##type##_3 op src2_##type##_3; \
-rsDebug("Testing " #op " for " #type "4", i++); \
-res_##type##_4 = src1_##type##_4 op src2_##type##_4;
-
-#define TEST_INT_OP(op) \
-TEST_INT_OP_TYPE(op, c) \
-TEST_INT_OP_TYPE(op, uc) \
-TEST_INT_OP_TYPE(op, s) \
-TEST_INT_OP_TYPE(op, us) \
-TEST_INT_OP_TYPE(op, i) \
-TEST_INT_OP_TYPE(op, ui) \
-rsDebug("Testing " #op " for l1", i++); \
-res_l_1 = src1_l_1 op src2_l_1; \
-rsDebug("Testing " #op " for ul1", i++); \
-res_ul_1 = src1_ul_1 op src2_ul_1;
-
-DECL_INT(res)
-DECL_INT(src1)
-DECL_INT(src2)
-
-static bool test_basic_operators() {
- bool failed = false;
- int i = 0;
-
- TEST_INT_OP(+);
- TEST_INT_OP(-);
- TEST_INT_OP(*);
- TEST_INT_OP(/);
- TEST_INT_OP(%);
- TEST_INT_OP(<<);
- TEST_INT_OP(>>);
-
- if (failed) {
- rsDebug("test_basic_operators FAILED", 0);
- }
- else {
- rsDebug("test_basic_operators PASSED", 0);
- }
-
- return failed;
-}
-
-#define TEST_CVT(to, from, type) \
-rsDebug("Testing convert from " #from " to " #to, 0); \
-to##1 = from##1; \
-to##2 = convert_##type##2(from##2); \
-to##3 = convert_##type##3(from##3); \
-to##4 = convert_##type##4(from##4);
-
-#define TEST_CVT_MATRIX(to, type) \
-TEST_CVT(to, c, type); \
-TEST_CVT(to, uc, type); \
-TEST_CVT(to, s, type); \
-TEST_CVT(to, us, type); \
-TEST_CVT(to, i, type); \
-TEST_CVT(to, ui, type); \
-TEST_CVT(to, f, type); \
-
-static bool test_convert() {
- bool failed = false;
-
- TEST_CVT_MATRIX(c, char);
- TEST_CVT_MATRIX(uc, uchar);
- TEST_CVT_MATRIX(s, short);
- TEST_CVT_MATRIX(us, ushort);
- TEST_CVT_MATRIX(i, int);
- TEST_CVT_MATRIX(ui, uint);
- TEST_CVT_MATRIX(f, float);
-
- if (failed) {
- rsDebug("test_convert FAILED", 0);
- }
- else {
- rsDebug("test_convert PASSED", 0);
- }
-
- return failed;
-}
-
-void math_test(uint32_t index, int test_num) {
- bool failed = false;
- failed |= test_convert();
- failed |= test_fp_math(index);
- failed |= test_basic_operators();
-
- if (failed) {
- rsSendToClientBlocking(RS_MSG_TEST_FAILED);
- }
- else {
- rsSendToClientBlocking(RS_MSG_TEST_PASSED);
- }
-}
-
diff --git a/libs/rs/java/tests/src/com/android/rs/test/primitives.rs b/libs/rs/java/tests/src/com/android/rs/test/primitives.rs
deleted file mode 100644
index ce451da..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/primitives.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "shared.rsh"
-
-// Testing primitive types
-float floatTest = 1.99f;
-double doubleTest = 2.05;
-char charTest = -8;
-short shortTest = -16;
-int intTest = -32;
-long longTest = 17179869184l; // 1 << 34
-long long longlongTest = 68719476736l; // 1 << 36
-
-uchar ucharTest = 8;
-ushort ushortTest = 16;
-uint uintTest = 32;
-ulong ulongTest = 4611686018427387904L;
-int64_t int64_tTest = -17179869184l; // - 1 << 34
-uint64_t uint64_tTest = 117179869184l;
-
-static bool test_primitive_types(uint32_t index) {
- bool failed = false;
- start();
-
- _RS_ASSERT(floatTest == 2.99f);
- _RS_ASSERT(doubleTest == 3.05);
- _RS_ASSERT(charTest == -16);
- _RS_ASSERT(shortTest == -32);
- _RS_ASSERT(intTest == -64);
- _RS_ASSERT(longTest == 17179869185l);
- _RS_ASSERT(longlongTest == 68719476735l);
-
- _RS_ASSERT(ucharTest == 8);
- _RS_ASSERT(ushortTest == 16);
- _RS_ASSERT(uintTest == 32);
- _RS_ASSERT(ulongTest == 4611686018427387903L);
- _RS_ASSERT(int64_tTest == -17179869184l);
- _RS_ASSERT(uint64_tTest == 117179869185l);
-
- float time = end(index);
-
- if (failed) {
- rsDebug("test_primitives FAILED", time);
- }
- else {
- rsDebug("test_primitives PASSED", time);
- }
-
- return failed;
-}
-
-void primitives_test(uint32_t index, int test_num) {
- bool failed = false;
- failed |= test_primitive_types(index);
-
- if (failed) {
- rsSendToClientBlocking(RS_MSG_TEST_FAILED);
- }
- else {
- rsSendToClientBlocking(RS_MSG_TEST_PASSED);
- }
-}
-
diff --git a/libs/rs/java/tests/src/com/android/rs/test/rsdebug.rs b/libs/rs/java/tests/src/com/android/rs/test/rsdebug.rs
deleted file mode 100644
index f7942a5..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/rsdebug.rs
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "shared.rsh"
-
-// Testing primitive types
-float floatTest = 1.99f;
-double doubleTest = 2.05;
-char charTest = -8;
-short shortTest = -16;
-int intTest = -32;
-long longTest = 17179869184l; // 1 << 34
-long long longlongTest = 68719476736l; // 1 << 36
-
-uchar ucharTest = 8;
-ushort ushortTest = 16;
-uint uintTest = 32;
-ulong ulongTest = 4611686018427387904L;
-int64_t int64_tTest = -17179869184l; // - 1 << 34
-uint64_t uint64_tTest = 117179869184l;
-
-static bool basic_test(uint32_t index) {
- bool failed = false;
-
- // This test focuses primarily on compilation-time, not run-time.
- // For this reason, none of the outputs are actually checked.
-
- rsDebug("floatTest", floatTest);
- rsDebug("doubleTest", doubleTest);
- rsDebug("charTest", charTest);
- rsDebug("shortTest", shortTest);
- rsDebug("intTest", intTest);
- rsDebug("longTest", longTest);
- rsDebug("longlongTest", longlongTest);
-
- rsDebug("ucharTest", ucharTest);
- rsDebug("ushortTest", ushortTest);
- rsDebug("uintTest", uintTest);
- rsDebug("ulongTest", ulongTest);
- rsDebug("int64_tTest", int64_tTest);
- rsDebug("uint64_tTest", uint64_tTest);
-
- return failed;
-}
-
-void test_rsdebug(uint32_t index, int test_num) {
- bool failed = false;
- failed |= basic_test(index);
-
- if (failed) {
- rsSendToClientBlocking(RS_MSG_TEST_FAILED);
- rsDebug("rsdebug_test FAILED", -1);
- }
- else {
- rsSendToClientBlocking(RS_MSG_TEST_PASSED);
- rsDebug("rsdebug_test PASSED", 0);
- }
-}
-
diff --git a/libs/rs/java/tests/src/com/android/rs/test/rslist.rs b/libs/rs/java/tests/src/com/android/rs/test/rslist.rs
deleted file mode 100644
index 67c2b86..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/rslist.rs
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.test)
-
-#include "rs_graphics.rsh"
-
-float gDY;
-
-rs_font gFont;
-
-typedef struct ListAllocs_s {
- rs_allocation text;
- int result;
-} ListAllocs;
-
-ListAllocs *gList;
-
-void init() {
- gDY = 0.0f;
-}
-
-int textPos = 0;
-
-int root(int launchID) {
-
- rsgClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- rsgClearDepth(1.0f);
-
- textPos -= (int)gDY*2;
- gDY *= 0.95;
-
- rsgFontColor(0.9f, 0.9f, 0.9f, 1.0f);
- rsgBindFont(gFont);
-
- rs_allocation listAlloc;
- rsSetObject(&listAlloc, rsGetAllocation(gList));
- int allocSize = rsAllocationGetDimX(listAlloc);
-
- int width = rsgGetWidth();
- int height = rsgGetHeight();
-
- int itemHeight = 80;
- int totalItemHeight = itemHeight * allocSize;
-
- /* Prevent scrolling above the top of the list */
- int firstItem = height - totalItemHeight;
- if (firstItem < 0) {
- firstItem = 0;
- }
-
- /* Prevent scrolling past the last line of the list */
- int lastItem = -1 * (totalItemHeight - height);
- if (lastItem > 0) {
- lastItem = 0;
- }
-
- if (textPos > firstItem) {
- textPos = firstItem;
- }
- else if (textPos < lastItem) {
- textPos = lastItem;
- }
-
- int currentYPos = itemHeight + textPos;
-
- for(int i = 0; i < allocSize; i ++) {
- if(currentYPos - itemHeight > height) {
- break;
- }
-
- if(currentYPos > 0) {
- switch(gList[i].result) {
- case 1: /* Passed */
- rsgFontColor(0.5f, 0.9f, 0.5f, 1.0f);
- break;
- case -1: /* Failed */
- rsgFontColor(0.9f, 0.5f, 0.5f, 1.0f);
- break;
- case 0: /* Still Testing */
- rsgFontColor(0.9f, 0.9f, 0.5f, 1.0f);
- break;
- default: /* Unknown */
- rsgFontColor(0.9f, 0.9f, 0.9f, 1.0f);
- break;
- }
- rsgDrawRect(0, currentYPos - 1, width, currentYPos, 0);
- rsgDrawText(gList[i].text, 30, currentYPos - 32);
- }
- currentYPos += itemHeight;
- }
-
- return 10;
-}
diff --git a/libs/rs/java/tests/src/com/android/rs/test/rstime.rs b/libs/rs/java/tests/src/com/android/rs/test/rstime.rs
deleted file mode 100644
index 5e3e078..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/rstime.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "shared.rsh"
-
-static bool basic_test(uint32_t index) {
- bool failed = false;
-
- rs_time_t curTime = rsTime(0);
- rs_tm tm;
- rsDebug("curTime", curTime);
-
- rsLocaltime(&tm, &curTime);
-
- rsDebug("tm.tm_sec", tm.tm_sec);
- rsDebug("tm.tm_min", tm.tm_min);
- rsDebug("tm.tm_hour", tm.tm_hour);
- rsDebug("tm.tm_mday", tm.tm_mday);
- rsDebug("tm.tm_mon", tm.tm_mon);
- rsDebug("tm.tm_year", tm.tm_year);
- rsDebug("tm.tm_wday", tm.tm_wday);
- rsDebug("tm.tm_yday", tm.tm_yday);
- rsDebug("tm.tm_isdst", tm.tm_isdst);
-
- // Test a specific time (only valid for PST localtime)
- curTime = 1294438893;
- rsLocaltime(&tm, &curTime);
-
- _RS_ASSERT(tm.tm_sec == 33);
- _RS_ASSERT(tm.tm_min == 21);
- _RS_ASSERT(tm.tm_hour == 14);
- _RS_ASSERT(tm.tm_mday == 7);
- _RS_ASSERT(tm.tm_mon == 0);
- _RS_ASSERT(tm.tm_year == 111);
- _RS_ASSERT(tm.tm_wday == 5);
- _RS_ASSERT(tm.tm_yday == 6);
- _RS_ASSERT(tm.tm_isdst == 0);
-
- return failed;
-}
-
-void test_rstime(uint32_t index, int test_num) {
- bool failed = false;
- failed |= basic_test(index);
-
- if (failed) {
- rsSendToClientBlocking(RS_MSG_TEST_FAILED);
- rsDebug("rstime_test FAILED", -1);
- }
- else {
- rsSendToClientBlocking(RS_MSG_TEST_PASSED);
- rsDebug("rstime_test PASSED", 0);
- }
-}
-
diff --git a/libs/rs/java/tests/src/com/android/rs/test/rstypes.rs b/libs/rs/java/tests/src/com/android/rs/test/rstypes.rs
deleted file mode 100644
index f3bf244..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/rstypes.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-#include "shared.rsh"
-#include "rs_graphics.rsh"
-
-rs_element elementTest;
-rs_type typeTest;
-rs_allocation allocationTest;
-rs_sampler samplerTest;
-rs_script scriptTest;
-rs_mesh meshTest;
-rs_program_fragment program_fragmentTest;
-rs_program_vertex program_vertexTest;
-rs_program_raster program_rasterTest;
-rs_program_store program_storeTest;
-rs_font fontTest;
-
-rs_matrix4x4 matrix4x4Test;
-rs_matrix3x3 matrix3x3Test;
-rs_matrix2x2 matrix2x2Test;
-
-struct my_struct {
- int i;
- rs_font fontTestStruct;
-};
-
-static bool basic_test(uint32_t index) {
- bool failed = false;
-
- rs_matrix4x4 matrix4x4TestLocal;
- rs_matrix3x3 matrix3x3TestLocal;
- rs_matrix2x2 matrix2x2TestLocal;
-
- // This test focuses primarily on compilation-time, not run-time.
- rs_element elementTestLocal;
- rs_type typeTestLocal;
- rs_allocation allocationTestLocal;
- rs_sampler samplerTestLocal;
- rs_script scriptTestLocal;
- rs_mesh meshTestLocal;
- rs_program_fragment program_fragmentTestLocal;
- rs_program_vertex program_vertexTestLocal;
- rs_program_raster program_rasterTestLocal;
- rs_program_store program_storeTestLocal;
- rs_font fontTestLocal;
-
- rs_font fontTestLocalArray[4];
-
- rs_font fontTestLocalPreInit = fontTest;
-
- struct my_struct structTest;
-
- rsSetObject(&fontTestLocal, fontTest);
- //allocationTestLocal = allocationTest;
-
- rsSetObject(&fontTest, fontTestLocal);
- //allocationTest = allocationTestLocal;
-
- /*for (int i = 0; i < 4; i++) {
- rsSetObject(&fontTestLocalArray[i], fontTestLocal);
- }*/
-
- /*rsSetObject(&fontTest, fontTestLocalArray[3]);*/
-
- return failed;
-}
-
-void test_rstypes(uint32_t index, int test_num) {
- bool failed = false;
- failed |= basic_test(index);
-
- if (failed) {
- rsSendToClientBlocking(RS_MSG_TEST_FAILED);
- rsDebug("rstypes_test FAILED", -1);
- }
- else {
- rsSendToClientBlocking(RS_MSG_TEST_PASSED);
- rsDebug("rstypes_test PASSED", 0);
- }
-}
-
diff --git a/libs/rs/java/tests/src/com/android/rs/test/shared.rsh b/libs/rs/java/tests/src/com/android/rs/test/shared.rsh
deleted file mode 100644
index 21be9af..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/shared.rsh
+++ /dev/null
@@ -1,38 +0,0 @@
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.test)
-
-typedef struct TestResult_s {
- rs_allocation name;
- bool pass;
- float score;
- int64_t time;
-} TestResult;
-//TestResult *g_results;
-
-static int64_t g_time;
-
-static void start(void) {
- g_time = rsUptimeMillis();
-}
-
-static float end(uint32_t idx) {
- int64_t t = rsUptimeMillis() - g_time;
- //g_results[idx].time = t;
- //rsDebug("test time", (int)t);
- return ((float)t) / 1000.f;
-}
-
-#define _RS_ASSERT(b) \
-do { \
- if (!(b)) { \
- failed = true; \
- rsDebug(#b " FAILED", 0); \
- } \
-\
-} while (0)
-
-/* These constants must match those in UnitTest.java */
-static const int RS_MSG_TEST_PASSED = 100;
-static const int RS_MSG_TEST_FAILED = 101;
-
diff --git a/libs/rs/java/tests/src/com/android/rs/test/test_root.rs b/libs/rs/java/tests/src/com/android/rs/test/test_root.rs
deleted file mode 100644
index 6dc83ba..0000000
--- a/libs/rs/java/tests/src/com/android/rs/test/test_root.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Fountain test script
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.test)
-
-#pragma stateFragment(parent)
-
-#include "rs_graphics.rsh"
-
-
-typedef struct TestResult {
- rs_allocation name;
- bool pass;
- float score;
-} TestResult_t;
-TestResult_t *results;
-
-int root() {
-
- return 0;
-}
-
-
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index a97f4f6..486dacc 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"التطبيقات"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"تم إنشاء الاتصال بالإنترنت عن طريق البلوتوث."</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"تهيئة طرق الإدخال"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"استخدام لوحة المفاتيح الفعلية"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 0138507..df6ef71 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Приложения"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth има връзка с тетъринг"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Конфигуриране на въвеждането"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Използване на физ. клав."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 53305c7..2993e8b 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth sense fil"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configura mètodes d\'entrada"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilitza un teclat físic"</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index dbcb15d..29ab1a7 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikace"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Datové připojení Bluetooth se sdílí"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Nakonfigurovat metody vstupu"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Použít fyz. klávesnici"</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index a0bf544..81122a8 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Programmer"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-tethering anvendt"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurer inputmetoder"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Brug fysisk tastatur"</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index cbf4b42..1ea87e8 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-Tethering aktiv"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Eingabemethoden konfigurieren"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Physische Tastatur"</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 33ab311..cd412f4 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Έγινε σύνδεση μέσω Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Διαμόρφωση μεθόδων εισαγωγής"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Χρήση κανονικού πληκτρολ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 1bd4dc3..2bd662b 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configure input methods"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Use physical keyboard"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 1bd0186..2c50160 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicaciones"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth anclado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de entrada"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Usar teclado físico"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index f1fe8fc..8d9cc5c 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicaciones"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth anclado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de introducción"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizar teclado físico"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 5c6fc44..1e0f1e9 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"برنامه های کاربردی"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"اتصال اینترنتی با بلوتوث تلفن همراه"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"پیکربندی روش های ورودی"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"از صفحه کلید فیزیکی استفاده کنید"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index c6503e5..e2f935a 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Sovellukset"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth yhdistetty"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Määritä syöttötavat"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Käytä fyysistä näppäimistöä"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 8861018..9bd1886 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Applications"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Connexion Bluetooth partagée"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurer les modes de saisie"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utiliser clavier physique"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index ae7db36..8034eb7 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikacije"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth posredno povezan"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfiguriraj načine ulaza"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Rabi fizičku tipkovnicu"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 24a5ec2..9a91b13 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Alkalmazások"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth megosztva"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Beviteli módok konfigurálása"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Valódi bill. használata"</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index b1538ce..8d3cfb1 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tertambat"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurasikan metode masukan"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Gunakan keyboard fisik"</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 2d2eabb..9e7f53a 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Applicazioni"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth con tethering"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configura metodi di input"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizza tastiera fisica"</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 55a4624..a242d04 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth קשור"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"הגדר שיטות קלט"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"השתמש במקלדת הפיזית"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index b6792b1..869688c 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"アプリ"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetoothテザリング接続"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"入力方法の設定"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"物理キーボードを使用"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 1f1f06a..32ae7e7 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"애플리케이션"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"블루투스 테더링됨"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"입력 방법 구성"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"물리적 키보드 사용"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 926a92e..01cdffd 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"„Bluetooth“ susieta"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigūruoti įvesties metodus"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Naudoti fizinę klaviatūrą"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 764577b..817e1d5 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Lietotnes"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth piesaiste"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurēt ievades metodes"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Izmantot fizisku tastatūru"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index c451f72..bb96483 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Programmer"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tilknyttet"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurer inndatametoder"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Bruk fysisk tastatur"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index e7ae395..faf3f32 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth getetherd"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Invoermethoden configureren"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Fysiek toetsenbord gebruiken"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 97832bd..77ae7e7 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikacje"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth – podłączono"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfiguruj metody wprowadzania"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Używaj klawiatury fizycznej"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 38bcbb0..1215415 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicações"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ligado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de entrada"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizar teclado físico"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 226a93e..1f4afb7 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicativos"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth vinculado"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configurar métodos de entrada"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Usar o teclado físico"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 19b765e..c3bcc97 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplicaţii"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Conectat prin tethering prin Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Configuraţi metode de intrare"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Utilizaţi tastat. fizică"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index af3bce2..e53fbd2 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Приложения"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Общий модем доступен через Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Настроить способ ввода"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Использовать физическую клавиатуру"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index ab02ee70..bf316cc 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Aplikácie"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Zdieľané dátové pripojenie cez Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurovať metódy vstupu"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Použiť fyzickú klávesnicu"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 7b0581b..c0a7f04 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Programi"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Internetna povezava prek Bluetootha"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Nastavitev načinov vnosa"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Uporabi fizično tipkovn."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index fe303ff..bd00a9c 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Веза преко Bluetooth-а"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Конфигуриши методе уноса"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Користи физичку тастатуру"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index e2efc62..0537c94 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Appar"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Internetdelning via Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Konfigurera inmatningsmetoder"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Använd fysiska tangenter"</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index ae48f0f..c42e26d 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"แอปพลิเคชัน"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"บลูทูธที่ปล่อยสัญญาณ"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"กำหนดค่าวิธีการป้อนข้อมูล"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"ใช้แป้นพิมพ์จริง"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index b4a097d..1244945 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Na-tether ang bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"I-configure paraan ng input"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Gamitin ang pisikal na keyboard"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index b094e5a..e911b42 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Uygulamalar"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth paylaşımı tamam"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Giriş yöntemlerini yapılandır"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Fiziksel klavyeyi kullan"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index f9bfa8d..963a50f 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Програми"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Створено прив\'язку Bluetooth"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Налаштувати методи введення"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Викор. реальну клавіатуру"</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 40c2bbe..108febf 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Ứng dụng"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth được dùng làm điểm truy cập Internet"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Định cấu hình phương pháp nhập liệu"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Sử dụng bàn phím vật lý"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 448bc7e..5a74abc 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"应用程序"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"蓝牙已绑定"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"配置输入法"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"使用物理键盘"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 3af3605..7509357 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -43,6 +43,5 @@
<string name="recent_tasks_app_label" msgid="3796483981246752469">"應用程式"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"已透過藍牙進行網際網路共用"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"設定輸入方式"</string>
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"使用實體鍵盤"</string>
</resources>
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
index 15c4f44..734f5ad 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
@@ -294,7 +294,8 @@
return null;
}
- String value = mResourceData[index].getValue();
+ ResourceValue resValue = mResourceData[index];
+ String value = resValue.getValue();
if (value == null) {
return null;
@@ -308,11 +309,13 @@
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
parser.setInput(new FileReader(f));
- ColorStateList colorStateList = ColorStateList.createFromXml(
- mContext.getResources(),
- // FIXME: we need to know if this resource is platform or not
- new BridgeXmlBlockParser(parser, mContext, false));
- return colorStateList;
+ BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(
+ parser, mContext, resValue.isFramework());
+ try {
+ return ColorStateList.createFromXml(mContext.getResources(), blockParser);
+ } finally {
+ blockParser.ensurePopped();
+ }
} catch (XmlPullParserException e) {
Bridge.getLog().error(LayoutLog.TAG_BROKEN,
"Failed to configure parser for " + value, e, null /*data*/);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
index 38800da..2f54ae6 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
@@ -45,6 +45,8 @@
private boolean mStarted = false;
private int mEventType = START_DOCUMENT;
+ private boolean mPopped = true; // default to true in case it's not pushed.
+
/**
* Builds a {@link BridgeXmlBlockParser}.
* @param parser The XmlPullParser to get the content from.
@@ -59,6 +61,7 @@
if (mContext != null) {
mContext.pushParser(this);
+ mPopped = false;
}
}
@@ -82,6 +85,13 @@
return null;
}
+ public void ensurePopped() {
+ if (mContext != null && mPopped == false) {
+ mContext.popParser();
+ mPopped = true;
+ }
+ }
+
// ------- XmlResourceParser implementation
public void setFeature(String name, boolean state)
@@ -249,9 +259,9 @@
}
int ev = mParser.next();
- if (ev == END_TAG && mParser.getDepth() == 1 && mContext != null) {
+ if (ev == END_TAG && mParser.getDepth() == 1) {
// done with parser remove it from the context stack.
- mContext.popParser();
+ ensurePopped();
}
mEventType = ev;
return ev;
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
index 771d89a..0c4b0d3 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
@@ -76,9 +76,13 @@
"UTF8");
BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser(
- parser, (BridgeContext) context, false);
+ parser, (BridgeContext) context, false /*platformFile*/);
- inflater.inflate(bridgeParser, this, true);
+ try {
+ inflater.inflate(bridgeParser, this, true);
+ } finally {
+ bridgeParser.ensurePopped();
+ }
}
private InputStream getIcon(String iconName, Density[] densityInOut, String[] pathOut,
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index 136b205..fedd789f 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -182,8 +182,8 @@
context.setBridgeInflater(mInflater);
mInflater.setFactory2(context);
- mBlockParser = new BridgeXmlBlockParser(params.getLayoutDescription(),
- context, false /* platformResourceFlag */);
+ mBlockParser = new BridgeXmlBlockParser(
+ params.getLayoutDescription(), context, false /* platformResourceFlag */);
return SUCCESS.createResult();
}
@@ -562,13 +562,14 @@
BridgeContext context = getContext();
// create a block parser for the XML
- BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(childXml, context,
- false /* platformResourceFlag */);
+ BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(
+ childXml, context, false /* platformResourceFlag */);
// inflate the child without adding it to the root since we want to control where it'll
// get added. We do pass the parentView however to ensure that the layoutParams will
// be created correctly.
final View child = mInflater.inflate(blockParser, parentView, false /*attachToRoot*/);
+ blockParser.ensurePopped();
invalidateRenderingSize();
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java
index 19392a7..69f46e6 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java
@@ -126,8 +126,13 @@
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
parser.setInput(new FileReader(f));
- return ColorStateList.createFromXml(context.getResources(),
- new BridgeXmlBlockParser(parser, context, resValue.isFramework()));
+ BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(
+ parser, context, resValue.isFramework());
+ try {
+ return ColorStateList.createFromXml(context.getResources(), blockParser);
+ } finally {
+ blockParser.ensurePopped();
+ }
} catch (XmlPullParserException e) {
Bridge.getLog().error(LayoutLog.TAG_BROKEN,
"Failed to configure parser for " + value, e, null /*data*/);
@@ -164,8 +169,6 @@
* @param context the current context
*/
public static Drawable getDrawable(ResourceValue value, BridgeContext context) {
- Drawable d = null;
-
String stringValue = value.getValue();
if (RenderResources.REFERENCE_NULL.equals(stringValue)) {
return null;
@@ -205,9 +208,13 @@
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
parser.setInput(new FileReader(f));
- d = Drawable.createFromXml(context.getResources(),
- new BridgeXmlBlockParser(parser, context, value.isFramework()));
- return d;
+ BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(
+ parser, context, value.isFramework());
+ try {
+ return Drawable.createFromXml(context.getResources(), blockParser);
+ } finally {
+ blockParser.ensurePopped();
+ }
} catch (Exception e) {
// this is an error and not warning since the file existence is checked before
// attempting to parse it.