diff options
96 files changed, 1230 insertions, 4481 deletions
@@ -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=""android.permission.NFC"" + 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> - <receiver android:name=".NfcReaderDemoReceiver"> - <intent-filter> - <action android:name= "com.trustedlogic.trustednfc.android.action.NDEF_TAG_DISCOVERED"/> - </intent-filter> - </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> - <receiver android:name=".LlcpModeReceiverSample"> - <intent-filter> - <action android:name= "com.trustedlogic.trustednfc.android.action.LLCP_LINK_STATE_CHANGED"/> - </intent-filter> - </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> - <receiver android:name=".NfcReaderDemoReceiver"> - <intent-filter> - <action android:name= "com.trustedlogic.trustednfc.android.action.TRANSACTION_DETECTED"/> - </intent-filter> - </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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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. |
