summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk1
-rw-r--r--api/current.xml3672
-rw-r--r--core/java/android/app/ActivityManager.java7
-rw-r--r--core/java/android/app/AlertDialog.java19
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java6
-rw-r--r--core/java/android/nfc/NdefRecord.java4
-rw-r--r--core/java/android/nfc/NdefTag.java48
-rw-r--r--core/java/android/nfc/NdefTagConnection.java38
-rw-r--r--core/java/android/nfc/NfcAdapter.java29
-rw-r--r--core/java/android/nfc/RawTagConnection.java39
-rw-r--r--core/java/android/nfc/Tag.java73
-rw-r--r--core/java/android/os/Build.java2
-rw-r--r--core/java/android/server/BluetoothEventLoop.java2
-rw-r--r--core/java/android/server/BluetoothService.java4
-rw-r--r--core/java/android/text/style/BulletSpan.java23
-rw-r--r--core/java/android/webkit/DeviceMotionAndOrientationManager.java (renamed from core/java/android/webkit/DeviceOrientationManager.java)8
-rwxr-xr-xcore/java/android/webkit/DeviceMotionService.java6
-rwxr-xr-xcore/java/android/webkit/DeviceOrientationService.java6
-rw-r--r--core/java/android/webkit/WebViewCore.java15
-rw-r--r--core/java/android/widget/ButtonGroup.java5
-rw-r--r--core/java/android/widget/StackView.java75
-rw-r--r--core/java/android/widget/TextView.java37
-rw-r--r--core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java (renamed from core/java/com/trustedlogic/trustednfc/android/LlcpConnectionlessSocket.java)28
-rw-r--r--core/java/com/android/internal/nfc/LlcpException.java (renamed from core/java/com/trustedlogic/trustednfc/android/LlcpException.java)11
-rw-r--r--core/java/com/android/internal/nfc/LlcpServiceSocket.java (renamed from core/java/com/trustedlogic/trustednfc/android/LlcpServiceSocket.java)23
-rw-r--r--core/java/com/android/internal/nfc/LlcpSocket.java (renamed from core/java/com/trustedlogic/trustednfc/android/LlcpSocket.java)31
-rw-r--r--core/java/com/android/internal/nfc/NfcException.java (renamed from core/java/com/trustedlogic/trustednfc/android/NfcException.java)11
-rw-r--r--core/java/com/android/internal/nfc/P2pDevice.java (renamed from core/java/com/trustedlogic/trustednfc/android/P2pDevice.java)12
-rw-r--r--core/java/com/android/internal/nfc/P2pInitiator.java (renamed from core/java/com/trustedlogic/trustednfc/android/P2pInitiator.java)12
-rw-r--r--core/java/com/android/internal/nfc/P2pTarget.java (renamed from core/java/com/trustedlogic/trustednfc/android/P2pTarget.java)17
-rw-r--r--core/java/com/android/internal/os/ZygoteInit.java2
-rw-r--r--core/java/com/android/internal/os/storage/ExternalStorageFormatter.java228
-rw-r--r--core/java/com/trustedlogic/trustednfc/android/package.html473
-rw-r--r--core/jni/android_media_AudioSystem.cpp4
-rw-r--r--core/jni/android_os_Debug.cpp16
-rw-r--r--core/res/AndroidManifest.xml43
-rw-r--r--core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.pngbin3283 -> 4951 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.pngbin3244 -> 5220 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_full_holo_dark.9.pngbin2842 -> 8974 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_full_holo_light.9.pngbin2835 -> 19481 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_dark.pngbin676 -> 676 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_light.pngbin675 -> 675 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_dark.pngbin337 -> 337 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_light.pngbin347 -> 347 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_dark.pngbin444 -> 444 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_light.pngbin496 -> 496 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.pngbin592 -> 1715 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_middle_holo_light.9.pngbin601 -> 1339 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_top_holo_dark.9.pngbin6121 -> 13835 bytes
-rw-r--r--core/res/res/drawable-hdpi/dialog_top_holo_light.9.pngbin6029 -> 13413 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.pngbin1572 -> 2932 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.pngbin1580 -> 3072 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_full_holo_dark.9.pngbin1423 -> 5215 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_full_holo_light.9.pngbin1419 -> 12512 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_dark.pngbin492 -> 492 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_light.pngbin481 -> 481 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_dark.pngbin310 -> 310 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_light.pngbin313 -> 313 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_dark.pngbin356 -> 356 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_light.pngbin393 -> 393 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.pngbin291 -> 1119 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_middle_holo_light.9.pngbin284 -> 932 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_top_holo_dark.9.pngbin2976 -> 9009 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_top_holo_light.9.pngbin2924 -> 8747 bytes
-rw-r--r--core/res/res/values/public.xml15
-rwxr-xr-xcore/res/res/values/strings.xml53
-rw-r--r--core/res/res/values/themes.xml2
-rw-r--r--include/ui/InputReader.h10
-rw-r--r--libs/hwui/Android.mk4
-rw-r--r--libs/hwui/Caches.h73
-rw-r--r--libs/hwui/Line.h8
-rw-r--r--libs/hwui/Matrix.cpp8
-rw-r--r--libs/hwui/OpenGLRenderer.cpp90
-rw-r--r--libs/hwui/OpenGLRenderer.h13
-rw-r--r--libs/hwui/Patch.cpp16
-rw-r--r--libs/hwui/Patch.h22
-rw-r--r--libs/hwui/PatchCache.cpp2
-rw-r--r--libs/hwui/PathCache.h12
-rw-r--r--libs/hwui/utils/Compare.h8
-rw-r--r--libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java1
-rw-r--r--libs/rs/java/tests/src/com/android/rs/test/UT_rsdebug.java40
-rw-r--r--libs/rs/java/tests/src/com/android/rs/test/rsdebug.rs58
-rw-r--r--libs/rs/rsScriptC_Lib.cpp19
-rw-r--r--libs/rs/scriptc/rs_core.rsh14
-rw-r--r--libs/rs/scriptc/rs_graphics.rsh3
-rw-r--r--libs/ui/InputDispatcher.cpp2
-rw-r--r--libs/ui/InputReader.cpp38
-rw-r--r--services/java/com/android/server/DevicePolicyManagerService.java20
-rw-r--r--services/java/com/android/server/MasterClearReceiver.java29
-rw-r--r--services/java/com/android/server/SystemServer.java3
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java3
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java16
-rwxr-xr-xtests/DumpRenderTree2/assets/run_apache2.py39
-rwxr-xr-xtests/DumpRenderTree2/assets/run_layout_tests.py34
-rw-r--r--tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java21
-rw-r--r--tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java5
96 files changed, 1230 insertions, 4481 deletions
diff --git a/Android.mk b/Android.mk
index febd02d..c71d72e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -375,6 +375,7 @@ framework_docs_LOCAL_DROIDDOC_OPTIONS := \
-since ./frameworks/base/api/6.xml 6 \
-since ./frameworks/base/api/7.xml 7 \
-since ./frameworks/base/api/8.xml 8 \
+ -since ./frameworks/base/api/9.xml 9 \
-since ./frameworks/base/api/current.xml HC \
-werror -hide 113 \
-overview $(LOCAL_PATH)/core/java/overview.html
diff --git a/api/current.xml b/api/current.xml
index b1f8f45..4e3dfc6 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -705,6 +705,17 @@
visibility="public"
>
</field>
+<field name="NFC"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.permission.NFC&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="PERSISTENT_ACTIVITY"
type="java.lang.String"
transient="false"
@@ -1486,7 +1497,7 @@
type="int"
transient="false"
volatile="false"
- value="17432609"
+ value="17432589"
static="true"
final="true"
deprecated="not deprecated"
@@ -1497,7 +1508,7 @@
type="int"
transient="false"
volatile="false"
- value="17432610"
+ value="17432590"
static="true"
final="true"
deprecated="not deprecated"
@@ -1581,226 +1592,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17432608"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17432599"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17432598"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="17432597"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="17432596"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="17432595"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad15"
- type="int"
- transient="false"
- volatile="false"
- value="17432594"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad16"
- type="int"
- transient="false"
- volatile="false"
- value="17432593"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad17"
- type="int"
- transient="false"
- volatile="false"
- value="17432592"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad18"
- type="int"
- transient="false"
- volatile="false"
- value="17432591"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad19"
- type="int"
- transient="false"
- volatile="false"
- value="17432590"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17432607"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad20"
- type="int"
- transient="false"
- volatile="false"
- value="17432589"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17432606"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17432605"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17432604"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17432603"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17432602"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17432601"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17432600"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="linear_interpolator"
type="int"
transient="false"
@@ -1884,138 +1675,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17235984"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17235975"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17235974"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="17235973"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17235983"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17235982"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17235981"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17235980"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17235979"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17235978"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17235977"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17235976"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="organizationTypes"
type="int"
transient="false"
@@ -2114,7 +1773,7 @@
type="int"
transient="false"
volatile="false"
- value="16843566"
+ value="16843511"
static="true"
final="true"
deprecated="not deprecated"
@@ -2125,7 +1784,7 @@
type="int"
transient="false"
volatile="false"
- value="16843535"
+ value="16843480"
static="true"
final="true"
deprecated="not deprecated"
@@ -2136,7 +1795,7 @@
type="int"
transient="false"
volatile="false"
- value="16843575"
+ value="16843520"
static="true"
final="true"
deprecated="not deprecated"
@@ -2147,7 +1806,7 @@
type="int"
transient="false"
volatile="false"
- value="16843574"
+ value="16843519"
static="true"
final="true"
deprecated="not deprecated"
@@ -2158,7 +1817,7 @@
type="int"
transient="false"
volatile="false"
- value="16843576"
+ value="16843521"
static="true"
final="true"
deprecated="not deprecated"
@@ -2169,7 +1828,7 @@
type="int"
transient="false"
volatile="false"
- value="16843545"
+ value="16843490"
static="true"
final="true"
deprecated="not deprecated"
@@ -2180,7 +1839,7 @@
type="int"
transient="false"
volatile="false"
- value="16843544"
+ value="16843489"
static="true"
final="true"
deprecated="not deprecated"
@@ -2191,7 +1850,7 @@
type="int"
transient="false"
volatile="false"
- value="16843582"
+ value="16843527"
static="true"
final="true"
deprecated="not deprecated"
@@ -2202,7 +1861,7 @@
type="int"
transient="false"
volatile="false"
- value="16843548"
+ value="16843493"
static="true"
final="true"
deprecated="not deprecated"
@@ -2213,7 +1872,7 @@
type="int"
transient="false"
volatile="false"
- value="16843578"
+ value="16843523"
static="true"
final="true"
deprecated="not deprecated"
@@ -2224,7 +1883,7 @@
type="int"
transient="false"
volatile="false"
- value="16843549"
+ value="16843494"
static="true"
final="true"
deprecated="not deprecated"
@@ -2235,7 +1894,7 @@
type="int"
transient="false"
volatile="false"
- value="16843602"
+ value="16843547"
static="true"
final="true"
deprecated="not deprecated"
@@ -2246,7 +1905,7 @@
type="int"
transient="false"
volatile="false"
- value="16843601"
+ value="16843546"
static="true"
final="true"
deprecated="not deprecated"
@@ -2257,7 +1916,7 @@
type="int"
transient="false"
volatile="false"
- value="16843603"
+ value="16843548"
static="true"
final="true"
deprecated="not deprecated"
@@ -2268,7 +1927,7 @@
type="int"
transient="false"
volatile="false"
- value="16843577"
+ value="16843522"
static="true"
final="true"
deprecated="not deprecated"
@@ -2279,7 +1938,7 @@
type="int"
transient="false"
volatile="false"
- value="16843583"
+ value="16843528"
static="true"
final="true"
deprecated="not deprecated"
@@ -2290,7 +1949,7 @@
type="int"
transient="false"
volatile="false"
- value="16843584"
+ value="16843529"
static="true"
final="true"
deprecated="not deprecated"
@@ -2345,7 +2004,7 @@
type="int"
transient="false"
volatile="false"
- value="16843521"
+ value="16843466"
static="true"
final="true"
deprecated="not deprecated"
@@ -2378,7 +2037,7 @@
type="int"
transient="false"
volatile="false"
- value="16843600"
+ value="16843545"
static="true"
final="true"
deprecated="not deprecated"
@@ -2400,7 +2059,7 @@
type="int"
transient="false"
volatile="false"
- value="16843596"
+ value="16843541"
static="true"
final="true"
deprecated="not deprecated"
@@ -2411,7 +2070,7 @@
type="int"
transient="false"
volatile="false"
- value="16843533"
+ value="16843478"
static="true"
final="true"
deprecated="not deprecated"
@@ -2510,7 +2169,7 @@
type="int"
transient="false"
volatile="false"
- value="16843542"
+ value="16843487"
static="true"
final="true"
deprecated="not deprecated"
@@ -2521,7 +2180,7 @@
type="int"
transient="false"
volatile="false"
- value="16843573"
+ value="16843518"
static="true"
final="true"
deprecated="not deprecated"
@@ -2620,7 +2279,7 @@
type="int"
transient="false"
volatile="false"
- value="16843527"
+ value="16843472"
static="true"
final="true"
deprecated="not deprecated"
@@ -2862,7 +2521,7 @@
type="int"
transient="false"
volatile="false"
- value="16843591"
+ value="16843536"
static="true"
final="true"
deprecated="not deprecated"
@@ -2873,7 +2532,7 @@
type="int"
transient="false"
volatile="false"
- value="16843590"
+ value="16843535"
static="true"
final="true"
deprecated="not deprecated"
@@ -2906,7 +2565,7 @@
type="int"
transient="false"
volatile="false"
- value="16843599"
+ value="16843544"
static="true"
final="true"
deprecated="not deprecated"
@@ -3324,7 +2983,7 @@
type="int"
transient="false"
volatile="false"
- value="16843530"
+ value="16843475"
static="true"
final="true"
deprecated="not deprecated"
@@ -3478,7 +3137,7 @@
type="int"
transient="false"
volatile="false"
- value="16843539"
+ value="16843484"
static="true"
final="true"
deprecated="not deprecated"
@@ -3687,7 +3346,7 @@
type="int"
transient="false"
volatile="false"
- value="16843595"
+ value="16843540"
static="true"
final="true"
deprecated="not deprecated"
@@ -3764,7 +3423,7 @@
type="int"
transient="false"
volatile="false"
- value="16843537"
+ value="16843482"
static="true"
final="true"
deprecated="not deprecated"
@@ -3808,7 +3467,7 @@
type="int"
transient="false"
volatile="false"
- value="16843598"
+ value="16843543"
static="true"
final="true"
deprecated="not deprecated"
@@ -3984,7 +3643,7 @@
type="int"
transient="false"
volatile="false"
- value="16843543"
+ value="16843488"
static="true"
final="true"
deprecated="not deprecated"
@@ -4556,7 +4215,7 @@
type="int"
transient="false"
volatile="false"
- value="16843556"
+ value="16843501"
static="true"
final="true"
deprecated="not deprecated"
@@ -4567,7 +4226,7 @@
type="int"
transient="false"
volatile="false"
- value="16843560"
+ value="16843505"
static="true"
final="true"
deprecated="not deprecated"
@@ -4578,7 +4237,7 @@
type="int"
transient="false"
volatile="false"
- value="16843561"
+ value="16843506"
static="true"
final="true"
deprecated="not deprecated"
@@ -4589,7 +4248,7 @@
type="int"
transient="false"
volatile="false"
- value="16843562"
+ value="16843507"
static="true"
final="true"
deprecated="not deprecated"
@@ -4600,7 +4259,7 @@
type="int"
transient="false"
volatile="false"
- value="16843563"
+ value="16843508"
static="true"
final="true"
deprecated="not deprecated"
@@ -4611,7 +4270,7 @@
type="int"
transient="false"
volatile="false"
- value="16843558"
+ value="16843503"
static="true"
final="true"
deprecated="not deprecated"
@@ -4622,7 +4281,7 @@
type="int"
transient="false"
volatile="false"
- value="16843559"
+ value="16843504"
static="true"
final="true"
deprecated="not deprecated"
@@ -4633,7 +4292,7 @@
type="int"
transient="false"
volatile="false"
- value="16843564"
+ value="16843509"
static="true"
final="true"
deprecated="not deprecated"
@@ -4644,7 +4303,7 @@
type="int"
transient="false"
volatile="false"
- value="16843565"
+ value="16843510"
static="true"
final="true"
deprecated="not deprecated"
@@ -4666,7 +4325,7 @@
type="int"
transient="false"
volatile="false"
- value="16843525"
+ value="16843470"
static="true"
final="true"
deprecated="not deprecated"
@@ -4699,7 +4358,7 @@
type="int"
transient="false"
volatile="false"
- value="16843528"
+ value="16843473"
static="true"
final="true"
deprecated="not deprecated"
@@ -4996,7 +4655,7 @@
type="int"
transient="false"
volatile="false"
- value="16843540"
+ value="16843485"
static="true"
final="true"
deprecated="not deprecated"
@@ -5128,7 +4787,7 @@
type="int"
transient="false"
volatile="false"
- value="16843581"
+ value="16843526"
static="true"
final="true"
deprecated="not deprecated"
@@ -5249,7 +4908,7 @@
type="int"
transient="false"
volatile="false"
- value="16843569"
+ value="16843514"
static="true"
final="true"
deprecated="not deprecated"
@@ -5260,7 +4919,7 @@
type="int"
transient="false"
volatile="false"
- value="16843567"
+ value="16843512"
static="true"
final="true"
deprecated="not deprecated"
@@ -5271,7 +4930,7 @@
type="int"
transient="false"
volatile="false"
- value="16843568"
+ value="16843513"
static="true"
final="true"
deprecated="not deprecated"
@@ -5828,611 +5487,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="16843520"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="16843511"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="16843510"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="16843509"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="16843508"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="16843507"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad15"
- type="int"
- transient="false"
- volatile="false"
- value="16843506"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad16"
- type="int"
- transient="false"
- volatile="false"
- value="16843505"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad17"
- type="int"
- transient="false"
- volatile="false"
- value="16843504"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad18"
- type="int"
- transient="false"
- volatile="false"
- value="16843503"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad19"
- type="int"
- transient="false"
- volatile="false"
- value="16843502"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="16843519"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad20"
- type="int"
- transient="false"
- volatile="false"
- value="16843501"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad21"
- type="int"
- transient="false"
- volatile="false"
- value="16843500"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad22"
- type="int"
- transient="false"
- volatile="false"
- value="16843499"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad23"
- type="int"
- transient="false"
- volatile="false"
- value="16843498"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad24"
- type="int"
- transient="false"
- volatile="false"
- value="16843497"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad25"
- type="int"
- transient="false"
- volatile="false"
- value="16843496"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad26"
- type="int"
- transient="false"
- volatile="false"
- value="16843495"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad27"
- type="int"
- transient="false"
- volatile="false"
- value="16843494"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad28"
- type="int"
- transient="false"
- volatile="false"
- value="16843493"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad29"
- type="int"
- transient="false"
- volatile="false"
- value="16843492"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="16843518"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad30"
- type="int"
- transient="false"
- volatile="false"
- value="16843491"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad31"
- type="int"
- transient="false"
- volatile="false"
- value="16843490"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad32"
- type="int"
- transient="false"
- volatile="false"
- value="16843489"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad33"
- type="int"
- transient="false"
- volatile="false"
- value="16843488"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad34"
- type="int"
- transient="false"
- volatile="false"
- value="16843487"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad35"
- type="int"
- transient="false"
- volatile="false"
- value="16843486"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad36"
- type="int"
- transient="false"
- volatile="false"
- value="16843485"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad37"
- type="int"
- transient="false"
- volatile="false"
- value="16843484"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad38"
- type="int"
- transient="false"
- volatile="false"
- value="16843483"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad39"
- type="int"
- transient="false"
- volatile="false"
- value="16843482"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="16843517"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad40"
- type="int"
- transient="false"
- volatile="false"
- value="16843481"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad41"
- type="int"
- transient="false"
- volatile="false"
- value="16843480"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad42"
- type="int"
- transient="false"
- volatile="false"
- value="16843479"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad43"
- type="int"
- transient="false"
- volatile="false"
- value="16843478"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad44"
- type="int"
- transient="false"
- volatile="false"
- value="16843477"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad45"
- type="int"
- transient="false"
- volatile="false"
- value="16843476"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad46"
- type="int"
- transient="false"
- volatile="false"
- value="16843475"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad47"
- type="int"
- transient="false"
- volatile="false"
- value="16843474"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad48"
- type="int"
- transient="false"
- volatile="false"
- value="16843473"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad49"
- type="int"
- transient="false"
- volatile="false"
- value="16843472"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="16843516"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad50"
- type="int"
- transient="false"
- volatile="false"
- value="16843471"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad51"
- type="int"
- transient="false"
- volatile="false"
- value="16843470"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad52"
- type="int"
- transient="false"
- volatile="false"
- value="16843469"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad53"
- type="int"
- transient="false"
- volatile="false"
- value="16843468"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad54"
- type="int"
- transient="false"
- volatile="false"
- value="16843467"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad55"
- type="int"
- transient="false"
- volatile="false"
- value="16843466"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="16843515"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="16843514"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="16843513"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="16843512"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="label"
type="int"
transient="false"
@@ -6899,7 +5953,7 @@
type="int"
transient="false"
volatile="false"
- value="16843571"
+ value="16843516"
static="true"
final="true"
deprecated="not deprecated"
@@ -6943,7 +5997,7 @@
type="int"
transient="false"
volatile="false"
- value="16843592"
+ value="16843537"
static="true"
final="true"
deprecated="not deprecated"
@@ -6954,7 +6008,7 @@
type="int"
transient="false"
volatile="false"
- value="16843586"
+ value="16843531"
static="true"
final="true"
deprecated="not deprecated"
@@ -7042,7 +6096,7 @@
type="int"
transient="false"
volatile="false"
- value="16843594"
+ value="16843539"
static="true"
final="true"
deprecated="not deprecated"
@@ -7207,7 +6261,7 @@
type="int"
transient="false"
volatile="false"
- value="16843541"
+ value="16843486"
static="true"
final="true"
deprecated="not deprecated"
@@ -7350,7 +6404,7 @@
type="int"
transient="false"
volatile="false"
- value="16843536"
+ value="16843481"
static="true"
final="true"
deprecated="not deprecated"
@@ -7526,7 +6580,7 @@
type="int"
transient="false"
volatile="false"
- value="16843555"
+ value="16843500"
static="true"
final="true"
deprecated="not deprecated"
@@ -7856,7 +6910,7 @@
type="int"
transient="false"
volatile="false"
- value="16843587"
+ value="16843532"
static="true"
final="true"
deprecated="not deprecated"
@@ -7955,7 +7009,7 @@
type="int"
transient="false"
volatile="false"
- value="16843547"
+ value="16843492"
static="true"
final="true"
deprecated="not deprecated"
@@ -8120,7 +7174,7 @@
type="int"
transient="false"
volatile="false"
- value="16843554"
+ value="16843499"
static="true"
final="true"
deprecated="not deprecated"
@@ -8901,7 +7955,7 @@
type="int"
transient="false"
volatile="false"
- value="16843522"
+ value="16843467"
static="true"
final="true"
deprecated="not deprecated"
@@ -9022,7 +8076,7 @@
type="int"
transient="false"
volatile="false"
- value="16843546"
+ value="16843491"
static="true"
final="true"
deprecated="not deprecated"
@@ -9110,7 +8164,7 @@
type="int"
transient="false"
volatile="false"
- value="16843523"
+ value="16843468"
static="true"
final="true"
deprecated="not deprecated"
@@ -9165,7 +8219,7 @@
type="int"
transient="false"
volatile="false"
- value="16843572"
+ value="16843517"
static="true"
final="true"
deprecated="not deprecated"
@@ -9187,7 +8241,7 @@
type="int"
transient="false"
volatile="false"
- value="16843570"
+ value="16843515"
static="true"
final="true"
deprecated="not deprecated"
@@ -9286,7 +8340,7 @@
type="int"
transient="false"
volatile="false"
- value="16843585"
+ value="16843530"
static="true"
final="true"
deprecated="not deprecated"
@@ -9506,7 +8560,7 @@
type="int"
transient="false"
volatile="false"
- value="16843538"
+ value="16843483"
static="true"
final="true"
deprecated="not deprecated"
@@ -9517,7 +8571,7 @@
type="int"
transient="false"
volatile="false"
- value="16843580"
+ value="16843525"
static="true"
final="true"
deprecated="not deprecated"
@@ -9902,7 +8956,7 @@
type="int"
transient="false"
volatile="false"
- value="16843588"
+ value="16843533"
static="true"
final="true"
deprecated="not deprecated"
@@ -9979,7 +9033,7 @@
type="int"
transient="false"
volatile="false"
- value="16843589"
+ value="16843534"
static="true"
final="true"
deprecated="not deprecated"
@@ -10023,7 +9077,7 @@
type="int"
transient="false"
volatile="false"
- value="16843593"
+ value="16843538"
static="true"
final="true"
deprecated="not deprecated"
@@ -10221,7 +9275,7 @@
type="int"
transient="false"
volatile="false"
- value="16843597"
+ value="16843542"
static="true"
final="true"
deprecated="not deprecated"
@@ -10452,7 +9506,7 @@
type="int"
transient="false"
volatile="false"
- value="16843579"
+ value="16843524"
static="true"
final="true"
deprecated="not deprecated"
@@ -10463,7 +9517,7 @@
type="int"
transient="false"
volatile="false"
- value="16843526"
+ value="16843471"
static="true"
final="true"
deprecated="not deprecated"
@@ -10496,7 +9550,7 @@
type="int"
transient="false"
volatile="false"
- value="16843529"
+ value="16843474"
static="true"
final="true"
deprecated="not deprecated"
@@ -10683,7 +9737,7 @@
type="int"
transient="false"
volatile="false"
- value="16843524"
+ value="16843469"
static="true"
final="true"
deprecated="not deprecated"
@@ -10727,7 +9781,7 @@
type="int"
transient="false"
volatile="false"
- value="16843551"
+ value="16843496"
static="true"
final="true"
deprecated="not deprecated"
@@ -10738,7 +9792,7 @@
type="int"
transient="false"
volatile="false"
- value="16843552"
+ value="16843497"
static="true"
final="true"
deprecated="not deprecated"
@@ -10749,7 +9803,7 @@
type="int"
transient="false"
volatile="false"
- value="16843553"
+ value="16843498"
static="true"
final="true"
deprecated="not deprecated"
@@ -11068,7 +10122,7 @@
type="int"
transient="false"
volatile="false"
- value="16843534"
+ value="16843479"
static="true"
final="true"
deprecated="not deprecated"
@@ -11079,7 +10133,7 @@
type="int"
transient="false"
volatile="false"
- value="16843557"
+ value="16843502"
static="true"
final="true"
deprecated="not deprecated"
@@ -11090,7 +10144,7 @@
type="int"
transient="false"
volatile="false"
- value="16843550"
+ value="16843495"
static="true"
final="true"
deprecated="not deprecated"
@@ -11310,7 +10364,7 @@
type="int"
transient="false"
volatile="false"
- value="16843532"
+ value="16843477"
static="true"
final="true"
deprecated="not deprecated"
@@ -11321,7 +10375,7 @@
type="int"
transient="false"
volatile="false"
- value="16843531"
+ value="16843476"
static="true"
final="true"
deprecated="not deprecated"
@@ -11472,171 +10526,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17170464"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17170455"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17170454"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="17170453"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="17170452"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="17170451"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad15"
- type="int"
- transient="false"
- volatile="false"
- value="17170450"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17170463"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17170462"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17170461"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17170460"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17170459"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17170458"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17170457"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17170456"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="primary_text_dark"
type="int"
transient="false"
@@ -11819,160 +10708,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17104912"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17104903"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17104902"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="17104901"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="17104900"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="17104899"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17104911"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17104910"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17104909"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17104908"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17104907"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17104906"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17104905"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17104904"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="thumbnail_height"
type="int"
transient="false"
@@ -13156,875 +11891,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17301760"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17301751"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17301750"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="17301749"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="17301748"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="17301747"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad15"
- type="int"
- transient="false"
- volatile="false"
- value="17301746"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad16"
- type="int"
- transient="false"
- volatile="false"
- value="17301745"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad17"
- type="int"
- transient="false"
- volatile="false"
- value="17301744"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad18"
- type="int"
- transient="false"
- volatile="false"
- value="17301743"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad19"
- type="int"
- transient="false"
- volatile="false"
- value="17301742"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17301759"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad20"
- type="int"
- transient="false"
- volatile="false"
- value="17301741"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad21"
- type="int"
- transient="false"
- volatile="false"
- value="17301740"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad22"
- type="int"
- transient="false"
- volatile="false"
- value="17301739"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad23"
- type="int"
- transient="false"
- volatile="false"
- value="17301738"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad24"
- type="int"
- transient="false"
- volatile="false"
- value="17301737"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad25"
- type="int"
- transient="false"
- volatile="false"
- value="17301736"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad26"
- type="int"
- transient="false"
- volatile="false"
- value="17301735"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad27"
- type="int"
- transient="false"
- volatile="false"
- value="17301734"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad28"
- type="int"
- transient="false"
- volatile="false"
- value="17301733"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad29"
- type="int"
- transient="false"
- volatile="false"
- value="17301732"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17301758"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad30"
- type="int"
- transient="false"
- volatile="false"
- value="17301731"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad31"
- type="int"
- transient="false"
- volatile="false"
- value="17301730"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad32"
- type="int"
- transient="false"
- volatile="false"
- value="17301729"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad33"
- type="int"
- transient="false"
- volatile="false"
- value="17301728"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad34"
- type="int"
- transient="false"
- volatile="false"
- value="17301727"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad35"
- type="int"
- transient="false"
- volatile="false"
- value="17301726"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad36"
- type="int"
- transient="false"
- volatile="false"
- value="17301725"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad37"
- type="int"
- transient="false"
- volatile="false"
- value="17301724"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad38"
- type="int"
- transient="false"
- volatile="false"
- value="17301723"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad39"
- type="int"
- transient="false"
- volatile="false"
- value="17301722"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17301757"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad40"
- type="int"
- transient="false"
- volatile="false"
- value="17301721"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad41"
- type="int"
- transient="false"
- volatile="false"
- value="17301720"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad42"
- type="int"
- transient="false"
- volatile="false"
- value="17301719"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad43"
- type="int"
- transient="false"
- volatile="false"
- value="17301718"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad44"
- type="int"
- transient="false"
- volatile="false"
- value="17301717"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad45"
- type="int"
- transient="false"
- volatile="false"
- value="17301716"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad46"
- type="int"
- transient="false"
- volatile="false"
- value="17301715"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad47"
- type="int"
- transient="false"
- volatile="false"
- value="17301714"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad48"
- type="int"
- transient="false"
- volatile="false"
- value="17301713"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad49"
- type="int"
- transient="false"
- volatile="false"
- value="17301712"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17301756"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad50"
- type="int"
- transient="false"
- volatile="false"
- value="17301711"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad51"
- type="int"
- transient="false"
- volatile="false"
- value="17301710"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad52"
- type="int"
- transient="false"
- volatile="false"
- value="17301709"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad53"
- type="int"
- transient="false"
- volatile="false"
- value="17301708"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad54"
- type="int"
- transient="false"
- volatile="false"
- value="17301707"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad55"
- type="int"
- transient="false"
- volatile="false"
- value="17301706"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad56"
- type="int"
- transient="false"
- volatile="false"
- value="17301705"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad57"
- type="int"
- transient="false"
- volatile="false"
- value="17301704"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad58"
- type="int"
- transient="false"
- volatile="false"
- value="17301703"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad59"
- type="int"
- transient="false"
- volatile="false"
- value="17301702"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17301755"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad60"
- type="int"
- transient="false"
- volatile="false"
- value="17301701"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad61"
- type="int"
- transient="false"
- volatile="false"
- value="17301700"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad62"
- type="int"
- transient="false"
- volatile="false"
- value="17301699"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad63"
- type="int"
- transient="false"
- volatile="false"
- value="17301698"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad64"
- type="int"
- transient="false"
- volatile="false"
- value="17301697"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad65"
- type="int"
- transient="false"
- volatile="false"
- value="17301696"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad66"
- type="int"
- transient="false"
- volatile="false"
- value="17301695"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad67"
- type="int"
- transient="false"
- volatile="false"
- value="17301694"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad68"
- type="int"
- transient="false"
- volatile="false"
- value="17301693"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad69"
- type="int"
- transient="false"
- volatile="false"
- value="17301692"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17301754"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad70"
- type="int"
- transient="false"
- volatile="false"
- value="17301691"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad71"
- type="int"
- transient="false"
- volatile="false"
- value="17301690"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad72"
- type="int"
- transient="false"
- volatile="false"
- value="17301689"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad73"
- type="int"
- transient="false"
- volatile="false"
- value="17301688"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad74"
- type="int"
- transient="false"
- volatile="false"
- value="17301687"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad75"
- type="int"
- transient="false"
- volatile="false"
- value="17301686"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad76"
- type="int"
- transient="false"
- volatile="false"
- value="17301685"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad77"
- type="int"
- transient="false"
- volatile="false"
- value="17301684"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad78"
- type="int"
- transient="false"
- volatile="false"
- value="17301683"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad79"
- type="int"
- transient="false"
- volatile="false"
- value="17301682"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17301753"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17301752"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="list_selector_background"
type="int"
transient="false"
@@ -14981,7 +12847,7 @@
type="int"
transient="false"
volatile="false"
- value="16908353"
+ value="16908332"
static="true"
final="true"
deprecated="not deprecated"
@@ -15065,237 +12931,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="16908352"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="16908343"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="16908342"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="16908341"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="16908340"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="16908339"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad15"
- type="int"
- transient="false"
- volatile="false"
- value="16908338"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad16"
- type="int"
- transient="false"
- volatile="false"
- value="16908337"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad17"
- type="int"
- transient="false"
- volatile="false"
- value="16908336"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad18"
- type="int"
- transient="false"
- volatile="false"
- value="16908335"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad19"
- type="int"
- transient="false"
- volatile="false"
- value="16908334"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="16908351"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad20"
- type="int"
- transient="false"
- volatile="false"
- value="16908333"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad21"
- type="int"
- transient="false"
- volatile="false"
- value="16908332"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="16908350"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="16908349"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="16908348"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="16908347"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="16908346"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="16908345"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="16908344"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="list"
type="int"
transient="false"
@@ -15377,7 +13012,7 @@
type="int"
transient="false"
volatile="false"
- value="16908354"
+ value="16908333"
static="true"
final="true"
deprecated="not deprecated"
@@ -15577,160 +13212,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17694736"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17694727"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17694726"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="17694725"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="17694724"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="17694723"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17694735"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17694734"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17694733"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17694732"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17694731"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17694730"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17694729"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17694728"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
</class>
<class name="R.layout"
extends="java.lang.Object"
@@ -15781,154 +13262,11 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17367072"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17367063"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17367062"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="17367061"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="17367060"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17367071"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17367070"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17367069"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17367068"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17367067"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17367066"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17367065"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17367064"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="list_content"
type="int"
transient="false"
volatile="false"
- value="17367073"
+ value="17367060"
static="true"
final="true"
deprecated="not deprecated"
@@ -16049,7 +13387,7 @@
type="int"
transient="false"
volatile="false"
- value="17367075"
+ value="17367062"
static="true"
final="true"
deprecated="not deprecated"
@@ -16060,7 +13398,7 @@
type="int"
transient="false"
volatile="false"
- value="17367076"
+ value="17367063"
static="true"
final="true"
deprecated="not deprecated"
@@ -16104,7 +13442,7 @@
type="int"
transient="false"
volatile="false"
- value="17367074"
+ value="17367061"
static="true"
final="true"
deprecated="not deprecated"
@@ -16377,127 +13715,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="17039392"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="17039383"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="17039382"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="17039391"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="17039390"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="17039389"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="17039388"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="17039387"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="17039386"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="17039385"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="17039384"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="no"
type="int"
transient="false"
@@ -16557,7 +13774,7 @@
type="int"
transient="false"
volatile="false"
- value="17039393"
+ value="17039382"
static="true"
final="true"
deprecated="not deprecated"
@@ -16992,7 +14209,7 @@
type="int"
transient="false"
volatile="false"
- value="16973987"
+ value="16973947"
static="true"
final="true"
deprecated="not deprecated"
@@ -17003,7 +14220,7 @@
type="int"
transient="false"
volatile="false"
- value="16973988"
+ value="16973948"
static="true"
final="true"
deprecated="not deprecated"
@@ -17124,7 +14341,7 @@
type="int"
transient="false"
volatile="false"
- value="16973972"
+ value="16973932"
static="true"
final="true"
deprecated="not deprecated"
@@ -17135,7 +14352,7 @@
type="int"
transient="false"
volatile="false"
- value="16973974"
+ value="16973934"
static="true"
final="true"
deprecated="not deprecated"
@@ -17146,7 +14363,7 @@
type="int"
transient="false"
volatile="false"
- value="16973981"
+ value="16973941"
static="true"
final="true"
deprecated="not deprecated"
@@ -17157,7 +14374,7 @@
type="int"
transient="false"
volatile="false"
- value="16973980"
+ value="16973940"
static="true"
final="true"
deprecated="not deprecated"
@@ -17168,7 +14385,7 @@
type="int"
transient="false"
volatile="false"
- value="16973982"
+ value="16973942"
static="true"
final="true"
deprecated="not deprecated"
@@ -17179,7 +14396,7 @@
type="int"
transient="false"
volatile="false"
- value="16973976"
+ value="16973936"
static="true"
final="true"
deprecated="not deprecated"
@@ -17190,7 +14407,7 @@
type="int"
transient="false"
volatile="false"
- value="16973977"
+ value="16973937"
static="true"
final="true"
deprecated="not deprecated"
@@ -17223,7 +14440,7 @@
type="int"
transient="false"
volatile="false"
- value="16973975"
+ value="16973935"
static="true"
final="true"
deprecated="not deprecated"
@@ -17234,7 +14451,7 @@
type="int"
transient="false"
volatile="false"
- value="16973978"
+ value="16973938"
static="true"
final="true"
deprecated="not deprecated"
@@ -17245,7 +14462,7 @@
type="int"
transient="false"
volatile="false"
- value="16973979"
+ value="16973939"
static="true"
final="true"
deprecated="not deprecated"
@@ -17333,7 +14550,7 @@
type="int"
transient="false"
volatile="false"
- value="16973973"
+ value="16973933"
static="true"
final="true"
deprecated="not deprecated"
@@ -17432,7 +14649,7 @@
type="int"
transient="false"
volatile="false"
- value="16973969"
+ value="16973929"
static="true"
final="true"
deprecated="not deprecated"
@@ -17465,7 +14682,7 @@
type="int"
transient="false"
volatile="false"
- value="16973971"
+ value="16973931"
static="true"
final="true"
deprecated="not deprecated"
@@ -17476,7 +14693,7 @@
type="int"
transient="false"
volatile="false"
- value="16973986"
+ value="16973946"
static="true"
final="true"
deprecated="not deprecated"
@@ -17487,7 +14704,7 @@
type="int"
transient="false"
volatile="false"
- value="16973985"
+ value="16973945"
static="true"
final="true"
deprecated="not deprecated"
@@ -17641,7 +14858,7 @@
type="int"
transient="false"
volatile="false"
- value="16973989"
+ value="16973949"
static="true"
final="true"
deprecated="not deprecated"
@@ -17707,7 +14924,7 @@
type="int"
transient="false"
volatile="false"
- value="16973983"
+ value="16973943"
static="true"
final="true"
deprecated="not deprecated"
@@ -17762,7 +14979,7 @@
type="int"
transient="false"
volatile="false"
- value="16973984"
+ value="16973944"
static="true"
final="true"
deprecated="not deprecated"
@@ -17905,7 +15122,7 @@
type="int"
transient="false"
volatile="false"
- value="16973970"
+ value="16973930"
static="true"
final="true"
deprecated="not deprecated"
@@ -17967,446 +15184,6 @@
visibility="public"
>
</field>
-<field name="kraken_resource_pad1"
- type="int"
- transient="false"
- volatile="false"
- value="16973968"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad10"
- type="int"
- transient="false"
- volatile="false"
- value="16973959"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad11"
- type="int"
- transient="false"
- volatile="false"
- value="16973958"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad12"
- type="int"
- transient="false"
- volatile="false"
- value="16973957"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad13"
- type="int"
- transient="false"
- volatile="false"
- value="16973956"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad14"
- type="int"
- transient="false"
- volatile="false"
- value="16973955"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad15"
- type="int"
- transient="false"
- volatile="false"
- value="16973954"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad16"
- type="int"
- transient="false"
- volatile="false"
- value="16973953"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad17"
- type="int"
- transient="false"
- volatile="false"
- value="16973952"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad18"
- type="int"
- transient="false"
- volatile="false"
- value="16973951"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad19"
- type="int"
- transient="false"
- volatile="false"
- value="16973950"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad2"
- type="int"
- transient="false"
- volatile="false"
- value="16973967"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad20"
- type="int"
- transient="false"
- volatile="false"
- value="16973949"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad21"
- type="int"
- transient="false"
- volatile="false"
- value="16973948"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad22"
- type="int"
- transient="false"
- volatile="false"
- value="16973947"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad23"
- type="int"
- transient="false"
- volatile="false"
- value="16973946"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad24"
- type="int"
- transient="false"
- volatile="false"
- value="16973945"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad25"
- type="int"
- transient="false"
- volatile="false"
- value="16973944"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad26"
- type="int"
- transient="false"
- volatile="false"
- value="16973943"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad27"
- type="int"
- transient="false"
- volatile="false"
- value="16973942"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad28"
- type="int"
- transient="false"
- volatile="false"
- value="16973941"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad29"
- type="int"
- transient="false"
- volatile="false"
- value="16973940"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad3"
- type="int"
- transient="false"
- volatile="false"
- value="16973966"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad30"
- type="int"
- transient="false"
- volatile="false"
- value="16973939"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad31"
- type="int"
- transient="false"
- volatile="false"
- value="16973938"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad32"
- type="int"
- transient="false"
- volatile="false"
- value="16973937"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad33"
- type="int"
- transient="false"
- volatile="false"
- value="16973936"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad34"
- type="int"
- transient="false"
- volatile="false"
- value="16973935"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad35"
- type="int"
- transient="false"
- volatile="false"
- value="16973934"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad36"
- type="int"
- transient="false"
- volatile="false"
- value="16973933"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad37"
- type="int"
- transient="false"
- volatile="false"
- value="16973932"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad38"
- type="int"
- transient="false"
- volatile="false"
- value="16973931"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad39"
- type="int"
- transient="false"
- volatile="false"
- value="16973930"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad4"
- type="int"
- transient="false"
- volatile="false"
- value="16973965"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad40"
- type="int"
- transient="false"
- volatile="false"
- value="16973929"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad5"
- type="int"
- transient="false"
- volatile="false"
- value="16973964"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad6"
- type="int"
- transient="false"
- volatile="false"
- value="16973963"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad7"
- type="int"
- transient="false"
- volatile="false"
- value="16973962"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad8"
- type="int"
- transient="false"
- volatile="false"
- value="16973961"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="kraken_resource_pad9"
- type="int"
- transient="false"
- volatile="false"
- value="16973960"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
</class>
<class name="R.xml"
extends="java.lang.Object"
@@ -37902,6 +34679,17 @@
visibility="public"
>
</field>
+<field name="WIPE_EXTERNAL_STORAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
</class>
</package>
<package name="android.app.backup"
@@ -136191,7 +132979,7 @@
type="int"
transient="false"
volatile="false"
- value="10000"
+ value="9"
static="true"
final="true"
deprecated="not deprecated"
@@ -230661,192 +227449,6 @@
</parameter>
</constructor>
</class>
-<class name="ButtonGroup"
- extends="android.widget.LinearLayout"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="ButtonGroup"
- type="android.widget.ButtonGroup"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="context" type="android.content.Context">
-</parameter>
-</constructor>
-<constructor name="ButtonGroup"
- type="android.widget.ButtonGroup"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="context" type="android.content.Context">
-</parameter>
-<parameter name="attrs" type="android.util.AttributeSet">
-</parameter>
-</constructor>
-<constructor name="ButtonGroup"
- type="android.widget.ButtonGroup"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="context" type="android.content.Context">
-</parameter>
-<parameter name="attrs" type="android.util.AttributeSet">
-</parameter>
-<parameter name="defStyleRes" type="int">
-</parameter>
-</constructor>
-<method name="dispatchDraw"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="canvas" type="android.graphics.Canvas">
-</parameter>
-</method>
-<method name="getDividerDrawable"
- return="android.graphics.drawable.Drawable"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getShowDividers"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="onLayout"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="changed" type="boolean">
-</parameter>
-<parameter name="l" type="int">
-</parameter>
-<parameter name="t" type="int">
-</parameter>
-<parameter name="r" type="int">
-</parameter>
-<parameter name="b" type="int">
-</parameter>
-</method>
-<method name="onMeasure"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="widthMeasureSpec" type="int">
-</parameter>
-<parameter name="heightMeasureSpec" type="int">
-</parameter>
-</method>
-<method name="setDividerDrawable"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="divider" type="android.graphics.drawable.Drawable">
-</parameter>
-</method>
-<method name="setShowDividers"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="showDividers" type="int">
-</parameter>
-</method>
-<field name="SHOW_DIVIDER_BEGINNING"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="SHOW_DIVIDER_END"
- type="int"
- transient="false"
- volatile="false"
- value="4"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="SHOW_DIVIDER_MIDDLE"
- type="int"
- transient="false"
- volatile="false"
- value="2"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="SHOW_DIVIDER_NONE"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-</class>
<class name="CheckBox"
extends="android.widget.CompoundButton"
abstract="false"
@@ -247439,7 +244041,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="t" type="T">
+<parameter name="arg0" type="T">
</parameter>
</method>
</interface>
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 4736404..5ae8a1f 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -763,6 +763,13 @@ public class ActivityManager {
public static final int FLAG_CANT_SAVE_STATE = 1<<0;
/**
+ * Constant for {@link #flags}: this process is associated with a
+ * persistent system app.
+ * @hide
+ */
+ public static final int FLAG_PERSISTENT = 1<<1;
+
+ /**
* Flags of information. May be any of
* {@link #FLAG_CANT_SAVE_STATE}.
* @hide
diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java
index 4a629bb..ac3ca55 100644
--- a/core/java/android/app/AlertDialog.java
+++ b/core/java/android/app/AlertDialog.java
@@ -28,6 +28,7 @@ import android.util.Log;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
+import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
@@ -81,6 +82,24 @@ public class AlertDialog extends Dialog implements DialogInterface {
return outValue.resourceId;
}
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (mCancelable) {
+ final View decor = mWindow.getDecorView();
+ final int width = decor.getWidth();
+ final int height = decor.getHeight();
+ final float x = ev.getX();
+ final float y = ev.getY();
+
+ if (mCancelable && (x < 0 || x > width || y < 0 || y > height)) {
+ cancel();
+ return true;
+ }
+ }
+
+ return super.onTouchEvent(ev);
+ }
+
/**
* Gets one of the buttons used in the dialog.
* <p>
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 2b7e427..ca27010 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -896,6 +896,12 @@ public class DevicePolicyManager {
}
/**
+ * Flag for {@link #wipeData(int)}: also erase the device's external
+ * storage.
+ */
+ public static final int WIPE_EXTERNAL_STORAGE = 0x0001;
+
+ /**
* Ask the user date be wiped. This will cause the device to reboot,
* erasing all user data while next booting up. External storage such
* as SD cards will not be erased.
diff --git a/core/java/android/nfc/NdefRecord.java b/core/java/android/nfc/NdefRecord.java
index c65dd66..23fd2ca 100644
--- a/core/java/android/nfc/NdefRecord.java
+++ b/core/java/android/nfc/NdefRecord.java
@@ -168,6 +168,10 @@ public class NdefRecord implements Parcelable {
throw new IllegalArgumentException("Illegal null argument");
}
+ if (tnf < 0 || tnf > 0x07) {
+ throw new IllegalArgumentException("TNF out of range " + tnf);
+ }
+
/* generate flag */
byte flags = FLAG_MB | FLAG_ME;
diff --git a/core/java/android/nfc/NdefTag.java b/core/java/android/nfc/NdefTag.java
index 6d44e6e..45cdc31 100644
--- a/core/java/android/nfc/NdefTag.java
+++ b/core/java/android/nfc/NdefTag.java
@@ -16,6 +16,8 @@
package android.nfc;
+import java.util.HashMap;
+
import android.os.Parcel;
import android.os.Parcelable;
@@ -41,8 +43,8 @@ public class NdefTag extends Tag implements Parcelable {
* tag is discovered and by Parcelable methods.
* @hide
*/
- public NdefTag(int type, byte[] uid, int nativeHandle, NdefMessage[] messages) {
- super(type, true, uid, nativeHandle);
+ public NdefTag(String typeName, byte[] uid, int nativeHandle, NdefMessage[] messages) {
+ super(typeName, true, uid, nativeHandle);
mMessages = messages.clone();
}
@@ -62,10 +64,22 @@ public class NdefTag extends Tag implements Parcelable {
/**
* Get only the NDEF Messages from a single NDEF target on a tag.
+ * <p>
+ * This retrieves the NDEF Messages that were found on the Tag at discovery
+ * time. It does not cause any further RF activity, and does not block.
+ * <p>
+ * Most tags only contain a single NDEF message.
+ *
+ * @param target One of targets strings provided by getNdefTargets()
+ * @return NDEF Messages found at Tag discovery
*/
public NdefMessage[] getNdefMessages(String target) {
- //TODO(nxp): new api method
- throw new UnsupportedOperationException();
+ // TODO: handle multiprotocol
+ String[] localTypes = convertToNdefType(mTypeName);
+ if (!target.equals(localTypes[0])) {
+ throw new IllegalArgumentException();
+ }
+ return getNdefMessages();
}
/** TODO(npelly):
@@ -79,13 +93,35 @@ public class NdefTag extends Tag implements Parcelable {
public static final String TARGET_MIFARE_CLASSIC = "type_mifare_classic";
public static final String TARGET_OTHER = "other";
+ private static final HashMap<String, String[]> NDEF_TYPES_CONVERTION_TABLE = new HashMap<String, String[]>() {
+ {
+ // TODO: handle multiprotocol
+ // TODO: move INTERNAL_TARGET_Type to TARGET_TYPE mapping to NFC service
+ put(Tag.INTERNAL_TARGET_TYPE_JEWEL, new String[] { NdefTag.TARGET_TYPE_1 });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UL, new String[] { NdefTag.TARGET_TYPE_2 });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_1K, new String[] { NdefTag.TARGET_MIFARE_CLASSIC });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_4K, new String[] { NdefTag.TARGET_MIFARE_CLASSIC });
+ put(Tag.INTERNAL_TARGET_TYPE_FELICA, new String[] { NdefTag.TARGET_TYPE_3 });
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_4, new String[] { NdefTag.TARGET_TYPE_4 });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_DESFIRE, new String[] { NdefTag.TARGET_TYPE_4 });
+ }
+ };
+
+ private String[] convertToNdefType(String internalTypeName) {
+ String[] result = NDEF_TYPES_CONVERTION_TABLE.get(internalTypeName);
+ if (result == null) {
+ return new String[] { NdefTag.TARGET_OTHER };
+ }
+ return result;
+ }
+
/**
* Return the
*
* @return
*/
public String[] getNdefTargets() {
- throw new UnsupportedOperationException();
+ return convertToNdefType(mTypeName);
}
@Override
@@ -107,7 +143,7 @@ public class NdefTag extends Tag implements Parcelable {
int messagesLength = in.readInt();
NdefMessage[] messages = new NdefMessage[messagesLength];
in.readTypedArray(messages, NdefMessage.CREATOR);
- return new NdefTag(tag.mType, tag.mUid, tag.mNativeHandle, messages);
+ return new NdefTag(tag.mTypeName, tag.mUid, tag.mNativeHandle, messages);
}
public NdefTag[] newArray(int size) {
return new NdefTag[size];
diff --git a/core/java/android/nfc/NdefTagConnection.java b/core/java/android/nfc/NdefTagConnection.java
index 8038d1a..4795fa7 100644
--- a/core/java/android/nfc/NdefTagConnection.java
+++ b/core/java/android/nfc/NdefTagConnection.java
@@ -25,6 +25,9 @@ import android.util.Log;
* A connection to an NDEF target on an {@link NdefTag}.
* <p>You can acquire this kind of connection with {@link NfcAdapter#createNdefTagConnection
* createNdefTagConnection()}. Use the connection to read or write {@link NdefMessage}s.
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
*/
public class NdefTagConnection extends RawTagConnection {
public static final int NDEF_MODE_READ_ONCE = 1;
@@ -39,8 +42,29 @@ public class NdefTagConnection extends RawTagConnection {
* Internal constructor, to be used by NfcAdapter
* @hide
*/
- NdefTagConnection(INfcAdapter service, NdefTag tag) throws RemoteException {
+ /* package private */ NdefTagConnection(INfcAdapter service, NdefTag tag, String target) throws RemoteException {
super(service, tag);
+ String[] targets = tag.getNdefTargets();
+ int i;
+
+ // Check target validity
+ for (i=0; i<targets.length; i++) {
+ if (target.equals(targets[i])) {
+ break;
+ }
+ }
+ if (i >= targets.length) {
+ // Target not found
+ throw new IllegalArgumentException();
+ }
+ }
+
+ /**
+ * Internal constructor, to be used by NfcAdapter
+ * @hide
+ */
+ /* package private */ NdefTagConnection(INfcAdapter service, NdefTag tag) throws RemoteException {
+ this(service, tag, tag.getNdefTargets()[0]);
}
/**
@@ -48,7 +72,7 @@ public class NdefTagConnection extends RawTagConnection {
* This will always return the most up to date payload, and can block.
* It can be canceled with {@link RawTagConnection#close}.
* Most NDEF tags will contain just one NDEF message.
- * <p>
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @throws FormatException if the tag is not NDEF formatted
* @throws IOException if the target is lost or connection closed
* @throws FormatException
@@ -88,8 +112,9 @@ public class NdefTagConnection extends RawTagConnection {
* message. Use {@link NdefRecord} to write several records to a single tag.
* For write-many tags, use {@link #makeReadOnly} after this method to attempt
* to prevent further modification. For write-once tags this is not
- * neccesary.
- * Requires NFC_WRITE permission.
+ * necessary.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
+ *
* @throws FormatException if the tag is not suitable for NDEF messages
* @throws IOException if the target is lost or connection closed or the
* write failed
@@ -117,7 +142,7 @@ public class NdefTagConnection extends RawTagConnection {
* Attempts to make the NDEF data in this tag read-only.
* This method will block until the action is complete. It can be canceled
* with {@link RawTagConnection#close}.
- * Requires NFC_WRITE permission.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @return true if the tag is now read-only
* @throws IOException if the target is lost, or connection closed
*/
@@ -143,7 +168,8 @@ public class NdefTagConnection extends RawTagConnection {
/**
* Read/Write mode hint.
- * Provides a hint if further reads or writes are likely to suceed.
+ * Provides a hint if further reads or writes are likely to succeed.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @return one of NDEF_MODE
* @throws IOException if the target is lost or connection closed
*/
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 37243f7..6f718d3 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -22,7 +22,6 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
-//TODO(npelly) permission {@link android.Manifest.permission#NFC_MODIFY}
/**
* Represents the device's local NFC adapter.
* <p>
@@ -35,7 +34,7 @@ import android.util.Log;
* to NFC Tags.
* <p class="note">
* <strong>Note:</strong> Some methods require the
- * TODO permission.
+ * {@link android.Manifest.permission#NFC} permission.
*/
public final class NfcAdapter {
/**
@@ -231,8 +230,7 @@ public final class NfcAdapter {
* <li>provide the NDEF message on over LLCP to peer NFC adapters
* </ul>
* The NDEF message is preserved across reboot.
- * <p>
- * Requires NFC_WRITE permission
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*
* @param message NDEF message to make public
*/
@@ -246,8 +244,7 @@ public final class NfcAdapter {
/**
* Get the NDEF Message that this adapter appears as to Tag readers.
- * <p>
- * Requires NFC_WRITE permission
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*
* @return NDEF Message that is publicly readable
*/
@@ -262,6 +259,7 @@ public final class NfcAdapter {
/**
* Create a raw tag connection to the default Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public RawTagConnection createRawTagConnection(Tag tag) {
try {
@@ -274,14 +272,20 @@ public final class NfcAdapter {
/**
* Create a raw tag connection to the specified Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public RawTagConnection createRawTagConnection(Tag tag, String target) {
- //TODO
- throw new UnsupportedOperationException();
+ try {
+ return new RawTagConnection(mService, tag, target);
+ } catch (RemoteException e) {
+ Log.e(TAG, "NFC service died", e);
+ return null;
+ }
}
/**
* Create an NDEF tag connection to the default Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public NdefTagConnection createNdefTagConnection(NdefTag tag) {
try {
@@ -294,9 +298,14 @@ public final class NfcAdapter {
/**
* Create an NDEF tag connection to the specified Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public NdefTagConnection createNdefTagConnection(NdefTag tag, String target) {
- //TODO
- throw new UnsupportedOperationException();
+ try {
+ return new NdefTagConnection(mService, tag, target);
+ } catch (RemoteException e) {
+ Log.e(TAG, "NFC service died", e);
+ return null;
+ }
}
}
diff --git a/core/java/android/nfc/RawTagConnection.java b/core/java/android/nfc/RawTagConnection.java
index 50e2a5d..265eb1b 100644
--- a/core/java/android/nfc/RawTagConnection.java
+++ b/core/java/android/nfc/RawTagConnection.java
@@ -30,7 +30,7 @@ import android.util.Log;
* Applications must implement their own protocol stack on top of {@link #transceive transceive()}.
*
* <p class="note"><strong>Note:</strong>
- * Most methods require the TODO
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
* permission.
*/
public class RawTagConnection {
@@ -39,33 +39,56 @@ public class RawTagConnection {
/*package*/ final INfcTag mTagService;
/*package*/ final Tag mTag;
/*package*/ boolean mIsConnected;
+ /*package*/ String mSelectedTarget;
private static final String TAG = "NFC";
- /* package private */ RawTagConnection(INfcAdapter service, Tag tag) throws RemoteException {
+ /* package private */ RawTagConnection(INfcAdapter service, Tag tag, String target) throws RemoteException {
+ String[] targets = tag.getRawTargets();
+ int i;
+
+ // Check target validity
+ for (i=0;i<targets.length;i++) {
+ if (target.equals(targets[i])) {
+ break;
+ }
+ }
+ if (i >= targets.length) {
+ // Target not found
+ throw new IllegalArgumentException();
+ }
+
mService = service;
mTagService = service.getNfcTagInterface();
mService.openTagConnection(tag); // TODO(nxp): don't connect until connect()
mTag = tag;
+ mSelectedTarget = target;
+ }
+
+ /* package private */ RawTagConnection(INfcAdapter service, Tag tag) throws RemoteException {
+ this(service, tag, tag.getRawTargets()[0]);
}
/**
* Get the {@link Tag} this connection is associated with.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public Tag getTag() {
return mTag;
}
+ /**
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
+ */
public String getTagTarget() {
- //TODO
- throw new UnsupportedOperationException();
+ return mSelectedTarget;
}
/**
* Helper to indicate if {@link #transceive transceive()} calls might succeed.
* <p>
* Does not cause RF activity, and does not block.
- * <p>
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @return true if {@link #connect} has completed successfully and the {@link Tag} is believed
* to be within range. Applications must still handle {@link java.io.IOException}
* while using {@link #transceive transceive()}, in case connection is lost after this method
@@ -85,7 +108,7 @@ public class RawTagConnection {
* <p>
* {@link #close} can be called from another thread to cancel this connection
* attempt.
- *
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @throws IOException if the target is lost, or connect canceled
*/
public void connect() throws IOException {
@@ -101,6 +124,7 @@ public class RawTagConnection {
* <p>
* Once this method is called, this object cannot be re-used and should be discarded. Further
* calls to {@link #transceive transceive()} or {@link #connect} will fail.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public void close() {
mIsConnected = false;
@@ -116,8 +140,7 @@ public class RawTagConnection {
* <p>
* This method will block until the response is received. It can be canceled
* with {@link #close}.
- * <p>
- * Requires NFC_WRITE permission.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*
* @param data bytes to send
* @return bytes received in response
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index ea21790..abf02b5 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -16,6 +16,8 @@
package android.nfc;
+import java.util.HashMap;
+
import android.os.Parcel;
import android.os.Parcelable;
@@ -113,17 +115,73 @@ public class Tag implements Parcelable {
public static final String TARGET_OTHER = "other";
- /*package*/ final int mType;
+ /*package*/ final String mTypeName;
/*package*/ final boolean mIsNdef;
/*package*/ final byte[] mUid;
/*package*/ final int mNativeHandle;
+ /*package*/ static final String INTERNAL_TARGET_TYPE_ISO14443_3A = "Iso14443-3A";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_ISO14443_3B = "Iso14443-3B";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_ISO14443_4 = "Iso14443-4";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_UL = "MifareUL";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_1K = "Mifare1K";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_4K = "Mifare4K";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_DESFIRE = "MifareDESFIRE";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_UNKNOWN = "Unknown Mifare";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_FELICA = "Felica";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_JEWEL = "Jewel";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_UNKNOWN = "Unknown Type";
+
+ private static final HashMap<String, Integer> INT_TYPES_CONVERTION_TABLE = new HashMap<String, Integer>() {
+ {
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3A, Tag.NFC_TAG_ISO14443_A );
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3B, Tag.NFC_TAG_ISO14443_B );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UL, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_1K, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_4K, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_DESFIRE, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_FELICA, Tag.NFC_TAG_FELICA );
+ put(Tag.INTERNAL_TARGET_TYPE_JEWEL, Tag.NFC_TAG_JEWEL );
+ }
+ };
+
+ private int convertToInt(String internalTypeName) {
+ Integer result = INT_TYPES_CONVERTION_TABLE.get(internalTypeName);
+ if (result == null) {
+ return Tag.NFC_TAG_OTHER;
+ }
+ return result;
+ }
+
+ private static final HashMap<String, String[]> RAW_TYPES_CONVERTION_TABLE = new HashMap<String, String[]>() {
+ {
+ /* TODO: handle multiprotocol */
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3A, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3B, new String[] { Tag.TARGET_ISO_14443_3B });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UL, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_1K, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_4K, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_DESFIRE, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UNKNOWN, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_FELICA, new String[] { Tag.TARGET_JIS_X_6319_4 });
+ put(Tag.INTERNAL_TARGET_TYPE_JEWEL, new String[] { Tag.TARGET_TOPAZ });
+ }
+ };
+
+ private String[] convertToRaw(String internalTypeName) {
+ String[] result = RAW_TYPES_CONVERTION_TABLE.get(internalTypeName);
+ if (result == null) {
+ return new String[] { Tag.TARGET_OTHER };
+ }
+ return result;
+ }
+
/**
* Hidden constructor to be used by NFC service only.
* @hide
*/
- public Tag(int type, boolean isNdef, byte[] uid, int nativeHandle) {
- mType = type;
+ public Tag(String typeName, boolean isNdef, byte[] uid, int nativeHandle) {
+ mTypeName = typeName;
mIsNdef = isNdef;
mUid = uid.clone();
mNativeHandle = nativeHandle;
@@ -144,8 +202,7 @@ public class Tag implements Parcelable {
* @return
*/
public String[] getRawTargets() {
- //TODO
- throw new UnsupportedOperationException();
+ return convertToRaw(mTypeName);
}
/**
@@ -159,7 +216,7 @@ public class Tag implements Parcelable {
* @hide
*/
public int getType() {
- return mType;
+ return convertToInt(mTypeName);
}
/**
@@ -188,7 +245,7 @@ public class Tag implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
boolean[] booleans = new boolean[] {mIsNdef};
- dest.writeInt(mType);
+ dest.writeString(mTypeName);
dest.writeBooleanArray(booleans);
dest.writeInt(mUid.length);
dest.writeByteArray(mUid);
@@ -199,7 +256,7 @@ public class Tag implements Parcelable {
new Parcelable.Creator<Tag>() {
public Tag createFromParcel(Parcel in) {
boolean[] booleans = new boolean[1];
- int type = in.readInt();
+ String type = in.readString();
in.readBooleanArray(booleans);
boolean isNdef = booleans[0];
int uidLength = in.readInt();
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 9268cd1..9767786 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -198,7 +198,7 @@ public class Build {
* graphics to ensure they look okay on a dark background.
* </ul>
*/
- public static final int GINGERBREAD = CUR_DEVELOPMENT;
+ public static final int GINGERBREAD = 9;
/**
* Next next version of Android.
diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java
index cfbc2bd..239c3ac 100644
--- a/core/java/android/server/BluetoothEventLoop.java
+++ b/core/java/android/server/BluetoothEventLoop.java
@@ -120,7 +120,9 @@ class BluetoothEventLoop {
| PowerManager.ON_AFTER_RELEASE, TAG);
mWakeLock.setReferenceCounted(false);
initializeNativeDataNative();
+ }
+ /*package*/ void getProfileProxy() {
mAdapter.getProfileProxy(mContext, mProfileServiceListener, BluetoothProfile.A2DP);
}
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index f8a39f7..7abb98e 100644
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -319,6 +319,10 @@ public class BluetoothService extends IBluetooth.Stub {
mEventLoop = new BluetoothEventLoop(mContext, mAdapter, this);
}
+ public synchronized void initAfterA2dpRegistration() {
+ mEventLoop.getProfileProxy();
+ }
+
@Override
protected void finalize() throws Throwable {
mContext.unregisterReceiver(mReceiver);
diff --git a/core/java/android/text/style/BulletSpan.java b/core/java/android/text/style/BulletSpan.java
index 655bd81..3f86b08 100644
--- a/core/java/android/text/style/BulletSpan.java
+++ b/core/java/android/text/style/BulletSpan.java
@@ -18,6 +18,8 @@ package android.text.style;
import android.graphics.Canvas;
import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Path.Direction;
import android.os.Parcel;
import android.text.Layout;
import android.text.ParcelableSpan;
@@ -30,6 +32,7 @@ public class BulletSpan implements LeadingMarginSpan, ParcelableSpan {
private final int mColor;
private static final int BULLET_RADIUS = 3;
+ private static Path sBulletPath = null;
public static final int STANDARD_GAP_WIDTH = 2;
public BulletSpan() {
@@ -55,11 +58,11 @@ public class BulletSpan implements LeadingMarginSpan, ParcelableSpan {
mWantColor = src.readInt() != 0;
mColor = src.readInt();
}
-
+
public int getSpanTypeId() {
return TextUtils.BULLET_SPAN;
}
-
+
public int describeContents() {
return 0;
}
@@ -89,8 +92,20 @@ public class BulletSpan implements LeadingMarginSpan, ParcelableSpan {
p.setStyle(Paint.Style.FILL);
- c.drawCircle(x + dir * BULLET_RADIUS, (top + bottom) / 2.0f,
- BULLET_RADIUS, p);
+ if (c.isHardwareAccelerated()) {
+ if (sBulletPath == null) {
+ sBulletPath = new Path();
+ // Bullet is slightly better to avoid aliasing artifacts on mdpi devices.
+ sBulletPath.addCircle(0.0f, 0.0f, 1.2f * BULLET_RADIUS, Direction.CW);
+ }
+
+ c.save();
+ c.translate(x + dir * BULLET_RADIUS, (top + bottom) / 2.0f);
+ c.drawPath(sBulletPath, p);
+ c.restore();
+ } else {
+ c.drawCircle(x + dir * BULLET_RADIUS, (top + bottom) / 2.0f, BULLET_RADIUS, p);
+ }
if (mWantColor) {
p.setColor(oldcolor);
diff --git a/core/java/android/webkit/DeviceOrientationManager.java b/core/java/android/webkit/DeviceMotionAndOrientationManager.java
index 2076a9e..79b78d8 100644
--- a/core/java/android/webkit/DeviceOrientationManager.java
+++ b/core/java/android/webkit/DeviceMotionAndOrientationManager.java
@@ -17,17 +17,17 @@
package android.webkit;
/**
- * This class is simply a container for the methods used to implement DeviceOrientation,
- * including the mock DeviceOrientationClient for use in LayoutTests.
+ * This class is simply a container for the methods used to implement DeviceMotion and
+ * DeviceOrientation, including the mock DeviceOrientationClient for use in LayoutTests.
*
* This could be part of WebViewCore, but have moved it to its own class to
* avoid bloat there.
* @hide
*/
-public final class DeviceOrientationManager {
+public final class DeviceMotionAndOrientationManager {
private WebViewCore mWebViewCore;
- public DeviceOrientationManager(WebViewCore webViewCore) {
+ public DeviceMotionAndOrientationManager(WebViewCore webViewCore) {
mWebViewCore = webViewCore;
}
diff --git a/core/java/android/webkit/DeviceMotionService.java b/core/java/android/webkit/DeviceMotionService.java
index 4027c26..7d7a0f0 100755
--- a/core/java/android/webkit/DeviceMotionService.java
+++ b/core/java/android/webkit/DeviceMotionService.java
@@ -23,13 +23,13 @@ import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Handler;
import android.os.Message;
-import android.webkit.DeviceOrientationManager;
+import android.webkit.DeviceMotionAndOrientationManager;
import java.lang.Runnable;
import java.util.List;
final class DeviceMotionService implements SensorEventListener {
- private DeviceOrientationManager mManager;
+ private DeviceMotionAndOrientationManager mManager;
private boolean mIsRunning;
private Handler mHandler;
private SensorManager mSensorManager;
@@ -40,7 +40,7 @@ final class DeviceMotionService implements SensorEventListener {
private static final int INTERVAL_MILLIS = 100;
- public DeviceMotionService(DeviceOrientationManager manager, Context context) {
+ public DeviceMotionService(DeviceMotionAndOrientationManager manager, Context context) {
mManager = manager;
assert(mManager != null);
mContext = context;
diff --git a/core/java/android/webkit/DeviceOrientationService.java b/core/java/android/webkit/DeviceOrientationService.java
index 9b866d3..f3c0576 100755
--- a/core/java/android/webkit/DeviceOrientationService.java
+++ b/core/java/android/webkit/DeviceOrientationService.java
@@ -22,7 +22,7 @@ import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Handler;
-import android.webkit.DeviceOrientationManager;
+import android.webkit.DeviceMotionAndOrientationManager;
import java.lang.Runnable;
import java.util.List;
@@ -33,7 +33,7 @@ final class DeviceOrientationService implements SensorEventListener {
// The geomagnetic vector expressed in the body frame.
private float[] mMagneticFieldVector;
- private DeviceOrientationManager mManager;
+ private DeviceMotionAndOrientationManager mManager;
private boolean mIsRunning;
private Handler mHandler;
private SensorManager mSensorManager;
@@ -45,7 +45,7 @@ final class DeviceOrientationService implements SensorEventListener {
private static final double DELTA_DEGRESS = 1.0;
- public DeviceOrientationService(DeviceOrientationManager manager, Context context) {
+ public DeviceOrientationService(DeviceMotionAndOrientationManager manager, Context context) {
mManager = manager;
assert(mManager != null);
mContext = context;
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index d7f46af..8cd9f68 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -35,7 +35,7 @@ import android.view.KeyEvent;
import android.view.SurfaceView;
import android.view.View;
import android.webkit.DeviceMotionService;
-import android.webkit.DeviceOrientationManager;
+import android.webkit.DeviceMotionAndOrientationManager;
import android.webkit.DeviceOrientationService;
import java.util.ArrayList;
@@ -120,7 +120,8 @@ final class WebViewCore {
private int mWebkitScrollX = 0;
private int mWebkitScrollY = 0;
- private DeviceOrientationManager mDeviceOrientationManager = new DeviceOrientationManager(this);
+ private DeviceMotionAndOrientationManager mDeviceMotionAndOrientationManager =
+ new DeviceMotionAndOrientationManager(this);
private DeviceMotionService mDeviceMotionService;
private DeviceOrientationService mDeviceOrientationService;
@@ -2535,19 +2536,19 @@ final class WebViewCore {
}
private void useMockDeviceOrientation() {
- mDeviceOrientationManager.useMock();
+ mDeviceMotionAndOrientationManager.useMock();
}
public void setMockDeviceOrientation(boolean canProvideAlpha, double alpha,
boolean canProvideBeta, double beta, boolean canProvideGamma, double gamma) {
- mDeviceOrientationManager.setMockOrientation(canProvideAlpha, alpha, canProvideBeta, beta,
- canProvideGamma, gamma);
+ mDeviceMotionAndOrientationManager.setMockOrientation(canProvideAlpha, alpha,
+ canProvideBeta, beta, canProvideGamma, gamma);
}
protected DeviceMotionService getDeviceMotionService() {
if (mDeviceMotionService == null) {
mDeviceMotionService =
- new DeviceMotionService(mDeviceOrientationManager, mContext);
+ new DeviceMotionService(mDeviceMotionAndOrientationManager, mContext);
}
return mDeviceMotionService;
}
@@ -2555,7 +2556,7 @@ final class WebViewCore {
protected DeviceOrientationService getDeviceOrientationService() {
if (mDeviceOrientationService == null) {
mDeviceOrientationService =
- new DeviceOrientationService(mDeviceOrientationManager, mContext);
+ new DeviceOrientationService(mDeviceMotionAndOrientationManager, mContext);
}
return mDeviceOrientationService;
}
diff --git a/core/java/android/widget/ButtonGroup.java b/core/java/android/widget/ButtonGroup.java
index 81647dd..ce3decb 100644
--- a/core/java/android/widget/ButtonGroup.java
+++ b/core/java/android/widget/ButtonGroup.java
@@ -26,6 +26,9 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
+/**
+ * @hide
+ */
public class ButtonGroup extends LinearLayout {
private static final String LOG = "ButtonGroup";
@@ -122,7 +125,7 @@ public class ButtonGroup extends LinearLayout {
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
- if (mButtonBackgroundRes != 0) {
+ if (child instanceof Button && mButtonBackgroundRes != 0) {
// Preserve original padding as we change the background
final int paddingLeft = child.getPaddingLeft();
final int paddingRight = child.getPaddingRight();
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 1f5b790..4c3927b 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -28,6 +28,7 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
+import android.graphics.Region;
import android.graphics.TableMaskFilter;
import android.util.AttributeSet;
import android.util.Log;
@@ -113,10 +114,9 @@ public class StackView extends AdapterViewAnimator {
private ImageView mHighlight;
private StackSlider mStackSlider;
private boolean mFirstLayoutHappened = false;
- private ViewGroup mAncestorContainingAllChildren = null;
- private int mAncestorHeight = 0;
private int mStackMode;
private int mFramePadding;
+ private final Rect invalidateRect = new Rect();
public StackView(Context context) {
super(context);
@@ -269,24 +269,18 @@ public class StackView extends AdapterViewAnimator {
@Override
protected void dispatchDraw(Canvas canvas) {
- super.dispatchDraw(canvas);
- }
-
- // TODO: right now, this code walks up the hierarchy as far as needed and disables clipping
- // so that the stack's children can draw outside of the stack's bounds. This is fine within
- // the context of widgets in the launcher, but is destructive in general, as the clipping
- // values are not being reset. For this to be a full framework level widget, we will need
- // framework level support for drawing outside of a parent's bounds.
- private void disableParentalClipping() {
- if (mAncestorContainingAllChildren != null) {
- ViewGroup vg = this;
- while (vg.getParent() != null && vg.getParent() instanceof ViewGroup) {
- if (vg == mAncestorContainingAllChildren) break;
- vg = (ViewGroup) vg.getParent();
- vg.setClipChildren(false);
- vg.setClipToPadding(false);
- }
+ canvas.getClipBounds(invalidateRect);
+ final int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ LayoutParams lp = (LayoutParams) getChildAt(i).getLayoutParams();
+ invalidateRect.union(lp.getInvalidateRect());
+ lp.resetInvalidateRect();
}
+
+ canvas.save(Canvas.CLIP_SAVE_FLAG);
+ canvas.clipRect(invalidateRect, Region.Op.UNION);
+ super.dispatchDraw(canvas);
+ canvas.restore();
}
private void onLayout() {
@@ -343,6 +337,8 @@ public class StackView extends AdapterViewAnimator {
cancelLongPress();
requestDisallowInterceptTouchEvent(true);
+ if (mAdapter == null) return;
+
int activeIndex;
if (mStackMode == ITEMS_SLIDE_UP) {
activeIndex = (swipeGestureType == GESTURE_SLIDE_DOWN) ?
@@ -352,8 +348,6 @@ public class StackView extends AdapterViewAnimator {
mNumActiveViews - 2 : mNumActiveViews - 1;
}
- if (mAdapter == null) return;
-
if (mLoopViews) {
mStackSlider.setMode(StackSlider.NORMAL_MODE);
} else if (mCurrentWindowStartUnbounded + activeIndex == 0) {
@@ -845,6 +839,11 @@ public class StackView extends AdapterViewAnimator {
int horizontalOffset;
int verticalOffset;
View mView;
+ int left, top, right, bottom;
+ private final Rect parentRect = new Rect();
+ private final Rect invalidateRect = new Rect();
+ private final RectF invalidateRectf = new RectF();
+ private final Rect globalInvalidateRect = new Rect();
LayoutParams(View view) {
super(0, 0);
@@ -863,8 +862,9 @@ public class StackView extends AdapterViewAnimator {
height = 0;
}
- private Rect parentRect = new Rect();
void invalidateGlobalRegion(View v, Rect r) {
+ // We need to make a new rect here, so as not to modify the one passed
+ globalInvalidateRect.set(r);
View p = v;
if (!(v.getParent() != null && v.getParent() instanceof View)) return;
@@ -872,9 +872,10 @@ public class StackView extends AdapterViewAnimator {
parentRect.set(0, 0, 0, 0);
int depth = 0;
while (p.getParent() != null && p.getParent() instanceof View
- && !parentRect.contains(r)) {
+ && !parentRect.contains(globalInvalidateRect)) {
if (!firstPass) {
- r.offset(p.getLeft() - p.getScrollX(), p.getTop() - p.getScrollY());
+ globalInvalidateRect.offset(p.getLeft() - p.getScrollX(), p.getTop()
+ - p.getScrollY());
depth++;
}
firstPass = false;
@@ -882,22 +883,20 @@ public class StackView extends AdapterViewAnimator {
parentRect.set(p.getScrollX(), p.getScrollY(),
p.getWidth() + p.getScrollX(), p.getHeight() + p.getScrollY());
- // TODO: we need to stop early here if we've hit the edge of the screen
- // so as to prevent us from walking too high in the hierarchy. A lot of this
- // code might become a lot more straightforward.
}
- if (depth > mAncestorHeight) {
- mAncestorContainingAllChildren = (ViewGroup) p;
- mAncestorHeight = depth;
- disableParentalClipping();
- }
+ p.invalidate(globalInvalidateRect.left, globalInvalidateRect.top,
+ globalInvalidateRect.right, globalInvalidateRect.bottom);
+ }
+
+ Rect getInvalidateRect() {
+ return invalidateRect;
+ }
- p.invalidate(r.left, r.top, r.right, r.bottom);
+ void resetInvalidateRect() {
+ invalidateRect.set(0, 0, 0, 0);
}
- private Rect invalidateRect = new Rect();
- private RectF invalidateRectf = new RectF();
// This is public so that ObjectAnimator can access it
public void setVerticalOffset(int newVerticalOffset) {
int offsetDelta = newVerticalOffset - verticalOffset;
@@ -908,14 +907,14 @@ public class StackView extends AdapterViewAnimator {
int top = Math.min(mView.getTop() + offsetDelta, mView.getTop());
int bottom = Math.max(mView.getBottom() + offsetDelta, mView.getBottom());
- invalidateRectf.set(mView.getLeft(), top, mView.getRight(), bottom);
+ invalidateRectf.set(mView.getLeft(), top, mView.getRight(), bottom);
float xoffset = -invalidateRectf.left;
float yoffset = -invalidateRectf.top;
invalidateRectf.offset(xoffset, yoffset);
mView.getMatrix().mapRect(invalidateRectf);
invalidateRectf.offset(-xoffset, -yoffset);
- invalidateRect.set((int) Math.floor(invalidateRectf.left),
+ invalidateRect.union((int) Math.floor(invalidateRectf.left),
(int) Math.floor(invalidateRectf.top),
(int) Math.ceil(invalidateRectf.right),
(int) Math.ceil(invalidateRectf.bottom));
@@ -940,7 +939,7 @@ public class StackView extends AdapterViewAnimator {
mView.getMatrix().mapRect(invalidateRectf);
invalidateRectf.offset(-xoffset, -yoffset);
- invalidateRect.set((int) Math.floor(invalidateRectf.left),
+ invalidateRect.union((int) Math.floor(invalidateRectf.left),
(int) Math.floor(invalidateRectf.top),
(int) Math.ceil(invalidateRectf.right),
(int) Math.ceil(invalidateRectf.bottom));
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 4e5809e..d071dd2 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -3015,6 +3015,25 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if (imm != null) imm.restartInput(this);
}
+ /**
+ * It would be better to rely on the input type for everything. A password inputType should have
+ * a password transformation. We should hence use isPasswordInputType instead of this method.
+ *
+ * We should:
+ * - Call setInputType in setKeyListener instead of changing the input type directly (which
+ * would install the correct transformation).
+ * - Refuse the installation of a non-password transformation in setTransformation if the input
+ * type is password.
+ *
+ * However, this is like this for legacy reasons and we cannot break existing apps. This method
+ * is useful since it matches what the user can see (obfuscated text or not).
+ *
+ * @return true if the current transformation method is of the password type.
+ */
+ private boolean hasPasswordTransformationMethod() {
+ return mTransformation instanceof PasswordTransformationMethod;
+ }
+
private boolean isPasswordInputType(int inputType) {
final int variation = inputType & (EditorInfo.TYPE_MASK_CLASS
| EditorInfo.TYPE_MASK_VARIATION);
@@ -7233,7 +7252,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
private boolean canCut() {
- if (mTransformation instanceof PasswordTransformationMethod) {
+ if (hasPasswordTransformationMethod()) {
return false;
}
@@ -7247,7 +7266,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
private boolean canCopy() {
- if (mTransformation instanceof PasswordTransformationMethod) {
+ if (hasPasswordTransformationMethod()) {
return false;
}
@@ -7309,6 +7328,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
char c = mTransformed.charAt(start - 1);
int type = Character.getType(c);
+ // Cases where the text ends with a '.' and we select from the end of the line (right
+ // after the dot), or when we select from the space character in "aaaa, bbbb".
+ if (start == end && type == Character.OTHER_PUNCTUATION) continue;
+
if (c != '\'' &&
type != Character.UPPERCASE_LETTER &&
type != Character.LOWERCASE_LETTER &&
@@ -7717,11 +7740,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mode.setTitle(mContext.getString(com.android.internal.R.string.textSelectionCABTitle));
mode.setSubtitle(null);
- selectCurrentWord();
-
boolean atLeastOne = false;
if (canSelectText()) {
+ if (hasPasswordTransformationMethod()) {
+ // selectCurrentWord is not available on a password field and would return an
+ // arbitrary 10-charater selection around pressed position. Select all instead.
+ Selection.setSelection((Spannable) mText, 0, mText.length());
+ } else {
+ selectCurrentWord();
+ }
+
menu.add(0, ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll).
setIcon(com.android.internal.R.drawable.ic_menu_select_all).
setAlphabeticShortcut('a').
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpConnectionlessSocket.java b/core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java
index eccdeb1..a9cf6b8 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpConnectionlessSocket.java
+++ b/core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java
@@ -14,48 +14,28 @@
* limitations under the License.
*/
-/**
- * File : LlcpConnectionLessSocket.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
import android.nfc.ErrorCodes;
import android.nfc.ILlcpConnectionlessSocket;
import android.nfc.LlcpPacket;
-
import android.os.RemoteException;
import android.util.Log;
-/**
- * LlcpConnectionlessSocket represents a LLCP Connectionless object to be used
- * in a connectionless communication
- *
- * @since AA02.01
- * @hide
- */
public class LlcpConnectionlessSocket {
-
-
private static final String TAG = "LlcpConnectionlessSocket";
/**
* The handle returned by the NFC service and used to identify the LLCP connectionless socket in
* every call of this class.
- *
- * @hide
*/
protected int mHandle;
/**
* The entry point for LLCP Connectionless socket operations.
- *
- * @hide
*/
protected ILlcpConnectionlessSocket mService;
@@ -66,7 +46,6 @@ public class LlcpConnectionlessSocket {
* @param service The entry point to the Nfc Service for LLCP Connectionless socket class.
* @param handle The handle returned by the NFC service and used to identify
* the socket in subsequent calls.
- * @hide
*/
LlcpConnectionlessSocket(ILlcpConnectionlessSocket service, int handle) {
this.mService = service;
@@ -79,7 +58,6 @@ public class LlcpConnectionlessSocket {
* @param packet Service Access Point number related to a LLCP
* Connectionless client and a data buffer to send
* @throws IOException if the LLCP link has been lost or deactivated.
- * @since AA02.01
*/
public void sendTo(LlcpPacket packet) throws IOException {
try {
@@ -99,7 +77,6 @@ public class LlcpConnectionlessSocket {
* @return data data received from a specific LLCP Connectionless client
* @throws IOException if the LLCP link has been lost or deactivated.
* @see LlcpPacket
- * @since AA02.01
*/
public LlcpPacket receiveFrom() throws IOException {
try {
@@ -118,8 +95,6 @@ public class LlcpConnectionlessSocket {
/**
* Close the created Connectionless socket.
- *
- * @since AA02.01
*/
public void close() {
try {
@@ -133,7 +108,6 @@ public class LlcpConnectionlessSocket {
* Returns the local Service Access Point number of the socket
*
* @return sap
- * @since AA02.01
*/
public int getSap() {
int sap = 0;
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpException.java b/core/java/com/android/internal/nfc/LlcpException.java
index 1e2e2da..da4e91e 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpException.java
+++ b/core/java/com/android/internal/nfc/LlcpException.java
@@ -14,20 +14,11 @@
* limitations under the License.
*/
-/**
- * File : LLCPException.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 24-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
/**
* Generic exception thrown in case something unexpected happened during a
* LLCP communication.
- *
- * @since AA02.01
- * @hide
*/
public class LlcpException extends Exception {
/**
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpServiceSocket.java b/core/java/com/android/internal/nfc/LlcpServiceSocket.java
index 1bdf72f..4607527 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpServiceSocket.java
+++ b/core/java/com/android/internal/nfc/LlcpServiceSocket.java
@@ -14,29 +14,19 @@
* limitations under the License.
*/
-/**
- * File : LLCPServerSocket.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
import android.nfc.ErrorCodes;
import android.nfc.ILlcpSocket;
import android.nfc.ILlcpServiceSocket;
-
import android.os.RemoteException;
import android.util.Log;
/**
* LlcpServiceSocket represents a LLCP Service to be used in a
* Connection-oriented communication
- *
- * @since AA02.01
- * @hide
*/
public class LlcpServiceSocket {
@@ -45,15 +35,11 @@ public class LlcpServiceSocket {
/**
* The handle returned by the NFC service and used to identify the LLCP
* Service socket in every call of this class.
- *
- * @hide
*/
protected int mHandle;
/**
* The entry point for LLCP Service socket operations.
- *
- * @hide
*/
protected ILlcpServiceSocket mService;
@@ -92,7 +78,6 @@ public class LlcpServiceSocket {
* @param handle
* The handle returned by the NFC service and used to identify
* the socket in subsequent calls.
- * @hide
*/
LlcpServiceSocket(ILlcpServiceSocket service, ILlcpSocket socketService, int handle) {
this.mService = service;
@@ -112,7 +97,6 @@ public class LlcpServiceSocket {
* if not enough ressources are available
*
* @see LlcpSocket
- * @since AA02.01
*/
public LlcpSocket accept() throws IOException, LlcpException {
@@ -141,7 +125,6 @@ public class LlcpServiceSocket {
*
* @param timeout
* value of the timeout for the accept request
- * @since AA02.01
*/
public void setAcceptTimeout(int timeout) {
try {
@@ -155,7 +138,6 @@ public class LlcpServiceSocket {
* Get the timeout value of the accept request
*
* @return mTimeout
- * @since AA02.01
*/
public int getAcceptTimeout() {
try {
@@ -168,8 +150,6 @@ public class LlcpServiceSocket {
/**
* Close the created Llcp Service socket
- *
- * @since AA02.01
*/
public void close() {
try {
@@ -178,5 +158,4 @@ public class LlcpServiceSocket {
Log.e(TAG, "RemoteException in close(): ", e);
}
}
-
}
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpSocket.java b/core/java/com/android/internal/nfc/LlcpSocket.java
index ebde3e1..ae74002 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpSocket.java
+++ b/core/java/com/android/internal/nfc/LlcpSocket.java
@@ -14,28 +14,18 @@
* limitations under the License.
*/
-/**
- * File : LlcpClientSocket.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
import android.nfc.ErrorCodes;
import android.nfc.ILlcpSocket;
-
import android.os.RemoteException;
import android.util.Log;
/**
* LlcpClientSocket represents a LLCP Connection-Oriented client to be used in a
* connection-oriented communication
- *
- * @since AA02.01
- * @hide
*/
public class LlcpSocket {
@@ -44,15 +34,11 @@ public class LlcpSocket {
/**
* The handle returned by the NFC service and used to identify the LLCP
* socket in every call of this class.
- *
- * @hide
*/
protected int mHandle;
/**
* The entry point for LLCP socket operations.
- *
- * @hide
*/
protected ILlcpSocket mService;
@@ -92,7 +78,6 @@ public class LlcpSocket {
* @param handle
* The handle returned by the NFC service and used to identify
* the socket in subsequent calls.
- * @hide
*/
LlcpSocket(ILlcpSocket service, int handle) {
this.mService = service;
@@ -109,7 +94,6 @@ public class LlcpSocket {
* @throws LlcpException
* if the connection request is rejected by the remote LLCP
* Service
- * @since AA02.01
*/
public void connect(int sap) throws IOException, LlcpException {
try {
@@ -137,7 +121,6 @@ public class LlcpSocket {
* @throws LlcpException
* if the connection request is rejected by the remote LLCP
* Service
- * @since AA02.01
*/
public void connect(String sn) throws IOException, LlcpException {
try {
@@ -160,7 +143,6 @@ public class LlcpSocket {
*
* @param timeout
* timeout value for the connect request
- * @since AA02.01
*/
public void setConnectTimeout(int timeout) {
try {
@@ -174,7 +156,6 @@ public class LlcpSocket {
* Get the timeout value of the connect request
*
* @return mTimeout
- * @since AA02.01
*/
public int getConnectTimeout() {
try {
@@ -191,7 +172,6 @@ public class LlcpSocket {
*
* @throws IOException
* if the LLCP has been lost or deactivated.
- * @since AA02.01
*/
public void close() throws IOException {
try {
@@ -210,7 +190,6 @@ public class LlcpSocket {
*
* @throws IOException
* if the LLCP has been lost or deactivated.
- * @since AA02.01
*/
public void send(byte[] data) throws IOException {
try {
@@ -232,7 +211,6 @@ public class LlcpSocket {
* @return length length of the data received
* @throws IOException
* if the LLCP has been lost or deactivated.
- * @since AA02.01
*/
public int receive(byte[] receiveBuffer) throws IOException {
int receivedLength = 0;
@@ -252,7 +230,6 @@ public class LlcpSocket {
* Returns the local Service Access Point number of the socket
*
* @return localSap
- * @since AA02.01
*/
public int getLocalSap() {
try {
@@ -267,7 +244,6 @@ public class LlcpSocket {
* Returns the local Maximum Information Unit(MIU) of the socket
*
* @return miu
- * @since AA02.01
*/
public int getLocalSocketMiu() {
try {
@@ -282,7 +258,6 @@ public class LlcpSocket {
* Returns the local Receive Window(RW) of the socket
*
* @return rw
- * @since AA02.01
*/
public int getLocalSocketRw() {
try {
@@ -301,7 +276,6 @@ public class LlcpSocket {
* @return remoteMiu
* @throws LlcpException
* if the LlcpClientSocket is not in a CONNECTED_STATE
- * @since AA02.01
*/
public int getRemoteSocketMiu() throws LlcpException {
try {
@@ -325,7 +299,6 @@ public class LlcpSocket {
* @return rw
* @throws LlcpException
* if the LlcpClientSocket is not in a CONNECTED_STATE
- * @since AA02.01
*/
public int getRemoteSocketRw() throws LlcpException {
try {
@@ -340,6 +313,4 @@ public class LlcpSocket {
return 0;
}
}
-
-
}
diff --git a/core/java/com/trustedlogic/trustednfc/android/NfcException.java b/core/java/com/android/internal/nfc/NfcException.java
index 2497c15..29a99c6 100644
--- a/core/java/com/trustedlogic/trustednfc/android/NfcException.java
+++ b/core/java/com/android/internal/nfc/NfcException.java
@@ -14,20 +14,11 @@
* limitations under the License.
*/
-/**
- * File : NFCException.java
- * Original-Author : Trusted Logic S.A. (Jeremie Corbier)
- * Created : 26-08-2009
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
/**
* Generic exception thrown in case something unexpected happened during the
* NFCManager operations.
- *
- * @since AA01.04
- * @hide
*/
public class NfcException extends Exception {
/**
diff --git a/core/java/com/trustedlogic/trustednfc/android/P2pDevice.java b/core/java/com/android/internal/nfc/P2pDevice.java
index 65800f2..8ab9aad 100644
--- a/core/java/com/trustedlogic/trustednfc/android/P2pDevice.java
+++ b/core/java/com/android/internal/nfc/P2pDevice.java
@@ -14,20 +14,13 @@
* limitations under the License.
*/
-/**
- * File : P2PDevice.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 26-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
/**
* P2pDevice is the abstract base class for all supported P2P targets the
* NfcManager can handle.
- * @hide
*/
public abstract class P2pDevice {
@@ -48,19 +41,16 @@ public abstract class P2pDevice {
/**
* Target handle, used by native calls.
- * @hide
*/
protected int mHandle;
/**
* Flag set when the object is closed and thus not usable any more.
- * @hide
*/
protected boolean isClosed = false;
/**
* Prevent default constructor to be public.
- * @hide
*/
protected P2pDevice() {
}
diff --git a/core/java/com/trustedlogic/trustednfc/android/P2pInitiator.java b/core/java/com/android/internal/nfc/P2pInitiator.java
index 6b93bce..46ae9ab 100644
--- a/core/java/com/trustedlogic/trustednfc/android/P2pInitiator.java
+++ b/core/java/com/android/internal/nfc/P2pInitiator.java
@@ -14,12 +14,7 @@
* limitations under the License.
*/
-/**
- * File : P2PInitiator.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
@@ -32,8 +27,6 @@ import android.util.Log;
* communication.
*
* @see P2pTarget
- * @since AA02.01
- * @hide
*/
public class P2pInitiator extends P2pDevice {
@@ -41,7 +34,6 @@ public class P2pInitiator extends P2pDevice {
/**
* The entry point for P2P tag operations.
- * @hide
*/
private final IP2pInitiator mService;
@@ -50,8 +42,6 @@ public class P2pInitiator extends P2pDevice {
*
* @param handle The handle returned by the NFC service and used to identify
* the tag in subsequent calls.
- *
- * @hide
*/
P2pInitiator(IP2pInitiator service, int handle) {
this.mService = service;
diff --git a/core/java/com/trustedlogic/trustednfc/android/P2pTarget.java b/core/java/com/android/internal/nfc/P2pTarget.java
index aa9e94f..7b59da3 100644
--- a/core/java/com/trustedlogic/trustednfc/android/P2pTarget.java
+++ b/core/java/com/android/internal/nfc/P2pTarget.java
@@ -14,12 +14,7 @@
* limitations under the License.
*/
-/**
- * File : P2PTarget.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
@@ -32,8 +27,6 @@ import android.util.Log;
* P2pTarget represents the target in an NFC-IP1 peer-to-peer communication.
*
* @see P2pInitiator
- * @since AA02.01
- * @hide
*/
public class P2pTarget extends P2pDevice {
@@ -41,19 +34,16 @@ public class P2pTarget extends P2pDevice {
/**
* The entry point for P2P tag operations.
- * @hide
*/
private final IP2pTarget mService;
/**
* Flag set when the object is closed and thus not usable any more.
- * @hide
*/
private final boolean isClosed = false;
/**
* Flag set when the tag is connected.
- * @hide
*/
private boolean isConnected = false;
@@ -62,8 +52,6 @@ public class P2pTarget extends P2pDevice {
*
* @return data sent by the P2pInitiator.
* @throws NfcException if accessing a closed target.
- *
- * @hide
*/
public void checkState() throws NfcException {
if(isClosed) {
@@ -76,8 +64,6 @@ public class P2pTarget extends P2pDevice {
*
* @param handle The handle returned by the NFC service and used to identify
* the tag in subsequent calls.
- *
- * @hide
*/
P2pTarget(IP2pTarget service, int handle) {
this.mService = service;
@@ -181,5 +167,4 @@ public class P2pTarget extends P2pDevice {
public int getMode() {
return P2pDevice.MODE_P2P_TARGET;
}
-
}
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index f0f3387..1d54c61 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -567,6 +567,8 @@ public class ZygoteInit {
public static void main(String argv[]) {
try {
+ VMRuntime.getRuntime().setMinimumHeapSize(5 * 1024 * 1024);
+
// Start profiling the zygote initialization.
SamplingProfilerIntegration.start();
diff --git a/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java b/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
new file mode 100644
index 0000000..965022e
--- /dev/null
+++ b/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
@@ -0,0 +1,228 @@
+package com.android.internal.os.storage;
+
+import android.app.ProgressDialog;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Environment;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.storage.IMountService;
+import android.os.storage.StorageEventListener;
+import android.os.storage.StorageManager;
+import android.util.Log;
+import android.view.WindowManager;
+import android.widget.Toast;
+
+import com.android.internal.R;
+
+/**
+ * Takes care of unmounting and formatting external storage.
+ */
+public class ExternalStorageFormatter extends Service
+ implements DialogInterface.OnCancelListener {
+ static final String TAG = "ExternalStorageFormatter";
+
+ public static final String FORMAT_ONLY = "com.android.internal.os.storage.FORMAT_ONLY";
+ public static final String FORMAT_AND_FACTORY_RESET = "com.android.internal.os.storage.FORMAT_AND_FACTORY_RESET";
+
+ public static final String EXTRA_ALWAYS_RESET = "always_reset";
+
+ public static final ComponentName COMPONENT_NAME
+ = new ComponentName("android", ExternalStorageFormatter.class.getName());
+
+ // Access using getMountService()
+ private IMountService mMountService = null;
+
+ private StorageManager mStorageManager = null;
+
+ private PowerManager.WakeLock mWakeLock;
+
+ private ProgressDialog mProgressDialog = null;
+
+ private boolean mFactoryReset = false;
+ private boolean mAlwaysReset = false;
+
+ StorageEventListener mStorageListener = new StorageEventListener() {
+ @Override
+ public void onStorageStateChanged(String path, String oldState, String newState) {
+ Log.i(TAG, "Received storage state changed notification that " +
+ path + " changed state from " + oldState +
+ " to " + newState);
+ updateProgressState();
+ }
+ };
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ if (mStorageManager == null) {
+ mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
+ mStorageManager.registerListener(mStorageListener);
+ }
+
+ mWakeLock = ((PowerManager)getSystemService(Context.POWER_SERVICE))
+ .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ExternalStorageFormatter");
+ mWakeLock.acquire();
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ if (FORMAT_AND_FACTORY_RESET.equals(intent.getAction())) {
+ mFactoryReset = true;
+ }
+ if (intent.getBooleanExtra(EXTRA_ALWAYS_RESET, false)) {
+ mAlwaysReset = true;
+ }
+
+ if (mProgressDialog == null) {
+ mProgressDialog = new ProgressDialog(this);
+ mProgressDialog.setIndeterminate(true);
+ mProgressDialog.setCancelable(true);
+ mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+ if (!mAlwaysReset) {
+ mProgressDialog.setOnCancelListener(this);
+ }
+ updateProgressState();
+ mProgressDialog.show();
+ }
+
+ return Service.START_REDELIVER_INTENT;
+ }
+
+ @Override
+ public void onDestroy() {
+ if (mStorageManager != null) {
+ mStorageManager.unregisterListener(mStorageListener);
+ }
+ if (mProgressDialog != null) {
+ mProgressDialog.dismiss();
+ }
+ mWakeLock.release();
+ super.onDestroy();
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ IMountService mountService = getMountService();
+ String extStoragePath = Environment.getExternalStorageDirectory().toString();
+ try {
+ mountService.mountVolume(extStoragePath);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with mount service", e);
+ }
+ stopSelf();
+ }
+
+ void fail(int msg) {
+ Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
+ if (mAlwaysReset) {
+ sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
+ }
+ stopSelf();
+ }
+
+ void updateProgressState() {
+ String status = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(status)
+ || Environment.MEDIA_MOUNTED_READ_ONLY.equals(status)) {
+ updateProgressDialog(R.string.progress_unmounting);
+ IMountService mountService = getMountService();
+ String extStoragePath = Environment.getExternalStorageDirectory().toString();
+ try {
+ mountService.unmountVolume(extStoragePath, true);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with mount service", e);
+ }
+ } else if (Environment.MEDIA_NOFS.equals(status)
+ || Environment.MEDIA_UNMOUNTED.equals(status)
+ || Environment.MEDIA_UNMOUNTABLE.equals(status)) {
+ updateProgressDialog(R.string.progress_erasing);
+ final IMountService mountService = getMountService();
+ final String extStoragePath = Environment.getExternalStorageDirectory().toString();
+ if (mountService != null) {
+ new Thread() {
+ public void run() {
+ boolean success = false;
+ try {
+ mountService.formatVolume(extStoragePath);
+ success = true;
+ } catch (Exception e) {
+ Toast.makeText(ExternalStorageFormatter.this,
+ R.string.format_error, Toast.LENGTH_LONG).show();
+ }
+ if (success) {
+ if (mFactoryReset) {
+ sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
+ // Intent handling is asynchronous -- assume it will happen soon.
+ stopSelf();
+ return;
+ }
+ }
+ // If we didn't succeed, or aren't doing a full factory
+ // reset, then it is time to remount the storage.
+ if (!success && mAlwaysReset) {
+ sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
+ } else {
+ try {
+ mountService.mountVolume(extStoragePath);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with mount service", e);
+ }
+ }
+ stopSelf();
+ return;
+ }
+ }.start();
+ } else {
+ Log.w("MediaFormat", "Unable to locate IMountService");
+ }
+ } else if (Environment.MEDIA_BAD_REMOVAL.equals(status)) {
+ fail(R.string.media_bad_removal);
+ } else if (Environment.MEDIA_CHECKING.equals(status)) {
+ fail(R.string.media_checking);
+ } else if (Environment.MEDIA_REMOVED.equals(status)) {
+ fail(R.string.media_removed);
+ } else if (Environment.MEDIA_SHARED.equals(status)) {
+ fail(R.string.media_shared);
+ } else {
+ fail(R.string.media_unknown_state);
+ Log.w(TAG, "Unknown storage state: " + status);
+ stopSelf();
+ }
+ }
+
+ public void updateProgressDialog(int msg) {
+ if (mProgressDialog == null) {
+ mProgressDialog = new ProgressDialog(this);
+ mProgressDialog.setIndeterminate(true);
+ mProgressDialog.setCancelable(false);
+ mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+ mProgressDialog.show();
+ }
+
+ mProgressDialog.setMessage(getText(msg));
+ }
+
+ IMountService getMountService() {
+ if (mMountService == null) {
+ IBinder service = ServiceManager.getService("mount");
+ if (service != null) {
+ mMountService = IMountService.Stub.asInterface(service);
+ } else {
+ Log.e(TAG, "Can't get mount service");
+ }
+ }
+ return mMountService;
+ }
+}
diff --git a/core/java/com/trustedlogic/trustednfc/android/package.html b/core/java/com/trustedlogic/trustednfc/android/package.html
deleted file mode 100644
index 0c0b605..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/package.html
+++ /dev/null
@@ -1,473 +0,0 @@
-<html>
-<body>
-
-<p>Provides classes that manage the NFC functionality.</p>
-
-<p>The NFC functionality is related to Near Field Communication.</p>
-
-<p>The NFC APIs let applications:</p>
-<ul>
- <li>Scan for remote NFC targets (NFC Tag or NFC Peer)</li>
- <li>Transfer raw data to and from remote NFC targets (NFC Tags or NFC Peer)</li>
- <li>Read/Write NDEF data from/to remote NFC targets (NFC Tags)</li>
- <li>Establish LLCP connection with a remote NFC target (NFC Peer with LLCP support)</li>
- <li>Exchange data with a remote NFC target through LLCP services (NFC Peer with LLCP support)</li>
- <li>Be notified of transactions on the local Secure Element by an external NFC reader</li>
-</ul>
-
-
-<h1>Setting Up NFC</h1>
-
-<p>
-Before an application can use the NFC feature, it needs to check if NFC is
-supported on the device by getting an instance of the
-{@link com.trustedlogic.trustednfc.android.NfcManager} class.
-</p>
-
-<pre>
- NfcManager mNfcManager = (NfcManager) getSystemService(Context.NFC_SERVICE);
- if (mNfcManager == null) {
- // Device does not support NFC
- }
-</pre>
-
-<p>
-An application can ensure that NFC is enabled.
-If not, an application with the needed permission can request that NFC be
-enabled.
-</p>
-
-<pre>
- if (!mNfcManager.isEnabled) {
- // NFC is currently disabled.
- // Enable NFC.
- mNfcManager.enable();
- }
-</pre>
-
-<p>
-Before using the card emulation mode, an application can ensure that a secure
-element is selected ({@link com.trustedlogic.trustednfc.android.NfcManager#getSelectedSecureElement}).
-If not, an application with the needed permission can recover the list of
-available secure elements on the device
-({@link com.trustedlogic.trustednfc.android.NfcManager#getSecureElementList}) and select one
-({@link com.trustedlogic.trustednfc.android.NfcManager#selectSecureElement}).
-</p>
-
-<p>
-Before using the NFC feature, an application can configure the NFC device by
-calling {@link com.trustedlogic.trustednfc.android.NfcManager#setProperties}. This function allows:
-</p>
-<ul>
- <li>Enabling/disabling the NFC device capabilities (RF types, baudrates,
- NFCIP-1 mode and role...)</li>
- <li>Settings the NFCIP-1 general bytes and the LLCP link parameters</li>
-</ul>
-<p>
-The setting properties can be customized according to the Device capabilities.
-The next table give the minimal set of properties supported by the Device.
-Depending on the implementation, the table may be completed.
-</p>
-<table>
- <TR><TH> Property Name </TH><TH> Property Values </TH></TR>
- <TR><TD> discovery.felica </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.iso14443A </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.iso14443B </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.iso15693 </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.nfcip </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> nfcip.baudrate </TD><TD> 106|212|424 </TD></TR>
- <TR><TD> nfcip.generalbytes </TD><TD> </TD></TR>
- <TR><TD> nfcip.mode </TD><TD> active|passive|<b>all</b> </TD></TR>
- <TR><TD> nfcip.role </TD><TD> initiator|target|<b>both</b> </TD></TR>
- <TR><TD> llcp.lto </TD><TD> <b>150</b> (0 to 255) </TD></TR>
- <TR><TD> llcp.opt </TD><TD> <b>0</b> (0 to 3) </TD></TR>
- <TR><TD> llcp.miu </TD><TD> <b>128</b> (128 to 2176) </TD></TR>
- <TR><TD> llcp.wks </TD><TD> <b>1</b> (0 to 15) </TD></TR>
-</table>
-<p>(default values in bold)</p>
-
-
-<h1>NFC Permissions</h1>
-
-<p>
-To change the NFC service settings such as enabling the NFC targets
-discovery or activating the secure element, an application must declare the
-NFC_ADMIN permission.
-</p>
-<p>
-To perform NFC raw communication with a remote NFC target in
-Reader/Write Mode or Peer-to-Peer Mode, an application must declare the NFC_RAW
-permission.
-</p>
-<p>
-To receive NDEF message or Secure Element intents, an application must declare
-the NFC_NOTIFY permission.
-</p>
-<p>
-To receive the LLCP link intent and perform an LLCP communication with a remote NFC target, an application must
-declare the NFC_LLCP permission.
-</p>
-
-
-<h1>NFC Usage</h1>
-
-<p>
-The following code samples illustrate the APIs usage regarding the NFC service
-use cases.
-</p>
-
-<h2>Reader/Writer Mode NDEF message notification</h2>
-
-<p>
-This code sample illustrates the NDEF message notification through an Intent declared in the manifest and a receiver implemented in the application.
-</p>
-<p>Main involved classes/methods:</p>
-
-<p>Manifest Example:</p>
-<pre>
- &lt;receiver android:name=".NfcReaderDemoReceiver">
- &lt;intent-filter>
- &lt;action android:name= "com.trustedlogic.trustednfc.android.action.NDEF_TAG_DISCOVERED"/>
- &lt;/intent-filter>
- &lt;/receiver>
-</pre>
-
-<p>Receiver Example:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NdefMessage}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#NDEF_TAG_DISCOVERED_ACTION}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#NDEF_MESSAGE_EXTRA}</li>
-</ul>
-<pre>
-public class NdefMessageReceiverSample extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(NfcManager.NDEF_TAG_DISCOVERERD_ACTION)) {
- NdefMessage msg = intent.getParcelableExtra(NfcManager.NDEF_MESSAGE_EXTRA);
-
- /* Manage the NdefMessage received */
- }
-</pre>
-
-<h2>Reader/Writer Mode raw exchange</h2>
-
-<p>
-This code sample illustrates raw exchanges with a NFC target in Reader/Writer
-mode.
-</p>
-<p>Main involved classes/methods:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#openTagConnection}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcTag}</li>
-</ul>
-
-<pre>
-public class TagReaderSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runTagReader() {
- NfcTag tag = null;
- String type;
- byte[] cmd = { 0x01, 0x02, 0x03 };
- byte[] res;
-
- while (true) {
- try {
- Log.i("NFC example", "Please wave in front of the tag");
- // Open a connection on next available tag
- try {
- tag = manager.openTagConnection();
- } catch (NfcException e) {
- // TODO: Handle open failure
- }
-
- // Look for a mifare 4k
- type = tag.getType();
- if (type.equals("Mifare4K")) {
- Log.i("NFC example", "Tag detected");
- tag.connect();
- // Ready to communicate, we can send transceive !
- res = tag.transceive(cmd);
- } else {
- Log.i("NFC example", "Unknown tag");
- }
- } catch (IOException e) {
- // TODO: Handle broken connection
- } finally {
- if (tag != null) {
- tag.close();
- }
- }
- }
- }
-}
-</pre>
-
-<h2>Peer-to-Peer Mode raw exchange</h2>
-
-<p>
-This code sample illustrates raw exchanges with a NFC target in Peer-to-Peer
-mode.
-</p>
-<p>Main involved classes/methods:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#openP2pConnection}</li>
- <li>{@link com.trustedlogic.trustednfc.android.P2pDevice}</li>
- <li>{@link com.trustedlogic.trustednfc.android.P2pInitiator}</li>
- <li>{@link com.trustedlogic.trustednfc.android.P2pTarget}</li>
-</ul>
-
-<pre>
-public class P2pSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runP2p() {
- P2pDevice deviceP2p;
- P2pInitiator initiator;
- P2pTarget target;
- byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- byte[] echo = new byte[data.length * 10];
-
- try {
- deviceP2p = manager.openP2pConnection();
-
- if (deviceP2p.getMode() == P2pDevice.MODE_P2P_INITIATOR) {
- target = new P2pTarget(deviceP2p);
- // Connect to the detected P2P target
- target.connect();
- // send data to the target
- target.transceive(data);
- // disconnect the connected target
- target.disconnect();
- } else if (deviceP2p.getMode() == P2pDevice.MODE_P2P_TARGET) {
- initiator = new P2pInitiator(deviceP2p);
- //target in receive state
- echo = initiator.receive();
- // send back the data received
- initiator.send(echo);
- }
- } catch (IOException e0) {
-
- } catch (NfcException e1) {
-
- }
- }
-}
-</pre>
-
-<h2>Peer-to-Peer Mode LLCP exchange</h2>
-
-<p>
-This code sample illustrates how to get LLCP link state notification with the declaration of a Receiver in the manifest of the application and the implementation
-of the receiver in the application.
-</p>
-<p>Manifest Example:</p>
-<pre>
- &lt;receiver android:name=".LlcpModeReceiverSample">
- &lt;intent-filter>
- &lt;action android:name= "com.trustedlogic.trustednfc.android.action.LLCP_LINK_STATE_CHANGED"/>
- &lt;/intent-filter>
- &lt;/receiver>
-</pre>
-
-<p>Receiver Example:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#LLCP_LINK_STATE_CHANGED_ACTION}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#LLCP_LINK_STATE_CHANGED_EXTRA}</li>
-</ul>
-<pre>
-public class LlcpModeReceiverSample extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
-
- if (intent.getAction().equals(NfcManager.LLCP_LINK_STATE_CHANGED_ACTION)){
- byte[] aid = intent.getByteArrayExtra(NfcManager.LLCP_LINK_STATE_CHANGED_EXTRA);
- /* Create an LLCP service or client and start an LLCP communication */
- }
- }
-</pre>
-
-
-<p>
-This code samples illustrate LLCP exchanges with a NFC Peer.
-</p>
-<p>Main involved classes/methods:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpConnectionlessSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpServiceSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpConnectionlessSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpPacket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpServiceSocket}</li>
-</ul>
-
-<pre>
-public class LlcpServerSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runLlcpClient() {
- LlcpSocket sock;
- byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- byte[] echo = new byte[data.length * 10];
- int length = 0;
-
- sock = manager.createLlcpSocket((short) 128, (byte) 2, 1024);
-
- // set a timeout in ms for connect request
- sock.setConnectTimeout(10);
-
- try {
- // Connect to remote service
- // NOTE: could be sock.connect("com.trusted-logic.tnfc.testapp");
- sock.connect((byte) 0x10);
-
- // Send data
- for (int i = 0; i < 10; i++) {
- sock.send(data);
- }
-
- // Receive echo
- while (length < 10 * data.length) {
- length += sock.receive(echo);
- }
-
- } catch (IOException e) {
- // TODO: Handle broken connection broken (link down, remote closure
- // or connect rejected) or Timeout expired
- }
- }
-}
-</pre>
-
-<pre>
-public class LlcpClientSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runLlcpClient() {
- LlcpSocket sock;
- byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- byte[] echo = new byte[data.length * 10];
- int length = 0;
-
- sock = manager.createLlcpSocket((short) 128, (byte) 2, 1024);
- try {
- // Connect to remote service
- // NOTE: could be sock.connect("com.trusted-logic.tnfc.testapp");
- sock.connect((byte) 0x10);
-
- // Send data
- for (int i = 0; i < 10; i++) {
- sock.send(data);
- }
-
- // Receive echo
- while (length < 10 * data.length) {
- length += sock.receive(echo);
- }
-
- } catch (IOException e) {
- // TODO: Handle broken connection broken (link down, remote closure
- // or connect rejected)
- }
- }
-}
-</pre>
-
-<h2>Card Emulation Mode transaction notification</h2>
-
-<p>
-This code sample illustrates how to get the card emulation notification with the declaration of a Receiver in the manifest of the application and the implementation
-of the receiver in the application.
-</p>
-<p>Manifest Example:</p>
-<pre>
- &lt;receiver android:name=".NfcReaderDemoReceiver">
- &lt;intent-filter>
- &lt;action android:name= "com.trustedlogic.trustednfc.android.action.TRANSACTION_DETECTED"/>
- &lt;/intent-filter>
- &lt;/receiver>
-</pre>
-
-<p>Receiver Example:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#TRANSACTION_DETECTED_ACTION}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#AID_EXTRA}</li>
-</ul>
-<pre>
-public class CardEmulationReceiverSample extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
-
- if (intent.getAction().equals(NfcManager.TRANSACTION_DETECTED_ACTION)){
- byte[] aid = intent.getByteArrayExtra(NfcManager.AID_EXTRA);
- /* Manage the AID: */
- /* For example start an activity related to this AID value or display a popup with the AID */
- }
- }
-</pre>
-
-
-
-<h1>Multiple Applications rules</h1>
-
-<p>
-Several LLCP sockets can be created by a single application or by multiple
-applications by calling {@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpSocket},
-{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpConnectionlessSocket} or
-{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpServiceSocket}, provided the local SAP
-numbers are differents.
-</p>
-
-<p>
-Only one application can open a raw connection by calling
-{@link com.trustedlogic.trustednfc.android.NfcManager#openTagConnection} or
-{@link com.trustedlogic.trustednfc.android.NfcManager#openP2pConnection}.
-While this application has not closed or cancelled its connection, any other
-application that attempts to open another raw connection will raise an
-exception.
-During an open connnection, the card emulation mode is always enabled and
-applications are able to receive card emulation intents.
-</p>
-
-<p>
-When an application opens a tag connection by calling
-{@link com.trustedlogic.trustednfc.android.NfcManager#openTagConnection}, this operation is exclusive, no NDEF message intent are
-broadcast while the connection is not closed or canceled.
-</p>
-
-<p>
-When an application opens a peer-to-peer connection by calling
-{@link com.trustedlogic.trustednfc.android.NfcManager#openP2pConnection}, this operation is exclusive, no LLCP intent are broadcast and LLCP sockets are
-disabled while the connection is not closed or canceled.
-</p>
-
-
-<h1>NFC Tag types</h1>
-
-<p>
-The {@link com.trustedlogic.trustednfc.android.NfcTag} type returned by
-{@link com.trustedlogic.trustednfc.android.NfcTag#getType} indicates the set of
-commands supported by the tag. These commands can be used in
-{@link com.trustedlogic.trustednfc.android.NfcTag#transceive}.
-</p>
-
-<TABLE BORDER="1">
- <TR><TH> Tag Type </TH><TH> Returned string </TH></TR>
- <TR><TD> Jewel/Topaz </TD><TD> Jewel </TD></TR>
- <TR><TD> Mifare UltraLight </TD><TD> MifareUL </TD></TR>
- <TR><TD> Mifare Standard 1K </TD><TD> Mifare1K </TD></TR>
- <TR><TD> Mifare Standard 4K </TD><TD> Mifare4K </TD></TR>
- <TR><TD> Mifare DESFIRE </TD><TD> MifareDESFIRE </TD></TR>
- <TR><TD> Felica </TD><TD> Felica </TD></TR>
- <TR><TD> ISO14443-4 A or B </TD><TD> Iso14443 </TD></TR>
- <TR><TD> ISO15693 </TD><TD> Iso15693 </TD></TR>
-</TABLE>
-
-</body>
-</html>
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 3995026..40b9334 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -99,6 +99,10 @@ android_media_AudioSystem_getParameters(JNIEnv *env, jobject thiz, jstring keys)
void android_media_AudioSystem_error_callback(status_t err)
{
JNIEnv *env = AndroidRuntime::getJNIEnv();
+ if (env == NULL) {
+ return;
+ }
+
jclass clazz = env->FindClass("android/media/AudioSystem");
int error;
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 4a877d2..2297834 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -397,8 +397,22 @@ static void dumpNativeHeap(FILE* fp)
ptr += infoSize;
}
- fprintf(fp, "END\n");
free_malloc_leak_info(info);
+
+ fprintf(fp, "MAPS\n");
+ const char* maps = "/proc/self/maps";
+ FILE* in = fopen(maps, "r");
+ if (in == NULL) {
+ fprintf(fp, "Could not open %s\n", maps);
+ return;
+ }
+ char buf[BUFSIZ];
+ while (size_t n = fread(buf, sizeof(char), BUFSIZ, in)) {
+ fwrite(buf, sizeof(char), n, fp);
+ }
+ fclose(in);
+
+ fprintf(fp, "END\n");
}
#endif /*HAVE_ANDROID_OS*/
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 1514b37..122fdf8 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -343,29 +343,12 @@
android:description="@string/permdesc_bluetooth"
android:label="@string/permlab_bluetooth" />
- <!-- Allows applications to access remote NFC devices
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_RAW"
- android:permissionGroup="android.permission-group.NETWORK"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcRaw"
- android:label="@string/permlab_nfcRaw" />
-
- <!-- Allows applications to be notified of remote NFC devices
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_NOTIFY"
- android:permissionGroup="android.permission-group.NETWORK"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcNotify"
- android:label="@string/permlab_nfcNotify" />
-
- <!-- Allows applications to be notified of remote NFC LLCP devices
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_LLCP"
+ <!-- Allows applications to directly communicate over NFC -->
+ <permission android:name="android.permission.NFC"
android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcLlcp"
- android:label="@string/permlab_nfcLlcp" />
+ android:description="@string/permdesc_nfc"
+ android:label="@string/permlab_nfc" />
<!-- Allows an application to use SIP service -->
<permission android:name="android.permission.USE_SIP"
@@ -884,14 +867,6 @@
android:description="@string/permdesc_bluetoothAdmin"
android:label="@string/permlab_bluetoothAdmin" />
- <!-- Allows applications to change NFC connectivity settings
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_ADMIN"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcAdmin"
- android:label="@string/permlab_nfcAdmin" />
-
<!-- Allows an application to clear the caches of all installed
applications on the device. -->
<permission android:name="android.permission.CLEAR_APP_CACHE"
@@ -1389,7 +1364,8 @@
</receiver>
<receiver android:name="com.android.server.MasterClearReceiver"
- android:permission="android.permission.MASTER_CLEAR" >
+ android:permission="android.permission.MASTER_CLEAR"
+ android:priority="100" >
<intent-filter>
<!-- For Checkin, Settings, etc.: action=MASTER_CLEAR -->
<action android:name="android.intent.action.MASTER_CLEAR" />
@@ -1399,8 +1375,11 @@
<category android:name="android.intent.category.MASTER_CLEAR" />
</intent-filter>
</receiver>
- </application>
-</manifest>
+ <service android:name="com.android.internal.os.storage.ExternalStorageFormatter"
+ android:permission="android.permission.MASTER_CLEAR"
+ android:exported="true" />
+ </application>
+</manifest>
diff --git a/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png
index 83c0852..bbfb9f7 100644
--- a/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/dialog_bottom_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png
index c495216..af69ee5 100644
--- a/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/dialog_bottom_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png
index 620adaa..59b9b13 100644
--- a/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png
index b03d6cd..e1ec9dc 100644
--- a/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_dark.png b/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_dark.png
index 785ae6e..0b67f24 100644
--- a/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_light.png b/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_light.png
index d96787b..107ffe4 100644
--- a/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/dialog_ic_close_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_dark.png b/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_dark.png
index d042a81..2711284 100644
--- a/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_light.png b/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_light.png
index 677cf3d..1aca4b7 100644
--- a/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/dialog_ic_close_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_dark.png b/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_dark.png
index 9b13c5b..9e06c00 100644
--- a/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_light.png b/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_light.png
index 8e245fc..f032510 100644
--- a/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/dialog_ic_close_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png
index cffae3e..a9f85ea 100644
--- a/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/dialog_middle_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png
index 0394885..c4c4652 100644
--- a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png
index 6746ce8..32c2cb4 100644
--- a/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/dialog_top_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png
index bdcdc71..7a8fb0e 100644
--- a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png
index e3a30a9..1e2d327 100644
--- a/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dialog_bottom_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png
index f7f344a..ac2d7a3 100644
--- a/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_bottom_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png
index 26bf28a..9d93403 100644
--- a/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png
index 0edfe85..1c08e6a 100644
--- a/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_dark.png b/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_dark.png
index 4f08fb4..cc5f4f4 100644
--- a/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_light.png b/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_light.png
index cc535bd..51b4e4d 100644
--- a/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/dialog_ic_close_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_dark.png b/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_dark.png
index 9d3e5b9..503db7c 100644
--- a/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_light.png b/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_light.png
index 74aff55..6a2fb5e 100644
--- a/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/dialog_ic_close_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_dark.png b/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_dark.png
index c7f7699..3463b66 100644
--- a/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_light.png b/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_light.png
index a10f9a6..55dedc6 100644
--- a/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/dialog_ic_close_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png
index 51e7ec3..741b8dc 100644
--- a/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dialog_middle_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png
index c4b70625a..0854fe5 100644
--- a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png
index 7f97eae..43c0050 100644
--- a/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dialog_top_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png
index 341bb4b..bc5fc92 100644
--- a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png
Binary files differ
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 2490c0f..5add8d6 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1258,11 +1258,6 @@
<public type="attr" name="textSelectHandleWindowStyle" id="0x010102c8" />
<public type="attr" name="popupAnimationStyle" id="0x010102c9" />
- <public-padding type="attr" name="kraken_resource_pad" end="0x01010300" />
-
- <public-padding type="id" name="kraken_resource_pad" end="0x01020040" />
- <public-padding type="anim" name="kraken_resource_pad" end="0x010a0020" />
-
<!-- presence drawables for videochat or audiochat capable contacts -->
<public type="drawable" name="presence_video_away" id="0x010800ac" />
<public type="drawable" name="presence_video_busy" id="0x010800ad" />
@@ -1270,22 +1265,12 @@
<public type="drawable" name="presence_audio_away" id="0x010800af" />
<public type="drawable" name="presence_audio_busy" id="0x010800b0" />
<public type="drawable" name="presence_audio_online" id="0x010800b1" />
- <public-padding type="drawable" name="kraken_resource_pad" end="0x01080100" />
<public type="style" name="TextAppearance.StatusBar.Title" id="0x01030065" />
<public type="style" name="TextAppearance.StatusBar.Icon" id="0x01030066" />
<public type="style" name="TextAppearance.StatusBar.EventContent" id="0x01030067" />
<public type="style" name="TextAppearance.StatusBar.EventContent.Title" id="0x01030068" />
- <public-padding type="style" name="kraken_resource_pad" end="0x01030090" />
-
- <public-padding type="string" name="kraken_resource_pad" end="0x01040020" />
- <public-padding type="integer" name="kraken_resource_pad" end="0x010e0010" />
- <public-padding type="layout" name="kraken_resource_pad" end="0x01090020" />
- <public-padding type="dimen" name="kraken_resource_pad" end="0x01050010" />
- <public-padding type="color" name="kraken_resource_pad" end="0x01060020" />
- <public-padding type="array" name="kraken_resource_pad" end="0x01070010" />
-
<!-- ===============================================================
Resources proposed for Honeycomb.
=============================================================== -->
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 25757a8..edb0819 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1166,28 +1166,10 @@
connections with paired devices.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcAdmin">NFC administration</string>
+ <string name="permlab_nfc">control Near Field Communication</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcAdmin">Allows an application to configure
- the local NFC phone.</string>
-
- <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcRaw">NFC full access to remote device</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcRaw">Allows an application to access
- remote NFC devices.</string>
-
- <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcNotify">NFC notification from remote device</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcNotify">Allows an application to be notified
- of operations related to remote NFC devices.</string>
-
- <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcLlcp">NFC notification from remote LLCP device</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcLlcp">Allows an application to be notified
- of LLCP operations related to remote NFC devices.</string>
+ <string name="permdesc_nfc">Allows an application to communicate
+ with Near Field Communication (NFC) tags, cards, and readers.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_disableKeyguard">disable keylock</string>
@@ -2404,4 +2386,33 @@
<!-- Label for the "Done" button on the far left of action mode toolbars. -->
<string name="action_mode_done">Done</string>
+
+ <!-- Strings for ExternalStorageFormatter service. -->
+ <!-- Text for progress dialog while unmounting USB storage volume [CHAR LIMIT=NONE] -->
+ <string name="progress_unmounting" product="nosdcard">Unmounting USB storage...</string>
+ <!-- Text for progress dialog while unmounting SD card [CHAR LIMIT=NONE] -->
+ <string name="progress_unmounting" product="default">Unmounting SD card...</string>
+ <!-- Text for progress dialog while erasing USB storage volume [CHAR LIMIT=NONE] -->
+ <string name="progress_erasing" product="nosdcard">Erasing USB storage...</string>
+ <!-- Text for progress dialog while erasing SD card [CHAR LIMIT=NONE] -->
+ <string name="progress_erasing" product="default">Erasing SD card...</string>
+ <!-- Text for message to user that an error happened when formatting USB storage [CHAR LIMIT=NONE] -->
+ <string name="format_error" product="nosdcard">Failed to erase USB storage.</string>
+ <!-- Text for message to user that an error happened when formatting SD card [CHAR LIMIT=NONE] -->
+ <string name="format_error" product="default">Failed to erase SD card.</string>
+ <!-- Text for message to user that SD card has been removed while in use [CHAR LIMIT=NONE] -->
+ <string name="media_bad_removal">SD card was removed before being unmounted.</string>
+ <!-- Text for message to user USB storage is currently being checked [CHAR LIMIT=NONE] -->
+ <string name="media_checking" product="nosdcard">USB storage is currently being checked.</string>
+ <!-- Text for message to user SD card is currently being checked [CHAR LIMIT=NONE] -->
+ <string name="media_checking" product="default">SD card is currently being checked.</string>
+ <!-- Text for message to user SD card has been removed [CHAR LIMIT=NONE] -->
+ <string name="media_removed">SD card has been removed.</string>
+ <!-- Text for message to user USB storage is currently mounted on a computer [CHAR LIMIT=NONE] -->
+ <string name="media_shared" product="nosdcard">USB storage is currently in use by a computer.</string>
+ <!-- Text for message to user SD card is currently mounted on a computer [CHAR LIMIT=NONE] -->
+ <string name="media_shared" product="default">SD card is currently in use by a computer.</string>
+ <!-- Text for message for an unknown external media state [CHAR LIMIT=NONE] -->
+ <string name="media_unknown_state">External media in unknown state.</string>
+
</resources>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 06c502b..d7954a7 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -89,7 +89,7 @@
<item name="buttonStyleToggle">@android:style/Widget.Button.Toggle</item>
- <item name="groupButtonBackground">@android:drawable/btn_default</item>
+ <item name="groupButtonBackground">@null</item>
<!-- List attributes -->
<item name="listPreferredItemHeight">64dip</item>
diff --git a/include/ui/InputReader.h b/include/ui/InputReader.h
index eb88d8b..2d4bf8b 100644
--- a/include/ui/InputReader.h
+++ b/include/ui/InputReader.h
@@ -584,6 +584,16 @@ protected:
// Immutable calibration parameters in parsed form.
struct Calibration {
+ // Position
+ bool haveXOrigin;
+ int32_t xOrigin;
+ bool haveYOrigin;
+ int32_t yOrigin;
+ bool haveXScale;
+ float xScale;
+ bool haveYScale;
+ float yScale;
+
// Touch Size
enum TouchSizeCalibration {
TOUCH_SIZE_CALIBRATION_DEFAULT,
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 437a9ef..5bf0ccc 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -6,10 +6,10 @@ include $(CLEAR_VARS)
ifeq ($(USE_OPENGL_RENDERER),true)
LOCAL_SRC_FILES:= \
utils/SortedListImpl.cpp \
- DisplayListRenderer.cpp \
- FboCache.cpp \
FontRenderer.cpp \
GammaFontRenderer.cpp \
+ DisplayListRenderer.cpp \
+ FboCache.cpp \
GradientCache.cpp \
LayerCache.cpp \
Matrix.cpp \
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index 2952a66..e6e494d 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -23,11 +23,12 @@
#include <utils/Singleton.h>
+#include "FontRenderer.h"
+#include "GammaFontRenderer.h"
#include "TextureCache.h"
#include "LayerCache.h"
#include "GradientCache.h"
#include "PatchCache.h"
-#include "GammaFontRenderer.h"
#include "ProgramCache.h"
#include "PathCache.h"
#include "TextDropShadowCache.h"
@@ -37,15 +38,55 @@
namespace android {
namespace uirenderer {
+///////////////////////////////////////////////////////////////////////////////
+// Globals
+///////////////////////////////////////////////////////////////////////////////
+
+#define REQUIRED_TEXTURE_UNITS_COUNT 3
+
+// Generates simple and textured vertices
+#define FV(x, y, u, v) { { x, y }, { u, v } }
+
+// This array is never used directly but used as a memcpy source in the
+// OpenGLRenderer constructor
+static const TextureVertex gMeshVertices[] = {
+ FV(0.0f, 0.0f, 0.0f, 0.0f),
+ FV(1.0f, 0.0f, 1.0f, 0.0f),
+ FV(0.0f, 1.0f, 0.0f, 1.0f),
+ FV(1.0f, 1.0f, 1.0f, 1.0f)
+};
+static const GLsizei gMeshStride = sizeof(TextureVertex);
+static const GLsizei gMeshTextureOffset = 2 * sizeof(float);
+static const GLsizei gMeshCount = 4;
+
+///////////////////////////////////////////////////////////////////////////////
+// Debug
+///////////////////////////////////////////////////////////////////////////////
+
struct CacheLogger {
CacheLogger() {
LOGD("Creating caches");
}
}; // struct CacheLogger
+///////////////////////////////////////////////////////////////////////////////
+// Caches
+///////////////////////////////////////////////////////////////////////////////
+
class Caches: public Singleton<Caches> {
Caches(): Singleton<Caches>(), blend(false), lastSrcMode(GL_ZERO),
lastDstMode(GL_ZERO), currentProgram(NULL) {
+ GLint maxTextureUnits;
+ glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
+ if (maxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) {
+ LOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT);
+ }
+
+ glGenBuffers(1, &meshBuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, meshBuffer);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(gMeshVertices), gMeshVertices, GL_STATIC_DRAW);
+
+ currentBuffer = meshBuffer;
}
friend class Singleton<Caches>;
@@ -53,11 +94,41 @@ class Caches: public Singleton<Caches> {
CacheLogger logger;
public:
+ /**
+ * Binds the VBO used to render simple textured quads.
+ */
+ inline void bindMeshBuffer() {
+ bindMeshBuffer(meshBuffer);
+ }
+
+ /**
+ * Binds the specified VBO.
+ */
+ inline void bindMeshBuffer(const GLuint buffer) {
+ if (currentBuffer != buffer) {
+ glBindBuffer(GL_ARRAY_BUFFER, buffer);
+ currentBuffer = buffer;
+ }
+ }
+
+ /**
+ * Unbinds the VBO used to render simple textured quads.
+ */
+ inline void unbindMeshBuffer() {
+ if (currentBuffer) {
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ currentBuffer = 0;
+ }
+ }
+
bool blend;
GLenum lastSrcMode;
GLenum lastDstMode;
Program* currentProgram;
+ GLuint meshBuffer;
+ GLuint currentBuffer;
+
TextureCache textureCache;
LayerCache layerCache;
GradientCache gradientCache;
diff --git a/libs/hwui/Line.h b/libs/hwui/Line.h
index 64bdd6a..c529354 100644
--- a/libs/hwui/Line.h
+++ b/libs/hwui/Line.h
@@ -96,12 +96,8 @@ public:
ty = lineWidth <= 1.0f ? -gLineAABias : -half - gLineAABias;
}
- inline GLvoid* getVertices() const {
- return &mPatch->vertices[0].position[0];
- }
-
- inline GLvoid* getTexCoords() const {
- return &mPatch->vertices[0].texture[0];
+ inline GLuint getMeshBuffer() const {
+ return mPatch->meshBuffer;
}
inline GLsizei getElementsCount() const {
diff --git a/libs/hwui/Matrix.cpp b/libs/hwui/Matrix.cpp
index 1a0fcf4..83ea615 100644
--- a/libs/hwui/Matrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -55,9 +55,11 @@ void Matrix4::loadIdentity() {
}
bool Matrix4::changesBounds() {
- return !(almost(data[0], 1.0f) && almost(data[1], 0.0f) && almost(data[2], 0.0f) &&
- almost(data[4], 0.0f) && almost(data[5], 1.0f) && almost(data[6], 0.0f) &&
- almost(data[8], 0.0f) && almost(data[9], 0.0f) && almost(data[10], 1.0f));
+ return !(ALMOST_EQUAL(data[0], 1.0f) && ALMOST_EQUAL(data[1], 0.0f) &&
+ ALMOST_EQUAL(data[2], 0.0f) && ALMOST_EQUAL(data[4], 0.0f) &&
+ ALMOST_EQUAL(data[5], 1.0f) && ALMOST_EQUAL(data[6], 0.0f) &&
+ ALMOST_EQUAL(data[8], 0.0f) && ALMOST_EQUAL(data[9], 0.0f) &&
+ ALMOST_EQUAL(data[10], 1.0f));
}
void Matrix4::load(const float* v) {
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 481e2df..5ab5f06 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -35,11 +35,6 @@ namespace uirenderer {
// Defines
///////////////////////////////////////////////////////////////////////////////
-#define REQUIRED_TEXTURE_UNITS_COUNT 3
-
-// Generates simple and textured vertices
-#define FV(x, y, u, v) { { x, y }, { u, v } }
-
#define RAD_TO_DEG (180.0f / 3.14159265f)
#define MIN_ANGLE 0.001f
@@ -50,17 +45,6 @@ namespace uirenderer {
// Globals
///////////////////////////////////////////////////////////////////////////////
-// This array is never used directly but used as a memcpy source in the
-// OpenGLRenderer constructor
-static const TextureVertex gMeshVertices[] = {
- FV(0.0f, 0.0f, 0.0f, 0.0f),
- FV(1.0f, 0.0f, 1.0f, 0.0f),
- FV(0.0f, 1.0f, 0.0f, 1.0f),
- FV(1.0f, 1.0f, 1.0f, 1.0f)
-};
-static const GLsizei gMeshStride = sizeof(TextureVertex);
-static const GLsizei gMeshCount = 4;
-
/**
* Structure mapping Skia xfermodes to OpenGL blending factors.
*/
@@ -124,12 +108,6 @@ OpenGLRenderer::OpenGLRenderer(): mCaches(Caches::getInstance()) {
mFirstSnapshot = new Snapshot;
- GLint maxTextureUnits;
- glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
- if (maxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) {
- LOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT);
- }
-
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
}
@@ -201,6 +179,8 @@ void OpenGLRenderer::releaseContext() {
glDisable(GL_DITHER);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+ mCaches.bindMeshBuffer();
if (mCaches.blend) {
glEnable(GL_BLEND);
@@ -514,11 +494,13 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
}
const Rect& texCoords = layer->texCoords;
+ mCaches.unbindMeshBuffer();
resetDrawTextureTexCoords(texCoords.left, texCoords.top, texCoords.right, texCoords.bottom);
if (fboLayer) {
- drawTextureRect(rect.left, rect.top, rect.right, rect.bottom,
- layer->texture, layer->alpha / 255.0f, layer->mode, layer->blend);
+ drawTextureMesh(rect.left, rect.top, rect.right, rect.bottom, layer->texture,
+ layer->alpha / 255.0f, layer->mode, layer->blend, &mMeshVertices[0].position[0],
+ &mMeshVertices[0].texture[0], GL_TRIANGLE_STRIP, gMeshCount);
} else {
drawTextureMesh(rect.left, rect.top, rect.right, rect.bottom, layer->texture,
1.0f, layer->mode, layer->blend, &mMeshVertices[0].position[0],
@@ -698,9 +680,16 @@ void OpenGLRenderer::drawBitmap(SkBitmap* bitmap,
const float u2 = srcRight / width;
const float v2 = srcBottom / height;
+ mCaches.unbindMeshBuffer();
resetDrawTextureTexCoords(u1, v1, u2, v2);
- drawTextureRect(dstLeft, dstTop, dstRight, dstBottom, texture, paint);
+ int alpha;
+ SkXfermode::Mode mode;
+ getAlphaAndMode(paint, &alpha, &mode);
+
+ drawTextureMesh(dstLeft, dstTop, dstRight, dstBottom, texture->id, alpha / 255.0f,
+ mode, texture->blend, &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
+ GL_TRIANGLE_STRIP, gMeshCount);
resetDrawTextureTexCoords(0.0f, 0.0f, 1.0f, 1.0f);
}
@@ -728,8 +717,8 @@ void OpenGLRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int
// Specify right and bottom as +1.0f from left/top to prevent scaling since the
// patch mesh already defines the final size
drawTextureMesh(left, top, left + 1.0f, top + 1.0f, texture->id, alpha / 255.0f,
- mode, texture->blend, &mesh->vertices[0].position[0],
- &mesh->vertices[0].texture[0], GL_TRIANGLES, mesh->verticesCount);
+ mode, texture->blend, (GLvoid*) 0, (GLvoid*) gMeshTextureOffset,
+ GL_TRIANGLES, mesh->verticesCount, false, false, mesh->meshBuffer);
}
}
@@ -750,7 +739,8 @@ void OpenGLRenderer::drawLines(float* points, int count, const SkPaint* paint) {
if (isAA) {
GLuint textureUnit = 0;
setupTextureAlpha8(mCaches.line.getTexture(), 0, 0, textureUnit, 0.0f, 0.0f, r, g, b, a,
- mode, false, true, mCaches.line.getVertices(), mCaches.line.getTexCoords());
+ mode, false, true, (GLvoid*) 0, (GLvoid*) gMeshTextureOffset,
+ mCaches.line.getMeshBuffer());
} else {
setupColorRect(0.0f, 0.0f, 1.0f, 1.0f, r, g, b, a, mode, false);
}
@@ -891,11 +881,12 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
// Assume that the modelView matrix does not force scales, rotates, etc.
const bool linearFilter = mSnapshot->transform->changesBounds();
setupTextureAlpha8(fontRenderer.getTexture(linearFilter), 0, 0, textureUnit,
- x, y, r, g, b, a, mode, false, true);
+ x, y, r, g, b, a, mode, false, true, NULL, NULL);
const Rect& clip = mSnapshot->getLocalClip();
clearLayerRegions();
+ mCaches.unbindMeshBuffer();
fontRenderer.renderText(paint, &clip, text, 0, bytesCount, count, x, y);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
@@ -1009,21 +1000,20 @@ void OpenGLRenderer::setupTextureAlpha8(const Texture* texture, GLuint& textureU
bool transforms, bool applyFilters) {
setupTextureAlpha8(texture->id, texture->width, texture->height, textureUnit,
x, y, r, g, b, a, mode, transforms, applyFilters,
- &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0]);
+ (GLvoid*) 0, (GLvoid*) gMeshTextureOffset);
}
void OpenGLRenderer::setupTextureAlpha8(GLuint texture, uint32_t width, uint32_t height,
GLuint& textureUnit, float x, float y, float r, float g, float b, float a,
SkXfermode::Mode mode, bool transforms, bool applyFilters) {
- setupTextureAlpha8(texture, width, height, textureUnit,
- x, y, r, g, b, a, mode, transforms, applyFilters,
- &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0]);
+ setupTextureAlpha8(texture, width, height, textureUnit, x, y, r, g, b, a, mode,
+ transforms, applyFilters, (GLvoid*) 0, (GLvoid*) gMeshTextureOffset);
}
void OpenGLRenderer::setupTextureAlpha8(GLuint texture, uint32_t width, uint32_t height,
GLuint& textureUnit, float x, float y, float r, float g, float b, float a,
SkXfermode::Mode mode, bool transforms, bool applyFilters,
- GLvoid* vertices, GLvoid* texCoords) {
+ GLvoid* vertices, GLvoid* texCoords, GLuint vbo) {
// Describe the required shaders
ProgramDescription description;
description.hasTexture = true;
@@ -1051,11 +1041,17 @@ void OpenGLRenderer::setupTextureAlpha8(GLuint texture, uint32_t width, uint32_t
int texCoordsSlot = mCaches.currentProgram->getAttrib("texCoords");
glEnableVertexAttribArray(texCoordsSlot);
- // Setup attributes
- glVertexAttribPointer(mCaches.currentProgram->position, 2, GL_FLOAT, GL_FALSE,
- gMeshStride, vertices);
- glVertexAttribPointer(texCoordsSlot, 2, GL_FLOAT, GL_FALSE,
- gMeshStride, texCoords);
+ if (texCoords) {
+ // Setup attributes
+ if (!vertices) {
+ mCaches.bindMeshBuffer(vbo == 0 ? mCaches.meshBuffer : vbo);
+ } else {
+ mCaches.unbindMeshBuffer();
+ }
+ glVertexAttribPointer(mCaches.currentProgram->position, 2, GL_FLOAT, GL_FALSE,
+ gMeshStride, vertices);
+ glVertexAttribPointer(texCoordsSlot, 2, GL_FLOAT, GL_FALSE, gMeshStride, texCoords);
+ }
// Setup uniforms
if (transforms) {
@@ -1188,8 +1184,9 @@ void OpenGLRenderer::setupColorRect(float left, float top, float right, float bo
useProgram(mCaches.programCache.get(description));
// Setup attributes
+ mCaches.bindMeshBuffer();
glVertexAttribPointer(mCaches.currentProgram->position, 2, GL_FLOAT, GL_FALSE,
- gMeshStride, &mMeshVertices[0].position[0]);
+ gMeshStride, 0);
// Setup uniforms
mModelView.loadTranslate(left, top, 0.0f);
@@ -1218,21 +1215,20 @@ void OpenGLRenderer::drawTextureRect(float left, float top, float right, float b
getAlphaAndMode(paint, &alpha, &mode);
drawTextureMesh(left, top, right, bottom, texture->id, alpha / 255.0f, mode,
- texture->blend, &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
+ texture->blend, (GLvoid*) NULL, (GLvoid*) gMeshTextureOffset,
GL_TRIANGLE_STRIP, gMeshCount);
}
void OpenGLRenderer::drawTextureRect(float left, float top, float right, float bottom,
GLuint texture, float alpha, SkXfermode::Mode mode, bool blend) {
drawTextureMesh(left, top, right, bottom, texture, alpha, mode, blend,
- &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
- GL_TRIANGLE_STRIP, gMeshCount);
+ (GLvoid*) NULL, (GLvoid*) gMeshTextureOffset, GL_TRIANGLE_STRIP, gMeshCount);
}
void OpenGLRenderer::drawTextureMesh(float left, float top, float right, float bottom,
GLuint texture, float alpha, SkXfermode::Mode mode, bool blend,
GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
- bool swapSrcDst, bool ignoreTransform) {
+ bool swapSrcDst, bool ignoreTransform, GLuint vbo) {
clearLayerRegions();
ProgramDescription description;
@@ -1267,6 +1263,12 @@ void OpenGLRenderer::drawTextureMesh(float left, float top, float right, float b
// Mesh
int texCoordsSlot = mCaches.currentProgram->getAttrib("texCoords");
glEnableVertexAttribArray(texCoordsSlot);
+
+ if (!vertices) {
+ mCaches.bindMeshBuffer(vbo == 0 ? mCaches.meshBuffer : vbo);
+ } else {
+ mCaches.unbindMeshBuffer();
+ }
glVertexAttribPointer(mCaches.currentProgram->position, 2, GL_FLOAT, GL_FALSE,
gMeshStride, vertices);
glVertexAttribPointer(texCoordsSlot, 2, GL_FLOAT, GL_FALSE, gMeshStride, texCoords);
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 423614b..1d8a3d9 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -234,8 +234,9 @@ private:
const Texture* texture, const SkPaint* paint);
/**
- * Draws a textured mesh with the specified texture. If the indices are omitted, the
- * mesh is drawn as a simple quad.
+ * Draws a textured mesh with the specified texture. If the indices are omitted,
+ * the mesh is drawn as a simple quad. The mesh pointers become offsets when a
+ * VBO is bound.
*
* @param left The left coordinate of the rectangle
* @param top The top coordinate of the rectangle
@@ -247,15 +248,15 @@ private:
* @param blend True if the texture contains an alpha channel
* @param vertices The vertices that define the mesh
* @param texCoords The texture coordinates of each vertex
- * @param indices The indices of the vertices, can be NULL
* @param elementsCount The number of elements in the mesh, required by indices
* @param swapSrcDst Whether or not the src and dst blending operations should be swapped
* @param ignoreTransform True if the current transform should be ignored
+ * @param vbo The VBO used to draw the mesh
*/
void drawTextureMesh(float left, float top, float right, float bottom, GLuint texture,
float alpha, SkXfermode::Mode mode, bool blend,
GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
- bool swapSrcDst = false, bool ignoreTransform = false);
+ bool swapSrcDst = false, bool ignoreTransform = false, GLuint vbo = 0);
/**
* Prepares the renderer to draw the specified shadow.
@@ -315,12 +316,12 @@ private:
/**
* Same as above setupTextureAlpha8() but specifies the mesh's vertices
- * and texCoords pointers.
+ * and texCoords pointers. The pointers become offsets when a VBO is bound.
*/
void setupTextureAlpha8(GLuint texture, uint32_t width, uint32_t height,
GLuint& textureUnit, float x, float y, float r, float g, float b, float a,
SkXfermode::Mode mode, bool transforms, bool applyFilters,
- GLvoid* vertices, GLvoid* texCoords);
+ GLvoid* vertices, GLvoid* texCoords, GLuint vbo = 0);
/**
* Draws text underline and strike-through if needed.
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 560decf..253a19b 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -21,10 +21,13 @@
#include <utils/Log.h>
#include "Patch.h"
+#include "Caches.h"
namespace android {
namespace uirenderer {
+class Caches;
+
///////////////////////////////////////////////////////////////////////////////
// Constructors/destructor
///////////////////////////////////////////////////////////////////////////////
@@ -32,11 +35,14 @@ namespace uirenderer {
Patch::Patch(const uint32_t xCount, const uint32_t yCount, const int8_t emptyQuads) {
// 2 triangles per patch, 3 vertices per triangle
verticesCount = ((xCount + 1) * (yCount + 1) - emptyQuads) * 2 * 3;
- vertices = new TextureVertex[verticesCount];
+ mVertices = new TextureVertex[verticesCount];
+
+ glGenBuffers(1, &meshBuffer);
}
Patch::~Patch() {
- delete[] vertices;
+ delete[] mVertices;
+ glDeleteBuffers(1, &meshBuffer);
}
///////////////////////////////////////////////////////////////////////////////
@@ -77,7 +83,7 @@ void Patch::updateVertices(const float bitmapWidth, const float bitmapHeight,
stretchY = yStretch / yStretchTex;
}
- TextureVertex* vertex = vertices;
+ TextureVertex* vertex = mVertices;
uint32_t quadCount = 0;
float previousStepY = 0.0f;
@@ -108,6 +114,10 @@ void Patch::updateVertices(const float bitmapWidth, const float bitmapHeight,
generateRow(vertex, y1, bottom - top, v1, 1.0f, xDivs, width, stretchX,
right - left, bitmapWidth, quadCount, colorKey);
+
+ Caches::getInstance().bindMeshBuffer(meshBuffer);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(TextureVertex) * verticesCount,
+ mVertices, GL_STATIC_DRAW);
}
inline void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, float v2,
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index 54c9d6c..ce898937 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -19,6 +19,8 @@
#include <sys/types.h>
+#include <GLES2/gl2.h>
+
#include "Vertex.h"
#include "utils/Compare.h"
@@ -59,14 +61,14 @@ struct PatchDescription {
uint32_t colorKey;
bool operator<(const PatchDescription& rhs) const {
- compare(bitmapWidth) {
- compare(bitmapHeight) {
- compare(pixelWidth) {
- compare(pixelHeight) {
- compareI(xCount) {
- compareI(yCount) {
- compareI(emptyCount) {
- compareI(colorKey) return false;
+ LTE_FLOAT(bitmapWidth) {
+ LTE_FLOAT(bitmapHeight) {
+ LTE_FLOAT(pixelWidth) {
+ LTE_FLOAT(pixelHeight) {
+ LTE_INT(xCount) {
+ LTE_INT(yCount) {
+ LTE_INT(emptyCount) {
+ LTE_INT(colorKey) return false;
}
}
}
@@ -92,10 +94,12 @@ struct Patch {
const uint32_t width, const uint32_t height,
const uint32_t colorKey = 0);
- TextureVertex* vertices;
+ GLuint meshBuffer;
uint32_t verticesCount;
private:
+ TextureVertex* mVertices;
+
static inline void generateRow(TextureVertex*& vertex, float y1, float y2,
float v1, float v2, const int32_t xDivs[], uint32_t xCount,
float stretchX, float width, float bitmapWidth,
diff --git a/libs/hwui/PatchCache.cpp b/libs/hwui/PatchCache.cpp
index 0fad628..71bab91 100644
--- a/libs/hwui/PatchCache.cpp
+++ b/libs/hwui/PatchCache.cpp
@@ -68,7 +68,7 @@ Patch* PatchCache::get(const float bitmapWidth, const float bitmapHeight,
}
// If the 9patch is made of only transparent quads
- if (transparentQuads == (width + 1) * (height + 1)) {
+ if (transparentQuads == int8_t((width + 1) * (height + 1))) {
return NULL;
}
diff --git a/libs/hwui/PathCache.h b/libs/hwui/PathCache.h
index 0c74261..9a5fc45 100644
--- a/libs/hwui/PathCache.h
+++ b/libs/hwui/PathCache.h
@@ -64,12 +64,12 @@ struct PathCacheEntry {
float strokeWidth;
bool operator<(const PathCacheEntry& rhs) const {
- compareI(path) {
- compareI(join) {
- compareI(cap) {
- compareI(style) {
- compare(miter) {
- compare(strokeWidth) return false;
+ LTE_INT(path) {
+ LTE_INT(join) {
+ LTE_INT(cap) {
+ LTE_INT(style) {
+ LTE_FLOAT(miter) {
+ LTE_FLOAT(strokeWidth) return false;
}
}
}
diff --git a/libs/hwui/utils/Compare.h b/libs/hwui/utils/Compare.h
index 754b470..5ea0fc9 100644
--- a/libs/hwui/utils/Compare.h
+++ b/libs/hwui/utils/Compare.h
@@ -21,19 +21,19 @@
#define EPSILON 0.00001f
-#define almost(u, v) (fabs((u) - (v)) < EPSILON)
+#define ALMOST_EQUAL(u, v) (fabs((u) - (v)) < EPSILON)
/**
* Compare floats.
*/
-#define compare(a) \
+#define LTE_FLOAT(a) \
if (a < rhs.a) return true; \
- if (almost(a, rhs.a))
+ if (ALMOST_EQUAL(a, rhs.a))
/**
* Compare integers.
*/
-#define compareI(a) \
+#define LTE_INT(a) \
if (a < rhs.a) return true; \
if (a == rhs.a)
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
index 835dea2..789fa4d 100644
--- a/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java
+++ b/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java
@@ -62,6 +62,7 @@ public class RSTestCore {
unitTests = new ArrayList<UnitTest>();
unitTests.add(new UT_primitives(this, mRes));
+ unitTests.add(new UT_rsdebug(this, mRes));
unitTests.add(new UT_fp_mad(this, mRes));
/*
unitTests.add(new UnitTest(null, "<Pass>", 1));
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
new file mode 100644
index 0000000..c555658
--- /dev/null
+++ b/libs/rs/java/tests/src/com/android/rs/test/UT_rsdebug.java
@@ -0,0 +1,40 @@
+/*
+ * 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.res.Resources;
+import android.renderscript.*;
+
+public class UT_rsdebug extends UnitTest {
+ private Resources mRes;
+
+ protected UT_rsdebug(RSTestCore rstc, Resources res) {
+ super(rstc, "rsDebug");
+ mRes = res;
+ }
+
+ public void run() {
+ RenderScript pRS = RenderScript.create();
+ ScriptC_rsdebug s = new ScriptC_rsdebug(pRS, mRes, R.raw.rsdebug, true);
+ pRS.mMessageCallback = mRsMessage;
+ s.invoke_test_rsdebug(0, 0);
+ pRS.finish();
+ waitForMessage();
+ pRS.destroy();
+ }
+}
+
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
new file mode 100644
index 0000000..a849234
--- /dev/null
+++ b/libs/rs/java/tests/src/com/android/rs/test/rsdebug.rs
@@ -0,0 +1,58 @@
+#include "shared.rsh"
+
+#pragma rs export_func(test_rsdebug)
+
+// 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/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp
index e0de867..9fadee0 100644
--- a/libs/rs/rsScriptC_Lib.cpp
+++ b/libs/rs/rsScriptC_Lib.cpp
@@ -307,6 +307,9 @@ static void SC_debugFv3(const char *s, float f1, float f2, float f3) {
static void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) {
LOGE("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
}
+static void SC_debugD(const char *s, double d) {
+ LOGE("%s %f, 0x%08llx", s, d, *((long long *) (&d)));
+}
static void SC_debugFM4v4(const char *s, const float *f) {
LOGE("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
LOGE("%s %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
@@ -327,7 +330,13 @@ static void SC_debugI32(const char *s, int32_t i) {
LOGE("%s %i 0x%x", s, i, i);
}
static void SC_debugU32(const char *s, uint32_t i) {
- LOGE("%s %i 0x%x", s, i, i);
+ LOGE("%s %u 0x%x", s, i, i);
+}
+static void SC_debugLL64(const char *s, long long ll) {
+ LOGE("%s %lld 0x%llx", s, ll, ll);
+}
+static void SC_debugULL64(const char *s, unsigned long long ll) {
+ LOGE("%s %llu 0x%llx", s, ll, ll);
}
static void SC_debugP(const char *s, const void *p) {
@@ -494,11 +503,19 @@ static ScriptCState::SymbolTable_t gSyms[] = {
{ "_Z7rsDebugPKcff", (void *)&SC_debugFv2 },
{ "_Z7rsDebugPKcfff", (void *)&SC_debugFv3 },
{ "_Z7rsDebugPKcffff", (void *)&SC_debugFv4 },
+ { "_Z7rsDebugPKcd", (void *)&SC_debugD },
{ "_Z7rsDebugPKcPK12rs_matrix4x4", (void *)&SC_debugFM4v4 },
{ "_Z7rsDebugPKcPK12rs_matrix3x3", (void *)&SC_debugFM3v3 },
{ "_Z7rsDebugPKcPK12rs_matrix2x2", (void *)&SC_debugFM2v2 },
{ "_Z7rsDebugPKci", (void *)&SC_debugI32 },
{ "_Z7rsDebugPKcj", (void *)&SC_debugU32 },
+ // Both "long" and "unsigned long" need to be redirected to their
+ // 64-bit counterparts, since we have hacked Slang to use 64-bit
+ // for "long" on Arm (to be similar to Java).
+ { "_Z7rsDebugPKcl", (void *)&SC_debugLL64 },
+ { "_Z7rsDebugPKcm", (void *)&SC_debugULL64 },
+ { "_Z7rsDebugPKcx", (void *)&SC_debugLL64 },
+ { "_Z7rsDebugPKcy", (void *)&SC_debugULL64 },
{ "_Z7rsDebugPKcPKv", (void *)&SC_debugP },
// RS Math
diff --git a/libs/rs/scriptc/rs_core.rsh b/libs/rs/scriptc/rs_core.rsh
index 9950184..0e0532c 100644
--- a/libs/rs/scriptc/rs_core.rsh
+++ b/libs/rs/scriptc/rs_core.rsh
@@ -11,6 +11,8 @@ extern void __attribute__((overloadable))
extern void __attribute__((overloadable))
rsDebug(const char *, float, float, float, float);
extern void __attribute__((overloadable))
+ rsDebug(const char *, double);
+extern void __attribute__((overloadable))
rsDebug(const char *, const rs_matrix4x4 *);
extern void __attribute__((overloadable))
rsDebug(const char *, const rs_matrix3x3 *);
@@ -21,6 +23,14 @@ extern void __attribute__((overloadable))
extern void __attribute__((overloadable))
rsDebug(const char *, uint);
extern void __attribute__((overloadable))
+ rsDebug(const char *, long);
+extern void __attribute__((overloadable))
+ rsDebug(const char *, unsigned long);
+extern void __attribute__((overloadable))
+ rsDebug(const char *, long long);
+extern void __attribute__((overloadable))
+ rsDebug(const char *, unsigned long long);
+extern void __attribute__((overloadable))
rsDebug(const char *, const void *);
#define RS_DEBUG(a) rsDebug(#a, a)
#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)
@@ -803,7 +813,7 @@ static void rsQuaternionGetMatrixUnit(rs_matrix4x4 *m, const rs_quaternion *q) {
/////////////////////////////////////////////////////
// utility funcs
/////////////////////////////////////////////////////
-void __attribute__((overloadable))
+__inline__ static void __attribute__((overloadable, always_inline))
rsExtractFrustumPlanes(const rs_matrix4x4 *modelViewProj,
float4 *left, float4 *right,
float4 *top, float4 *bottom,
@@ -853,7 +863,7 @@ rsExtractFrustumPlanes(const rs_matrix4x4 *modelViewProj,
*far /= len;
}
-bool __attribute__((overloadable))
+__inline__ static bool __attribute__((overloadable, always_inline))
rsIsSphereInFrustum(float4 *sphere,
float4 *left, float4 *right,
float4 *top, float4 *bottom,
diff --git a/libs/rs/scriptc/rs_graphics.rsh b/libs/rs/scriptc/rs_graphics.rsh
index 7c67c0d..54e6328 100644
--- a/libs/rs/scriptc/rs_graphics.rsh
+++ b/libs/rs/scriptc/rs_graphics.rsh
@@ -1,9 +1,6 @@
#ifndef __RS_GRAPHICS_RSH__
#define __RS_GRAPHICS_RSH__
-#include "rs_math.rsh"
-
-
// Bind a ProgramFragment to the RS context.
extern void __attribute__((overloadable))
rsgBindProgramFragment(rs_program_fragment);
diff --git a/libs/ui/InputDispatcher.cpp b/libs/ui/InputDispatcher.cpp
index 949dc4d..93bde13 100644
--- a/libs/ui/InputDispatcher.cpp
+++ b/libs/ui/InputDispatcher.cpp
@@ -2536,9 +2536,9 @@ void InputDispatcher::setInputWindows(const Vector<InputWindow>& inputWindows) {
#if DEBUG_FOCUS
LOGD("Touched window was removed: %s", touchedWindow.channel->getName().string());
#endif
- mTouchState.windows.removeAt(i);
synthesizeCancelationEventsForInputChannelLocked(touchedWindow.channel,
InputState::CANCEL_POINTER_EVENTS, "touched window was removed");
+ mTouchState.windows.removeAt(i);
}
}
diff --git a/libs/ui/InputReader.cpp b/libs/ui/InputReader.cpp
index 01ebda9..88b91e0 100644
--- a/libs/ui/InputReader.cpp
+++ b/libs/ui/InputReader.cpp
@@ -1344,7 +1344,7 @@ void TouchInputMapper::dump(String8& dump) {
dumpRawAxes(dump);
dumpCalibration(dump);
dumpSurfaceLocked(dump);
- dump.appendFormat(INDENT3 "Translation and Scaling Factors:");
+ dump.appendFormat(INDENT3 "Translation and Scaling Factors:\n");
dump.appendFormat(INDENT4 "XOrigin: %d\n", mLocked.xOrigin);
dump.appendFormat(INDENT4 "YOrigin: %d\n", mLocked.yOrigin);
dump.appendFormat(INDENT4 "XScale: %0.3f\n", mLocked.xScale);
@@ -1481,10 +1481,18 @@ bool TouchInputMapper::configureSurfaceLocked() {
// Configure X and Y factors.
if (mRawAxes.x.valid && mRawAxes.y.valid) {
- mLocked.xOrigin = mRawAxes.x.minValue;
- mLocked.yOrigin = mRawAxes.y.minValue;
- mLocked.xScale = float(width) / mRawAxes.x.getRange();
- mLocked.yScale = float(height) / mRawAxes.y.getRange();
+ mLocked.xOrigin = mCalibration.haveXOrigin
+ ? mCalibration.xOrigin
+ : mRawAxes.x.minValue;
+ mLocked.yOrigin = mCalibration.haveYOrigin
+ ? mCalibration.yOrigin
+ : mRawAxes.y.minValue;
+ mLocked.xScale = mCalibration.haveXScale
+ ? mCalibration.xScale
+ : float(width) / mRawAxes.x.getRange();
+ mLocked.yScale = mCalibration.haveYScale
+ ? mCalibration.yScale
+ : float(height) / mRawAxes.y.getRange();
mLocked.xPrecision = 1.0f / mLocked.xScale;
mLocked.yPrecision = 1.0f / mLocked.yScale;
@@ -1750,6 +1758,12 @@ void TouchInputMapper::parseCalibration() {
const InputDeviceCalibration& in = getDevice()->getCalibration();
Calibration& out = mCalibration;
+ // Position
+ out.haveXOrigin = in.tryGetProperty(String8("touch.position.xOrigin"), out.xOrigin);
+ out.haveYOrigin = in.tryGetProperty(String8("touch.position.yOrigin"), out.yOrigin);
+ out.haveXScale = in.tryGetProperty(String8("touch.position.xScale"), out.xScale);
+ out.haveYScale = in.tryGetProperty(String8("touch.position.yScale"), out.yScale);
+
// Touch Size
out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_DEFAULT;
String8 touchSizeCalibrationString;
@@ -1959,6 +1973,20 @@ void TouchInputMapper::resolveCalibration() {
void TouchInputMapper::dumpCalibration(String8& dump) {
dump.append(INDENT3 "Calibration:\n");
+ // Position
+ if (mCalibration.haveXOrigin) {
+ dump.appendFormat(INDENT4 "touch.position.xOrigin: %d\n", mCalibration.xOrigin);
+ }
+ if (mCalibration.haveYOrigin) {
+ dump.appendFormat(INDENT4 "touch.position.yOrigin: %d\n", mCalibration.yOrigin);
+ }
+ if (mCalibration.haveXScale) {
+ dump.appendFormat(INDENT4 "touch.position.xScale: %0.3f\n", mCalibration.xScale);
+ }
+ if (mCalibration.haveYScale) {
+ dump.appendFormat(INDENT4 "touch.position.yScale: %0.3f\n", mCalibration.yScale);
+ }
+
// Touch Size
switch (mCalibration.touchSizeCalibration) {
case Calibration::TOUCH_SIZE_CALIBRATION_NONE:
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index 28126b9..081bd30 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -17,6 +17,7 @@
package com.android.server;
import com.android.internal.content.PackageMonitor;
+import com.android.internal.os.storage.ExternalStorageFormatter;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.JournaledFile;
import com.android.internal.util.XmlUtils;
@@ -42,6 +43,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Binder;
import android.os.IBinder;
import android.os.IPowerManager;
+import android.os.PowerManager;
import android.os.RecoverySystem;
import android.os.RemoteCallback;
import android.os.RemoteException;
@@ -76,6 +78,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
final Context mContext;
final MyPackageMonitor mMonitor;
+ final PowerManager.WakeLock mWakeLock;
IPowerManager mIPowerManager;
@@ -343,6 +346,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
mContext = context;
mMonitor = new MyPackageMonitor();
mMonitor.register(context, true);
+ mWakeLock = ((PowerManager)context.getSystemService(Context.POWER_SERVICE))
+ .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DPM");
}
private IPowerManager getIPowerManager() {
@@ -1345,10 +1350,17 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
void wipeDataLocked(int flags) {
- try {
- RecoverySystem.rebootWipeUserData(mContext);
- } catch (IOException e) {
- Slog.w(TAG, "Failed requesting data wipe", e);
+ if ((flags&DevicePolicyManager.WIPE_EXTERNAL_STORAGE) != 0) {
+ Intent intent = new Intent(ExternalStorageFormatter.FORMAT_AND_FACTORY_RESET);
+ intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
+ mWakeLock.acquire(10000);
+ mContext.startService(intent);
+ } else {
+ try {
+ RecoverySystem.rebootWipeUserData(mContext);
+ } catch (IOException e) {
+ Slog.w(TAG, "Failed requesting data wipe", e);
+ }
}
}
diff --git a/services/java/com/android/server/MasterClearReceiver.java b/services/java/com/android/server/MasterClearReceiver.java
index 4d04cee..bdb5a24 100644
--- a/services/java/com/android/server/MasterClearReceiver.java
+++ b/services/java/com/android/server/MasterClearReceiver.java
@@ -29,7 +29,7 @@ public class MasterClearReceiver extends BroadcastReceiver {
private static final String TAG = "MasterClear";
@Override
- public void onReceive(Context context, Intent intent) {
+ public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(Intent.ACTION_REMOTE_INTENT)) {
if (!"google.com".equals(intent.getStringExtra("from"))) {
Slog.w(TAG, "Ignoring master clear request -- not from trusted server.");
@@ -37,16 +37,23 @@ public class MasterClearReceiver extends BroadcastReceiver {
}
}
- try {
- Slog.w(TAG, "!!! FACTORY RESET !!!");
- if (intent.hasExtra("enableEFS")) {
- RecoverySystem.rebootToggleEFS(context, intent.getBooleanExtra("enableEFS", false));
- } else {
- RecoverySystem.rebootWipeUserData(context);
+ Slog.w(TAG, "!!! FACTORY RESET !!!");
+ // The reboot call is blocking, so we need to do it on another thread.
+ Thread thr = new Thread("Reboot") {
+ @Override
+ public void run() {
+ try {
+ if (intent.hasExtra("enableEFS")) {
+ RecoverySystem.rebootToggleEFS(context, intent.getBooleanExtra("enableEFS", false));
+ } else {
+ RecoverySystem.rebootWipeUserData(context);
+ }
+ Log.wtf(TAG, "Still running after master clear?!");
+ } catch (IOException e) {
+ Slog.e(TAG, "Can't perform master clear/factory reset", e);
+ }
}
- Log.wtf(TAG, "Still running after master clear?!");
- } catch (IOException e) {
- Slog.e(TAG, "Can't perform master clear/factory reset", e);
- }
+ };
+ thr.start();
}
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index ca763ef..ec12e80 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -215,6 +215,7 @@ class ServerThread extends Thread {
bluetoothA2dp = new BluetoothA2dpService(context, bluetooth);
ServiceManager.addService(BluetoothA2dpService.BLUETOOTH_A2DP_SERVICE,
bluetoothA2dp);
+ bluetooth.initAfterA2dpRegistration();
int bluetoothOn = Settings.Secure.getInt(mContentResolver,
Settings.Secure.BLUETOOTH_ON, 0);
@@ -438,7 +439,7 @@ class ServerThread extends Thread {
} catch (Throwable e) {
Slog.e(TAG, "Failure starting Recognition Service", e);
}
-
+
try {
Slog.i(TAG, "DiskStats Service");
ServiceManager.addService("diskstats", new DiskStatsService(context));
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 9c2c562..b0ace2f 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -7137,6 +7137,9 @@ public final class ActivityManagerService extends ActivityManagerNative
if (mHeavyWeightProcess == app) {
currApp.flags |= ActivityManager.RunningAppProcessInfo.FLAG_CANT_SAVE_STATE;
}
+ if (app.persistent) {
+ currApp.flags |= ActivityManager.RunningAppProcessInfo.FLAG_PERSISTENT;
+ }
int adj = app.curAdj;
if (adj >= EMPTY_APP_ADJ) {
currApp.importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_EMPTY;
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java b/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java
index dea549a..50111f6 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java
@@ -72,21 +72,17 @@ public class FileFilter {
};
static final String[] ignoreTestList = {
+ "canvas/philip/tests/2d.drawImage.broken.html", // blocks test, http://b/2982500
"editing/selection/move-left-right.html", // Causes DumpRenderTree to hang
"fast/js/excessive-comma-usage.html", // Tests huge initializer list, causes OOM.
"fast/js/regexp-charclass-crash.html", // RegExp is too large, causing OOM
+ "fast/js/regexp-overflow.html", // Result is too large, causing OOM when reading by DRT, http://b/2697589
"fast/regex/test1.html", // Causes DumpRenderTree to hang with V8
"fast/regex/slow.html", // Causes DumpRenderTree to hang with V8
- "ietestcenter/Javascript/15.4.4.15-3-14.html", // hangs the layout tests
- // http://b/issue?id=2889595
- "ietestcenter/Javascript/15.4.4.15-3-29.html", // hangs the layout tests
- // http://b/issue?id=2889596
- "ietestcenter/Javascript/15.4.4.15-3-8.html", // hangs the layout tests
- // http://b/issue?id=2889598
- "http/tests/xmlhttprequest/simple-cross-origin-progress-events.html", // runs webcore into bad state
- // http://b/2982500
- "canvas/philip/tests/2d.drawImage.broken.html", // blocks test
- // http://b/2982500
+ "http/tests/xmlhttprequest/simple-cross-origin-progress-events.html", // runs webcore into bad state, http://b/2929261
+ "ietestcenter/Javascript/15.4.4.15-3-14.html", // hangs the layout tests, http://b/2889595
+ "ietestcenter/Javascript/15.4.4.15-3-29.html", // hangs the layout tests, http://b/2889596
+ "ietestcenter/Javascript/15.4.4.15-3-8.html", // hangs the layout tests, http://b/2889598
};
static void fillIgnoreResultList() {
diff --git a/tests/DumpRenderTree2/assets/run_apache2.py b/tests/DumpRenderTree2/assets/run_apache2.py
index 5edead1..b4a8685 100755
--- a/tests/DumpRenderTree2/assets/run_apache2.py
+++ b/tests/DumpRenderTree2/assets/run_apache2.py
@@ -29,19 +29,14 @@ import logging
import optparse
import time
-def main(options, args):
- if len(args) < 1:
- run_cmd = ""
- else:
- run_cmd = args[0]
-
+def main(run_cmd, options):
# Setup logging class
logging.basicConfig(level=logging.INFO, format='%(message)s')
if not run_cmd in ("start", "stop", "restart"):
logging.info("illegal argument: " + run_cmd)
logging.info("Usage: python run_apache2.py start|stop|restart")
- return
+ return False
# Create /tmp/WebKit if it doesn't exist. This is needed for various files used by apache2
tmp_WebKit = os.path.join("/tmp", "WebKit")
@@ -114,14 +109,25 @@ def main(options, args):
# to a different PidFile it will not work and will result in a second apache2 instance.
if (run_cmd == 'restart'):
logging.info("First will stop...")
- execute_cmd(export_envvars_cmd + " && " + (apache2_restart_template % ('stop')) + directives + conf_file_cmd)
+ if execute_cmd(envvars_path, error_log_path,
+ export_envvars_cmd + " && " + (apache2_restart_template % ('stop')) + directives + conf_file_cmd) == False:
+ logging.info("Failed to stop Apache2")
+ return False
logging.info("Stopped. Will start now...")
# We need to sleep breifly to avoid errors with apache being stopped and started too quickly
time.sleep(0.5)
- execute_cmd(export_envvars_cmd + " && " + (apache2_restart_template % (run_cmd)) + directives + conf_file_cmd)
+ if execute_cmd(envvars_path, error_log_path,
+ export_envvars_cmd + " && " +
+ (apache2_restart_template % (run_cmd)) + directives +
+ conf_file_cmd) == False:
+ logging.info("Failed to start Apache2")
+ return False
+
+ logging.info("Successfully started")
+ return True
-def execute_cmd(cmd):
+def execute_cmd(envvars_path, error_log_path, cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = p.communicate()
@@ -139,12 +145,19 @@ def execute_cmd(cmd):
else:
logging.info(err)
logging.info("Try looking in " + error_log_path + " for details")
- else:
- logging.info("OK")
+ return False
+
+ return True
if __name__ == "__main__":
option_parser = optparse.OptionParser(usage="Usage: %prog [options] start|stop|restart")
option_parser.add_option("", "--tests-root-directory",
help="The directory from which to take the tests, default is external/webkit/LayoutTests in this checkout of the Android tree")
options, args = option_parser.parse_args();
- main(options, args);
+
+ if len(args) < 1:
+ run_cmd = ""
+ else:
+ run_cmd = args[0]
+
+ main(run_cmd, options)
diff --git a/tests/DumpRenderTree2/assets/run_layout_tests.py b/tests/DumpRenderTree2/assets/run_layout_tests.py
index 303a054..0dfd229 100755
--- a/tests/DumpRenderTree2/assets/run_layout_tests.py
+++ b/tests/DumpRenderTree2/assets/run_layout_tests.py
@@ -18,31 +18,19 @@ import subprocess
import tempfile
import webbrowser
+import run_apache2
+
#TODO: These should not be hardcoded
RESULTS_ABSOLUTE_PATH = "/sdcard/layout-test-results/"
DETAILS_HTML = "details.html"
SUMMARY_TXT = "summary.txt"
-def main(options, args):
- if args:
- path = " ".join(args);
- else:
- path = "";
-
- logging.basicConfig(level=logging.INFO, format='%(message)s')
-
+def main(path, options):
tmpdir = tempfile.gettempdir()
- if options.tests_root_directory != None:
- # if options.tests_root_directory is absolute, os.getcwd() is discarded!
- tests_root_directory = os.path.normpath(os.path.join(os.getcwd(), options.tests_root_directory))
- server_options = " --tests-root-directory=" + tests_root_directory
- else:
- server_options = "";
-
# Restart the server
- cmd = os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), "run_apache2.py") + server_options + " restart"
- os.system(cmd);
+ if run_apache2.main("restart", options) == False:
+ return
# Run the tests in path
adb_cmd = "adb"
@@ -91,4 +79,14 @@ if __name__ == "__main__":
help="The directory from which to take the tests, default is external/webkit/LayoutTests in this checkout of the Android tree")
option_parser.add_option("-s", "--serial", default=None, help="Specify the serial number of device to run test on")
options, args = option_parser.parse_args();
- main(options, args);
+
+ logging.basicConfig(level=logging.INFO, format='%(message)s')
+
+ if len(args) > 1:
+ logging.fatal("Usage: run_layout_tests.py [options] test-relative-path")
+ else:
+ if len(args) < 1:
+ path = "";
+ else:
+ path = args[0]
+ main(path, options);
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
index af8f6ea..58f7183 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
@@ -404,23 +404,26 @@ public class LayoutTestsExecutor extends Activity {
}
private void startTests() {
+ if (mCurrentTestIndex == 0) {
+ sendFirstTestMessage();
+ }
+
+ runNextTest();
+ }
+
+ private void sendFirstTestMessage() {
try {
- Message serviceMsg =
- Message.obtain(null, ManagerService.MSG_FIRST_TEST);
+ Message serviceMsg = Message.obtain(null, ManagerService.MSG_FIRST_TEST);
Bundle bundle = new Bundle();
- if (!mTestsList.isEmpty()) {
- bundle.putString("firstTest", mTestsList.get(0));
- bundle.putInt("index", mCurrentTestIndex);
- }
+ bundle.putString("firstTest", mTestsList.get(0));
+ bundle.putInt("index", mCurrentTestIndex);
serviceMsg.setData(bundle);
mManagerServiceMessenger.send(serviceMsg);
} catch (RemoteException e) {
- Log.e(LOG_TAG, "mCurrentTestRelativePath=" + mCurrentTestRelativePath, e);
+ Log.e(LOG_TAG, "Error sending message to manager service:", e);
}
-
- runNextTest();
}
private void runNextTest() {
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java
index 8d01a53..bd8c4ad 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/Summarizer.java
@@ -539,6 +539,11 @@ public class Summarizer {
String textSource = result.getExpectedTextResultPath();
String imageSource = result.getExpectedImageResultPath();
+ if (result.didCrash()) {
+ html.append("<span class=\"source\">Did not look for expected results</span>");
+ return;
+ }
+
if (textSource == null) {
// Show if a text result is missing. We may want to revisit this decision when we add
// support for image results.