Merge "Filter virtual keys after touches." into honeycomb
diff --git a/Android.mk b/Android.mk
index ad7027c..f581515 100644
--- a/Android.mk
+++ b/Android.mk
@@ -366,7 +366,7 @@
-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 \
+ -since ./frameworks/base/api/current.xml Honeycomb \
-werror -hide 113 \
-overview $(LOCAL_PATH)/core/java/overview.html
@@ -436,15 +436,14 @@
## SDK version identifiers used in the published docs
# major[.minor] version for current SDK. (full releases only)
-framework_docs_SDK_VERSION:=2.3
+framework_docs_SDK_VERSION:=3.0
# release version (ie "Release x") (full releases only)
-framework_docs_SDK_REL_ID:=1
+framework_docs_SDK_REL_ID:=Preview
framework_docs_LOCAL_DROIDDOC_OPTIONS += \
-hdf sdk.version $(framework_docs_SDK_VERSION) \
-hdf sdk.rel.id $(framework_docs_SDK_REL_ID) \
-hdf sdk.preview true \
- -hdf sdk.preview.version Honeycomb
# ==== the api stubs and current.xml ===========================
include $(CLEAR_VARS)
diff --git a/api/11.xml b/api/11.xml
index 6d12990..5087eca 100644
--- a/api/11.xml
+++ b/api/11.xml
@@ -1790,7 +1790,7 @@
type="int"
transient="false"
volatile="false"
- value="16843501"
+ value="16843499"
static="true"
final="true"
deprecated="not deprecated"
@@ -1812,7 +1812,7 @@
type="int"
transient="false"
volatile="false"
- value="16843510"
+ value="16843508"
static="true"
final="true"
deprecated="not deprecated"
@@ -1823,7 +1823,7 @@
type="int"
transient="false"
volatile="false"
- value="16843509"
+ value="16843507"
static="true"
final="true"
deprecated="not deprecated"
@@ -1834,7 +1834,7 @@
type="int"
transient="false"
volatile="false"
- value="16843511"
+ value="16843509"
static="true"
final="true"
deprecated="not deprecated"
@@ -1867,7 +1867,7 @@
type="int"
transient="false"
volatile="false"
- value="16843517"
+ value="16843515"
static="true"
final="true"
deprecated="not deprecated"
@@ -1889,7 +1889,7 @@
type="int"
transient="false"
volatile="false"
- value="16843513"
+ value="16843511"
static="true"
final="true"
deprecated="not deprecated"
@@ -1911,7 +1911,7 @@
type="int"
transient="false"
volatile="false"
- value="16843540"
+ value="16843538"
static="true"
final="true"
deprecated="not deprecated"
@@ -1922,7 +1922,7 @@
type="int"
transient="false"
volatile="false"
- value="16843539"
+ value="16843537"
static="true"
final="true"
deprecated="not deprecated"
@@ -1933,7 +1933,7 @@
type="int"
transient="false"
volatile="false"
- value="16843541"
+ value="16843539"
static="true"
final="true"
deprecated="not deprecated"
@@ -1944,7 +1944,7 @@
type="int"
transient="false"
volatile="false"
- value="16843512"
+ value="16843510"
static="true"
final="true"
deprecated="not deprecated"
@@ -1955,7 +1955,7 @@
type="int"
transient="false"
volatile="false"
- value="16843518"
+ value="16843516"
static="true"
final="true"
deprecated="not deprecated"
@@ -1966,7 +1966,7 @@
type="int"
transient="false"
volatile="false"
- value="16843519"
+ value="16843517"
static="true"
final="true"
deprecated="not deprecated"
@@ -2043,7 +2043,7 @@
type="int"
transient="false"
volatile="false"
- value="16843607"
+ value="16843605"
static="true"
final="true"
deprecated="not deprecated"
@@ -2065,7 +2065,7 @@
type="int"
transient="false"
volatile="false"
- value="16843531"
+ value="16843529"
static="true"
final="true"
deprecated="not deprecated"
@@ -2109,7 +2109,7 @@
type="int"
transient="false"
volatile="false"
- value="16843572"
+ value="16843570"
static="true"
final="true"
deprecated="not deprecated"
@@ -2142,7 +2142,7 @@
type="int"
transient="false"
volatile="false"
- value="16843553"
+ value="16843551"
static="true"
final="true"
deprecated="not deprecated"
@@ -2208,7 +2208,7 @@
type="int"
transient="false"
volatile="false"
- value="16843508"
+ value="16843506"
static="true"
final="true"
deprecated="not deprecated"
@@ -2274,7 +2274,7 @@
type="int"
transient="false"
volatile="false"
- value="16843548"
+ value="16843546"
static="true"
final="true"
deprecated="not deprecated"
@@ -2340,7 +2340,7 @@
type="int"
transient="false"
volatile="false"
- value="16843537"
+ value="16843535"
static="true"
final="true"
deprecated="not deprecated"
@@ -2450,7 +2450,7 @@
type="int"
transient="false"
volatile="false"
- value="16843550"
+ value="16843548"
static="true"
final="true"
deprecated="not deprecated"
@@ -2494,7 +2494,7 @@
type="int"
transient="false"
volatile="false"
- value="16843565"
+ value="16843563"
static="true"
final="true"
deprecated="not deprecated"
@@ -2582,7 +2582,7 @@
type="int"
transient="false"
volatile="false"
- value="16843526"
+ value="16843524"
static="true"
final="true"
deprecated="not deprecated"
@@ -2593,7 +2593,7 @@
type="int"
transient="false"
volatile="false"
- value="16843525"
+ value="16843523"
static="true"
final="true"
deprecated="not deprecated"
@@ -2626,7 +2626,7 @@
type="int"
transient="false"
volatile="false"
- value="16843569"
+ value="16843567"
static="true"
final="true"
deprecated="not deprecated"
@@ -2637,7 +2637,7 @@
type="int"
transient="false"
volatile="false"
- value="16843568"
+ value="16843566"
static="true"
final="true"
deprecated="not deprecated"
@@ -2703,7 +2703,7 @@
type="int"
transient="false"
volatile="false"
- value="16843598"
+ value="16843596"
static="true"
final="true"
deprecated="not deprecated"
@@ -3220,7 +3220,7 @@
type="int"
transient="false"
volatile="false"
- value="16843581"
+ value="16843579"
static="true"
final="true"
deprecated="not deprecated"
@@ -3275,7 +3275,7 @@
type="int"
transient="false"
volatile="false"
- value="16843595"
+ value="16843593"
static="true"
final="true"
deprecated="not deprecated"
@@ -3385,7 +3385,7 @@
type="int"
transient="false"
volatile="false"
- value="16843600"
+ value="16843598"
static="true"
final="true"
deprecated="not deprecated"
@@ -3451,7 +3451,7 @@
type="int"
transient="false"
volatile="false"
- value="16843530"
+ value="16843528"
static="true"
final="true"
deprecated="not deprecated"
@@ -3572,7 +3572,7 @@
type="int"
transient="false"
volatile="false"
- value="16843566"
+ value="16843564"
static="true"
final="true"
deprecated="not deprecated"
@@ -3583,7 +3583,7 @@
type="int"
transient="false"
volatile="false"
- value="16843564"
+ value="16843562"
static="true"
final="true"
deprecated="not deprecated"
@@ -3594,7 +3594,7 @@
type="int"
transient="false"
volatile="false"
- value="16843532"
+ value="16843530"
static="true"
final="true"
deprecated="not deprecated"
@@ -3825,7 +3825,7 @@
type="int"
transient="false"
volatile="false"
- value="16843604"
+ value="16843602"
static="true"
final="true"
deprecated="not deprecated"
@@ -3836,7 +3836,7 @@
type="int"
transient="false"
volatile="false"
- value="16843603"
+ value="16843601"
static="true"
final="true"
deprecated="not deprecated"
@@ -3946,7 +3946,7 @@
type="int"
transient="false"
volatile="false"
- value="16843534"
+ value="16843532"
static="true"
final="true"
deprecated="not deprecated"
@@ -4001,7 +4001,7 @@
type="int"
transient="false"
volatile="false"
- value="16843535"
+ value="16843533"
static="true"
final="true"
deprecated="not deprecated"
@@ -4199,7 +4199,7 @@
type="int"
transient="false"
volatile="false"
- value="16843575"
+ value="16843573"
static="true"
final="true"
deprecated="not deprecated"
@@ -4221,7 +4221,7 @@
type="int"
transient="false"
volatile="false"
- value="16843580"
+ value="16843578"
static="true"
final="true"
deprecated="not deprecated"
@@ -4232,7 +4232,7 @@
type="int"
transient="false"
volatile="false"
- value="16843577"
+ value="16843575"
static="true"
final="true"
deprecated="not deprecated"
@@ -4243,7 +4243,7 @@
type="int"
transient="false"
volatile="false"
- value="16843578"
+ value="16843576"
static="true"
final="true"
deprecated="not deprecated"
@@ -4254,7 +4254,7 @@
type="int"
transient="false"
volatile="false"
- value="16843611"
+ value="16843609"
static="true"
final="true"
deprecated="not deprecated"
@@ -4265,7 +4265,7 @@
type="int"
transient="false"
volatile="false"
- value="16843576"
+ value="16843574"
static="true"
final="true"
deprecated="not deprecated"
@@ -4276,7 +4276,7 @@
type="int"
transient="false"
volatile="false"
- value="16843579"
+ value="16843577"
static="true"
final="true"
deprecated="not deprecated"
@@ -4375,7 +4375,7 @@
type="int"
transient="false"
volatile="false"
- value="16843583"
+ value="16843581"
static="true"
final="true"
deprecated="not deprecated"
@@ -4430,7 +4430,7 @@
type="int"
transient="false"
volatile="false"
- value="16843589"
+ value="16843587"
static="true"
final="true"
deprecated="not deprecated"
@@ -4514,7 +4514,7 @@
visibility="public"
>
</field>
-<field name="fragmentNextEnterAnimation"
+<field name="fragmentFadeEnterAnimation"
type="int"
transient="false"
volatile="false"
@@ -4525,7 +4525,7 @@
visibility="public"
>
</field>
-<field name="fragmentNextExitAnimation"
+<field name="fragmentFadeExitAnimation"
type="int"
transient="false"
volatile="false"
@@ -4558,28 +4558,6 @@
visibility="public"
>
</field>
-<field name="fragmentPrevEnterAnimation"
- type="int"
- transient="false"
- volatile="false"
- value="16843499"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="fragmentPrevExitAnimation"
- type="int"
- transient="false"
- volatile="false"
- value="16843500"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="freezesText"
type="int"
transient="false"
@@ -4969,7 +4947,7 @@
type="int"
transient="false"
volatile="false"
- value="16843533"
+ value="16843531"
static="true"
final="true"
deprecated="not deprecated"
@@ -4980,7 +4958,7 @@
type="int"
transient="false"
volatile="false"
- value="16843551"
+ value="16843549"
static="true"
final="true"
deprecated="not deprecated"
@@ -5013,7 +4991,7 @@
type="int"
transient="false"
volatile="false"
- value="16843605"
+ value="16843603"
static="true"
final="true"
deprecated="not deprecated"
@@ -5068,7 +5046,7 @@
type="int"
transient="false"
volatile="false"
- value="16843516"
+ value="16843514"
static="true"
final="true"
deprecated="not deprecated"
@@ -5189,7 +5167,7 @@
type="int"
transient="false"
volatile="false"
- value="16843504"
+ value="16843502"
static="true"
final="true"
deprecated="not deprecated"
@@ -5200,7 +5178,7 @@
type="int"
transient="false"
volatile="false"
- value="16843502"
+ value="16843500"
static="true"
final="true"
deprecated="not deprecated"
@@ -5211,7 +5189,7 @@
type="int"
transient="false"
volatile="false"
- value="16843503"
+ value="16843501"
static="true"
final="true"
deprecated="not deprecated"
@@ -5321,7 +5299,7 @@
type="int"
transient="false"
volatile="false"
- value="16843546"
+ value="16843544"
static="true"
final="true"
deprecated="not deprecated"
@@ -5497,7 +5475,7 @@
type="int"
transient="false"
volatile="false"
- value="16843573"
+ value="16843571"
static="true"
final="true"
deprecated="not deprecated"
@@ -5596,7 +5574,7 @@
type="int"
transient="false"
volatile="false"
- value="16843567"
+ value="16843565"
static="true"
final="true"
deprecated="not deprecated"
@@ -5827,7 +5805,7 @@
type="int"
transient="false"
volatile="false"
- value="16843612"
+ value="16843610"
static="true"
final="true"
deprecated="not deprecated"
@@ -5860,7 +5838,7 @@
type="int"
transient="false"
volatile="false"
- value="16843606"
+ value="16843604"
static="true"
final="true"
deprecated="not deprecated"
@@ -6289,7 +6267,7 @@
type="int"
transient="false"
volatile="false"
- value="16843506"
+ value="16843504"
static="true"
final="true"
deprecated="not deprecated"
@@ -6333,7 +6311,7 @@
type="int"
transient="false"
volatile="false"
- value="16843527"
+ value="16843525"
static="true"
final="true"
deprecated="not deprecated"
@@ -6344,7 +6322,7 @@
type="int"
transient="false"
volatile="false"
- value="16843521"
+ value="16843519"
static="true"
final="true"
deprecated="not deprecated"
@@ -6432,7 +6410,7 @@
type="int"
transient="false"
volatile="false"
- value="16843529"
+ value="16843527"
static="true"
final="true"
deprecated="not deprecated"
@@ -6487,7 +6465,7 @@
type="int"
transient="false"
volatile="false"
- value="16843586"
+ value="16843584"
static="true"
final="true"
deprecated="not deprecated"
@@ -6641,7 +6619,7 @@
type="int"
transient="false"
volatile="false"
- value="16843585"
+ value="16843583"
static="true"
final="true"
deprecated="not deprecated"
@@ -6795,7 +6773,7 @@
type="int"
transient="false"
volatile="false"
- value="16843582"
+ value="16843580"
static="true"
final="true"
deprecated="not deprecated"
@@ -6927,7 +6905,7 @@
type="int"
transient="false"
volatile="false"
- value="16843552"
+ value="16843550"
static="true"
final="true"
deprecated="not deprecated"
@@ -7323,7 +7301,7 @@
type="int"
transient="false"
volatile="false"
- value="16843522"
+ value="16843520"
static="true"
final="true"
deprecated="not deprecated"
@@ -7477,7 +7455,7 @@
type="int"
transient="false"
volatile="false"
- value="16843547"
+ value="16843545"
static="true"
final="true"
deprecated="not deprecated"
@@ -7642,7 +7620,7 @@
type="int"
transient="false"
volatile="false"
- value="16843610"
+ value="16843608"
static="true"
final="true"
deprecated="not deprecated"
@@ -7961,7 +7939,7 @@
type="int"
transient="false"
volatile="false"
- value="16843560"
+ value="16843558"
static="true"
final="true"
deprecated="not deprecated"
@@ -7972,7 +7950,7 @@
type="int"
transient="false"
volatile="false"
- value="16843561"
+ value="16843559"
static="true"
final="true"
deprecated="not deprecated"
@@ -7983,7 +7961,7 @@
type="int"
transient="false"
volatile="false"
- value="16843562"
+ value="16843560"
static="true"
final="true"
deprecated="not deprecated"
@@ -8082,7 +8060,7 @@
type="int"
transient="false"
volatile="false"
- value="16843558"
+ value="16843556"
static="true"
final="true"
deprecated="not deprecated"
@@ -8093,7 +8071,7 @@
type="int"
transient="false"
volatile="false"
- value="16843559"
+ value="16843557"
static="true"
final="true"
deprecated="not deprecated"
@@ -8445,7 +8423,7 @@
type="int"
transient="false"
volatile="false"
- value="16843570"
+ value="16843568"
static="true"
final="true"
deprecated="not deprecated"
@@ -8478,7 +8456,7 @@
type="int"
transient="false"
volatile="false"
- value="16843536"
+ value="16843534"
static="true"
final="true"
deprecated="not deprecated"
@@ -8489,7 +8467,7 @@
type="int"
transient="false"
volatile="false"
- value="16843593"
+ value="16843591"
static="true"
final="true"
deprecated="not deprecated"
@@ -8500,7 +8478,7 @@
type="int"
transient="false"
volatile="false"
- value="16843588"
+ value="16843586"
static="true"
final="true"
deprecated="not deprecated"
@@ -8643,7 +8621,7 @@
type="int"
transient="false"
volatile="false"
- value="16843563"
+ value="16843561"
static="true"
final="true"
deprecated="not deprecated"
@@ -8665,7 +8643,7 @@
type="int"
transient="false"
volatile="false"
- value="16843584"
+ value="16843582"
static="true"
final="true"
deprecated="not deprecated"
@@ -8676,7 +8654,7 @@
type="int"
transient="false"
volatile="false"
- value="16843587"
+ value="16843585"
static="true"
final="true"
deprecated="not deprecated"
@@ -8742,7 +8720,7 @@
type="int"
transient="false"
volatile="false"
- value="16843596"
+ value="16843594"
static="true"
final="true"
deprecated="not deprecated"
@@ -8797,7 +8775,7 @@
type="int"
transient="false"
volatile="false"
- value="16843507"
+ value="16843505"
static="true"
final="true"
deprecated="not deprecated"
@@ -8819,7 +8797,7 @@
type="int"
transient="false"
volatile="false"
- value="16843597"
+ value="16843595"
static="true"
final="true"
deprecated="not deprecated"
@@ -8830,7 +8808,7 @@
type="int"
transient="false"
volatile="false"
- value="16843505"
+ value="16843503"
static="true"
final="true"
deprecated="not deprecated"
@@ -8929,7 +8907,7 @@
type="int"
transient="false"
volatile="false"
- value="16843549"
+ value="16843547"
static="true"
final="true"
deprecated="not deprecated"
@@ -8940,7 +8918,7 @@
type="int"
transient="false"
volatile="false"
- value="16843520"
+ value="16843518"
static="true"
final="true"
deprecated="not deprecated"
@@ -9072,7 +9050,7 @@
type="int"
transient="false"
volatile="false"
- value="16843599"
+ value="16843597"
static="true"
final="true"
deprecated="not deprecated"
@@ -9127,7 +9105,7 @@
type="int"
transient="false"
volatile="false"
- value="16843571"
+ value="16843569"
static="true"
final="true"
deprecated="not deprecated"
@@ -9193,7 +9171,7 @@
type="int"
transient="false"
volatile="false"
- value="16843515"
+ value="16843513"
static="true"
final="true"
deprecated="not deprecated"
@@ -9578,7 +9556,7 @@
type="int"
transient="false"
volatile="false"
- value="16843523"
+ value="16843521"
static="true"
final="true"
deprecated="not deprecated"
@@ -9655,7 +9633,7 @@
type="int"
transient="false"
volatile="false"
- value="16843524"
+ value="16843522"
static="true"
final="true"
deprecated="not deprecated"
@@ -9699,7 +9677,7 @@
type="int"
transient="false"
volatile="false"
- value="16843528"
+ value="16843526"
static="true"
final="true"
deprecated="not deprecated"
@@ -9721,7 +9699,7 @@
type="int"
transient="false"
volatile="false"
- value="16843601"
+ value="16843599"
static="true"
final="true"
deprecated="not deprecated"
@@ -9765,7 +9743,7 @@
type="int"
transient="false"
volatile="false"
- value="16843602"
+ value="16843600"
static="true"
final="true"
deprecated="not deprecated"
@@ -9908,7 +9886,7 @@
type="int"
transient="false"
volatile="false"
- value="16843543"
+ value="16843541"
static="true"
final="true"
deprecated="not deprecated"
@@ -9919,7 +9897,7 @@
type="int"
transient="false"
volatile="false"
- value="16843542"
+ value="16843540"
static="true"
final="true"
deprecated="not deprecated"
@@ -9941,7 +9919,7 @@
type="int"
transient="false"
volatile="false"
- value="16843544"
+ value="16843542"
static="true"
final="true"
deprecated="not deprecated"
@@ -10172,7 +10150,7 @@
type="int"
transient="false"
volatile="false"
- value="16843514"
+ value="16843512"
static="true"
final="true"
deprecated="not deprecated"
@@ -10326,7 +10304,7 @@
type="int"
transient="false"
volatile="false"
- value="16843554"
+ value="16843552"
static="true"
final="true"
deprecated="not deprecated"
@@ -10337,7 +10315,7 @@
type="int"
transient="false"
volatile="false"
- value="16843555"
+ value="16843553"
static="true"
final="true"
deprecated="not deprecated"
@@ -10348,7 +10326,7 @@
type="int"
transient="false"
volatile="false"
- value="16843556"
+ value="16843554"
static="true"
final="true"
deprecated="not deprecated"
@@ -10359,7 +10337,7 @@
type="int"
transient="false"
volatile="false"
- value="16843557"
+ value="16843555"
static="true"
final="true"
deprecated="not deprecated"
@@ -10403,7 +10381,7 @@
type="int"
transient="false"
volatile="false"
- value="16843590"
+ value="16843588"
static="true"
final="true"
deprecated="not deprecated"
@@ -10436,7 +10414,7 @@
type="int"
transient="false"
volatile="false"
- value="16843538"
+ value="16843536"
static="true"
final="true"
deprecated="not deprecated"
@@ -10579,7 +10557,7 @@
type="int"
transient="false"
volatile="false"
- value="16843574"
+ value="16843572"
static="true"
final="true"
deprecated="not deprecated"
@@ -10799,7 +10777,7 @@
type="int"
transient="false"
volatile="false"
- value="16843594"
+ value="16843592"
static="true"
final="true"
deprecated="not deprecated"
@@ -10810,7 +10788,7 @@
type="int"
transient="false"
volatile="false"
- value="16843591"
+ value="16843589"
static="true"
final="true"
deprecated="not deprecated"
@@ -10821,7 +10799,7 @@
type="int"
transient="false"
volatile="false"
- value="16843592"
+ value="16843590"
static="true"
final="true"
deprecated="not deprecated"
@@ -10942,7 +10920,7 @@
type="int"
transient="false"
volatile="false"
- value="16843545"
+ value="16843543"
static="true"
final="true"
deprecated="not deprecated"
@@ -11030,7 +11008,7 @@
type="int"
transient="false"
volatile="false"
- value="16843608"
+ value="16843606"
static="true"
final="true"
deprecated="not deprecated"
@@ -11041,7 +11019,7 @@
type="int"
transient="false"
volatile="false"
- value="16843609"
+ value="16843607"
static="true"
final="true"
deprecated="not deprecated"
@@ -28602,17 +28580,6 @@
visibility="public"
>
</method>
-<method name="getCancelable"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getDialog"
return="android.app.Dialog"
abstract="false"
@@ -28646,6 +28613,17 @@
visibility="public"
>
</method>
+<method name="isCancelable"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="onCancel"
return="void"
abstract="false"
@@ -28822,6 +28800,19 @@
<parameter name="request" type="android.app.DownloadManager.Request">
</parameter>
</method>
+<method name="getMaxBytesOverMobile"
+ return="java.lang.Long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+</method>
<method name="getMimeTypeForDownloadedFile"
return="java.lang.String"
abstract="false"
@@ -28835,6 +28826,19 @@
<parameter name="id" type="long">
</parameter>
</method>
+<method name="getRecommendedMaxBytesOverMobile"
+ return="java.lang.Long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+</method>
<method name="getUriForDownloadedFile"
return="android.net.Uri"
abstract="false"
@@ -30683,17 +30687,6 @@
visibility="public"
>
</method>
-<method name="countBackStackEntries"
- return="int"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="dump"
return="void"
abstract="true"
@@ -30763,7 +30756,7 @@
<parameter name="tag" type="java.lang.String">
</parameter>
</method>
-<method name="getBackStackEntry"
+<method name="getBackStackEntryAt"
return="android.app.FragmentManager.BackStackEntry"
abstract="true"
native="false"
@@ -30776,6 +30769,17 @@
<parameter name="index" type="int">
</parameter>
</method>
+<method name="getBackStackEntryCount"
+ return="int"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getFragment"
return="android.app.Fragment"
abstract="true"
@@ -30791,17 +30795,6 @@
<parameter name="key" type="java.lang.String">
</parameter>
</method>
-<method name="openTransaction"
- return="android.app.FragmentTransaction"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="popBackStack"
return="void"
abstract="true"
@@ -30944,6 +30937,17 @@
visibility="public"
>
</method>
+<method name="getBreadCrumbShortTitleRes"
+ return="int"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getBreadCrumbTitle"
return="java.lang.CharSequence"
abstract="true"
@@ -30955,6 +30959,17 @@
visibility="public"
>
</method>
+<method name="getBreadCrumbTitleRes"
+ return="int"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getId"
return="int"
abstract="true"
@@ -31314,7 +31329,7 @@
visibility="public"
>
</field>
-<field name="TRANSIT_FRAGMENT_NEXT"
+<field name="TRANSIT_FRAGMENT_FADE"
type="int"
transient="false"
volatile="false"
@@ -31336,17 +31351,6 @@
visibility="public"
>
</field>
-<field name="TRANSIT_FRAGMENT_PREV"
- type="int"
- transient="false"
- volatile="false"
- value="8196"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="TRANSIT_NONE"
type="int"
transient="false"
@@ -33072,19 +33076,6 @@
<parameter name="callback" type="android.app.LoaderManager.LoaderCallbacks<D>">
</parameter>
</method>
-<method name="stopLoader"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="deprecated"
- visibility="public"
->
-<parameter name="id" type="int">
-</parameter>
-</method>
</class>
<interface name="LoaderManager.LoaderCallbacks"
abstract="true"
@@ -43781,7 +43772,7 @@
visibility="public"
>
</method>
-<method name="onCancelled"
+<method name="onCanceled"
return="void"
abstract="false"
native="false"
@@ -43794,6 +43785,19 @@
<parameter name="data" type="D">
</parameter>
</method>
+<method name="onCancelled"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="deprecated"
+ visibility="public"
+>
+<parameter name="data" type="D">
+</parameter>
+</method>
<method name="onLoadInBackground"
return="D"
abstract="false"
@@ -43818,17 +43822,6 @@
<parameter name="delayMS" type="long">
</parameter>
</method>
-<method name="waitForLoader"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
</class>
<class name="BroadcastReceiver"
extends="java.lang.Object"
@@ -44236,8 +44229,6 @@
</parameter>
<parameter name="mimeTypes" type="java.lang.String[]">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="item" type="android.content.ClipData.Item">
</parameter>
</constructor>
@@ -44250,8 +44241,6 @@
>
<parameter name="description" type="android.content.ClipDescription">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="item" type="android.content.ClipData.Item">
</parameter>
</constructor>
@@ -44290,18 +44279,7 @@
visibility="public"
>
</method>
-<method name="getIcon"
- return="android.graphics.Bitmap"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getItem"
+<method name="getItemAt"
return="android.content.ClipData.Item"
abstract="false"
native="false"
@@ -44337,8 +44315,6 @@
>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="intent" type="android.content.Intent">
</parameter>
</method>
@@ -44354,8 +44330,6 @@
>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="text" type="java.lang.CharSequence">
</parameter>
</method>
@@ -44371,8 +44345,6 @@
>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="uri" type="android.net.Uri">
</parameter>
</method>
@@ -44390,8 +44362,6 @@
</parameter>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="uri" type="android.net.Uri">
</parameter>
</method>
@@ -50362,6 +50332,16 @@
>
<parameter name="context" type="android.content.Context">
</parameter>
+</constructor>
+<constructor name="CursorLoader"
+ type="android.content.CursorLoader"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
<parameter name="uri" type="android.net.Uri">
</parameter>
<parameter name="projection" type="java.lang.String[]">
@@ -50452,7 +50432,7 @@
visibility="public"
>
</method>
-<method name="onCancelled"
+<method name="onCanceled"
return="void"
abstract="false"
native="false"
@@ -57386,145 +57366,6 @@
>
</field>
</class>
-<class name="XmlDocumentProvider"
- extends="android.content.ContentProvider"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="XmlDocumentProvider"
- type="android.content.XmlDocumentProvider"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-<method name="delete"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="selection" type="java.lang.String">
-</parameter>
-<parameter name="selectionArgs" type="java.lang.String[]">
-</parameter>
-</method>
-<method name="getResourceXmlPullParser"
- return="org.xmlpull.v1.XmlPullParser"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="protected"
->
-<parameter name="resourceUri" type="android.net.Uri">
-</parameter>
-</method>
-<method name="getType"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-</method>
-<method name="getUriXmlPullParser"
- return="org.xmlpull.v1.XmlPullParser"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="protected"
->
-<parameter name="url" type="java.lang.String">
-</parameter>
-</method>
-<method name="insert"
- return="android.net.Uri"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="values" type="android.content.ContentValues">
-</parameter>
-</method>
-<method name="onCreate"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="query"
- return="android.database.Cursor"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="projection" type="java.lang.String[]">
-</parameter>
-<parameter name="selection" type="java.lang.String">
-</parameter>
-<parameter name="selectionArgs" type="java.lang.String[]">
-</parameter>
-<parameter name="sortOrder" type="java.lang.String">
-</parameter>
-</method>
-<method name="update"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="values" type="android.content.ContentValues">
-</parameter>
-<parameter name="selection" type="java.lang.String">
-</parameter>
-<parameter name="selectionArgs" type="java.lang.String[]">
-</parameter>
-</method>
-</class>
</package>
<package name="android.content.pm"
>
@@ -57794,17 +57635,6 @@
type="int"
transient="false"
volatile="false"
- value="1024"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="FLAG_IMMERSIVE"
- type="int"
- transient="false"
- volatile="false"
value="512"
static="true"
final="true"
diff --git a/api/current.xml b/api/current.xml
index 6d12990..4f566f6 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -1790,7 +1790,7 @@
type="int"
transient="false"
volatile="false"
- value="16843501"
+ value="16843499"
static="true"
final="true"
deprecated="not deprecated"
@@ -1812,7 +1812,7 @@
type="int"
transient="false"
volatile="false"
- value="16843510"
+ value="16843508"
static="true"
final="true"
deprecated="not deprecated"
@@ -1823,7 +1823,7 @@
type="int"
transient="false"
volatile="false"
- value="16843509"
+ value="16843507"
static="true"
final="true"
deprecated="not deprecated"
@@ -1834,7 +1834,7 @@
type="int"
transient="false"
volatile="false"
- value="16843511"
+ value="16843509"
static="true"
final="true"
deprecated="not deprecated"
@@ -1867,7 +1867,7 @@
type="int"
transient="false"
volatile="false"
- value="16843517"
+ value="16843515"
static="true"
final="true"
deprecated="not deprecated"
@@ -1889,7 +1889,7 @@
type="int"
transient="false"
volatile="false"
- value="16843513"
+ value="16843511"
static="true"
final="true"
deprecated="not deprecated"
@@ -1911,7 +1911,7 @@
type="int"
transient="false"
volatile="false"
- value="16843540"
+ value="16843538"
static="true"
final="true"
deprecated="not deprecated"
@@ -1922,7 +1922,7 @@
type="int"
transient="false"
volatile="false"
- value="16843539"
+ value="16843537"
static="true"
final="true"
deprecated="not deprecated"
@@ -1933,7 +1933,7 @@
type="int"
transient="false"
volatile="false"
- value="16843541"
+ value="16843539"
static="true"
final="true"
deprecated="not deprecated"
@@ -1944,7 +1944,7 @@
type="int"
transient="false"
volatile="false"
- value="16843512"
+ value="16843510"
static="true"
final="true"
deprecated="not deprecated"
@@ -1955,7 +1955,7 @@
type="int"
transient="false"
volatile="false"
- value="16843518"
+ value="16843516"
static="true"
final="true"
deprecated="not deprecated"
@@ -1966,7 +1966,7 @@
type="int"
transient="false"
volatile="false"
- value="16843519"
+ value="16843517"
static="true"
final="true"
deprecated="not deprecated"
@@ -2043,7 +2043,7 @@
type="int"
transient="false"
volatile="false"
- value="16843607"
+ value="16843605"
static="true"
final="true"
deprecated="not deprecated"
@@ -2065,7 +2065,7 @@
type="int"
transient="false"
volatile="false"
- value="16843531"
+ value="16843529"
static="true"
final="true"
deprecated="not deprecated"
@@ -2109,7 +2109,7 @@
type="int"
transient="false"
volatile="false"
- value="16843572"
+ value="16843570"
static="true"
final="true"
deprecated="not deprecated"
@@ -2142,7 +2142,7 @@
type="int"
transient="false"
volatile="false"
- value="16843553"
+ value="16843551"
static="true"
final="true"
deprecated="not deprecated"
@@ -2208,7 +2208,7 @@
type="int"
transient="false"
volatile="false"
- value="16843508"
+ value="16843506"
static="true"
final="true"
deprecated="not deprecated"
@@ -2274,7 +2274,7 @@
type="int"
transient="false"
volatile="false"
- value="16843548"
+ value="16843546"
static="true"
final="true"
deprecated="not deprecated"
@@ -2340,7 +2340,7 @@
type="int"
transient="false"
volatile="false"
- value="16843537"
+ value="16843535"
static="true"
final="true"
deprecated="not deprecated"
@@ -2450,7 +2450,7 @@
type="int"
transient="false"
volatile="false"
- value="16843550"
+ value="16843548"
static="true"
final="true"
deprecated="not deprecated"
@@ -2494,7 +2494,7 @@
type="int"
transient="false"
volatile="false"
- value="16843565"
+ value="16843563"
static="true"
final="true"
deprecated="not deprecated"
@@ -2582,7 +2582,7 @@
type="int"
transient="false"
volatile="false"
- value="16843526"
+ value="16843524"
static="true"
final="true"
deprecated="not deprecated"
@@ -2593,7 +2593,7 @@
type="int"
transient="false"
volatile="false"
- value="16843525"
+ value="16843523"
static="true"
final="true"
deprecated="not deprecated"
@@ -2626,7 +2626,7 @@
type="int"
transient="false"
volatile="false"
- value="16843569"
+ value="16843567"
static="true"
final="true"
deprecated="not deprecated"
@@ -2637,7 +2637,7 @@
type="int"
transient="false"
volatile="false"
- value="16843568"
+ value="16843566"
static="true"
final="true"
deprecated="not deprecated"
@@ -2703,7 +2703,7 @@
type="int"
transient="false"
volatile="false"
- value="16843598"
+ value="16843596"
static="true"
final="true"
deprecated="not deprecated"
@@ -3220,7 +3220,7 @@
type="int"
transient="false"
volatile="false"
- value="16843581"
+ value="16843579"
static="true"
final="true"
deprecated="not deprecated"
@@ -3275,7 +3275,7 @@
type="int"
transient="false"
volatile="false"
- value="16843595"
+ value="16843593"
static="true"
final="true"
deprecated="not deprecated"
@@ -3385,7 +3385,7 @@
type="int"
transient="false"
volatile="false"
- value="16843600"
+ value="16843598"
static="true"
final="true"
deprecated="not deprecated"
@@ -3451,7 +3451,7 @@
type="int"
transient="false"
volatile="false"
- value="16843530"
+ value="16843528"
static="true"
final="true"
deprecated="not deprecated"
@@ -3572,7 +3572,7 @@
type="int"
transient="false"
volatile="false"
- value="16843566"
+ value="16843564"
static="true"
final="true"
deprecated="not deprecated"
@@ -3583,7 +3583,7 @@
type="int"
transient="false"
volatile="false"
- value="16843564"
+ value="16843562"
static="true"
final="true"
deprecated="not deprecated"
@@ -3594,7 +3594,7 @@
type="int"
transient="false"
volatile="false"
- value="16843532"
+ value="16843530"
static="true"
final="true"
deprecated="not deprecated"
@@ -3825,7 +3825,7 @@
type="int"
transient="false"
volatile="false"
- value="16843604"
+ value="16843602"
static="true"
final="true"
deprecated="not deprecated"
@@ -3836,7 +3836,7 @@
type="int"
transient="false"
volatile="false"
- value="16843603"
+ value="16843601"
static="true"
final="true"
deprecated="not deprecated"
@@ -3946,7 +3946,7 @@
type="int"
transient="false"
volatile="false"
- value="16843534"
+ value="16843532"
static="true"
final="true"
deprecated="not deprecated"
@@ -4001,7 +4001,7 @@
type="int"
transient="false"
volatile="false"
- value="16843535"
+ value="16843533"
static="true"
final="true"
deprecated="not deprecated"
@@ -4199,7 +4199,7 @@
type="int"
transient="false"
volatile="false"
- value="16843575"
+ value="16843573"
static="true"
final="true"
deprecated="not deprecated"
@@ -4221,7 +4221,7 @@
type="int"
transient="false"
volatile="false"
- value="16843580"
+ value="16843578"
static="true"
final="true"
deprecated="not deprecated"
@@ -4232,7 +4232,7 @@
type="int"
transient="false"
volatile="false"
- value="16843577"
+ value="16843575"
static="true"
final="true"
deprecated="not deprecated"
@@ -4243,7 +4243,7 @@
type="int"
transient="false"
volatile="false"
- value="16843578"
+ value="16843576"
static="true"
final="true"
deprecated="not deprecated"
@@ -4254,7 +4254,7 @@
type="int"
transient="false"
volatile="false"
- value="16843611"
+ value="16843609"
static="true"
final="true"
deprecated="not deprecated"
@@ -4265,7 +4265,7 @@
type="int"
transient="false"
volatile="false"
- value="16843576"
+ value="16843574"
static="true"
final="true"
deprecated="not deprecated"
@@ -4276,7 +4276,7 @@
type="int"
transient="false"
volatile="false"
- value="16843579"
+ value="16843577"
static="true"
final="true"
deprecated="not deprecated"
@@ -4375,7 +4375,7 @@
type="int"
transient="false"
volatile="false"
- value="16843583"
+ value="16843581"
static="true"
final="true"
deprecated="not deprecated"
@@ -4430,7 +4430,7 @@
type="int"
transient="false"
volatile="false"
- value="16843589"
+ value="16843587"
static="true"
final="true"
deprecated="not deprecated"
@@ -4514,7 +4514,7 @@
visibility="public"
>
</field>
-<field name="fragmentNextEnterAnimation"
+<field name="fragmentFadeEnterAnimation"
type="int"
transient="false"
volatile="false"
@@ -4525,7 +4525,7 @@
visibility="public"
>
</field>
-<field name="fragmentNextExitAnimation"
+<field name="fragmentFadeExitAnimation"
type="int"
transient="false"
volatile="false"
@@ -4558,28 +4558,6 @@
visibility="public"
>
</field>
-<field name="fragmentPrevEnterAnimation"
- type="int"
- transient="false"
- volatile="false"
- value="16843499"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="fragmentPrevExitAnimation"
- type="int"
- transient="false"
- volatile="false"
- value="16843500"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="freezesText"
type="int"
transient="false"
@@ -4969,7 +4947,7 @@
type="int"
transient="false"
volatile="false"
- value="16843533"
+ value="16843531"
static="true"
final="true"
deprecated="not deprecated"
@@ -4980,7 +4958,7 @@
type="int"
transient="false"
volatile="false"
- value="16843551"
+ value="16843549"
static="true"
final="true"
deprecated="not deprecated"
@@ -5013,7 +4991,7 @@
type="int"
transient="false"
volatile="false"
- value="16843605"
+ value="16843603"
static="true"
final="true"
deprecated="not deprecated"
@@ -5068,7 +5046,7 @@
type="int"
transient="false"
volatile="false"
- value="16843516"
+ value="16843514"
static="true"
final="true"
deprecated="not deprecated"
@@ -5189,7 +5167,7 @@
type="int"
transient="false"
volatile="false"
- value="16843504"
+ value="16843502"
static="true"
final="true"
deprecated="not deprecated"
@@ -5200,7 +5178,7 @@
type="int"
transient="false"
volatile="false"
- value="16843502"
+ value="16843500"
static="true"
final="true"
deprecated="not deprecated"
@@ -5211,7 +5189,7 @@
type="int"
transient="false"
volatile="false"
- value="16843503"
+ value="16843501"
static="true"
final="true"
deprecated="not deprecated"
@@ -5321,7 +5299,7 @@
type="int"
transient="false"
volatile="false"
- value="16843546"
+ value="16843544"
static="true"
final="true"
deprecated="not deprecated"
@@ -5497,7 +5475,7 @@
type="int"
transient="false"
volatile="false"
- value="16843573"
+ value="16843571"
static="true"
final="true"
deprecated="not deprecated"
@@ -5596,7 +5574,7 @@
type="int"
transient="false"
volatile="false"
- value="16843567"
+ value="16843565"
static="true"
final="true"
deprecated="not deprecated"
@@ -5827,7 +5805,7 @@
type="int"
transient="false"
volatile="false"
- value="16843612"
+ value="16843610"
static="true"
final="true"
deprecated="not deprecated"
@@ -5860,7 +5838,7 @@
type="int"
transient="false"
volatile="false"
- value="16843606"
+ value="16843604"
static="true"
final="true"
deprecated="not deprecated"
@@ -6289,7 +6267,7 @@
type="int"
transient="false"
volatile="false"
- value="16843506"
+ value="16843504"
static="true"
final="true"
deprecated="not deprecated"
@@ -6333,7 +6311,7 @@
type="int"
transient="false"
volatile="false"
- value="16843527"
+ value="16843525"
static="true"
final="true"
deprecated="not deprecated"
@@ -6344,7 +6322,7 @@
type="int"
transient="false"
volatile="false"
- value="16843521"
+ value="16843519"
static="true"
final="true"
deprecated="not deprecated"
@@ -6432,7 +6410,7 @@
type="int"
transient="false"
volatile="false"
- value="16843529"
+ value="16843527"
static="true"
final="true"
deprecated="not deprecated"
@@ -6487,7 +6465,7 @@
type="int"
transient="false"
volatile="false"
- value="16843586"
+ value="16843584"
static="true"
final="true"
deprecated="not deprecated"
@@ -6641,7 +6619,7 @@
type="int"
transient="false"
volatile="false"
- value="16843585"
+ value="16843583"
static="true"
final="true"
deprecated="not deprecated"
@@ -6795,7 +6773,7 @@
type="int"
transient="false"
volatile="false"
- value="16843582"
+ value="16843580"
static="true"
final="true"
deprecated="not deprecated"
@@ -6927,7 +6905,7 @@
type="int"
transient="false"
volatile="false"
- value="16843552"
+ value="16843550"
static="true"
final="true"
deprecated="not deprecated"
@@ -7323,7 +7301,7 @@
type="int"
transient="false"
volatile="false"
- value="16843522"
+ value="16843520"
static="true"
final="true"
deprecated="not deprecated"
@@ -7477,7 +7455,7 @@
type="int"
transient="false"
volatile="false"
- value="16843547"
+ value="16843545"
static="true"
final="true"
deprecated="not deprecated"
@@ -7642,7 +7620,7 @@
type="int"
transient="false"
volatile="false"
- value="16843610"
+ value="16843608"
static="true"
final="true"
deprecated="not deprecated"
@@ -7961,7 +7939,7 @@
type="int"
transient="false"
volatile="false"
- value="16843560"
+ value="16843558"
static="true"
final="true"
deprecated="not deprecated"
@@ -7972,7 +7950,7 @@
type="int"
transient="false"
volatile="false"
- value="16843561"
+ value="16843559"
static="true"
final="true"
deprecated="not deprecated"
@@ -7983,7 +7961,7 @@
type="int"
transient="false"
volatile="false"
- value="16843562"
+ value="16843560"
static="true"
final="true"
deprecated="not deprecated"
@@ -8082,7 +8060,7 @@
type="int"
transient="false"
volatile="false"
- value="16843558"
+ value="16843556"
static="true"
final="true"
deprecated="not deprecated"
@@ -8093,7 +8071,7 @@
type="int"
transient="false"
volatile="false"
- value="16843559"
+ value="16843557"
static="true"
final="true"
deprecated="not deprecated"
@@ -8445,7 +8423,7 @@
type="int"
transient="false"
volatile="false"
- value="16843570"
+ value="16843568"
static="true"
final="true"
deprecated="not deprecated"
@@ -8478,7 +8456,7 @@
type="int"
transient="false"
volatile="false"
- value="16843536"
+ value="16843534"
static="true"
final="true"
deprecated="not deprecated"
@@ -8489,7 +8467,7 @@
type="int"
transient="false"
volatile="false"
- value="16843593"
+ value="16843591"
static="true"
final="true"
deprecated="not deprecated"
@@ -8500,7 +8478,7 @@
type="int"
transient="false"
volatile="false"
- value="16843588"
+ value="16843586"
static="true"
final="true"
deprecated="not deprecated"
@@ -8643,7 +8621,7 @@
type="int"
transient="false"
volatile="false"
- value="16843563"
+ value="16843561"
static="true"
final="true"
deprecated="not deprecated"
@@ -8665,7 +8643,7 @@
type="int"
transient="false"
volatile="false"
- value="16843584"
+ value="16843582"
static="true"
final="true"
deprecated="not deprecated"
@@ -8676,7 +8654,7 @@
type="int"
transient="false"
volatile="false"
- value="16843587"
+ value="16843585"
static="true"
final="true"
deprecated="not deprecated"
@@ -8742,7 +8720,7 @@
type="int"
transient="false"
volatile="false"
- value="16843596"
+ value="16843594"
static="true"
final="true"
deprecated="not deprecated"
@@ -8797,7 +8775,7 @@
type="int"
transient="false"
volatile="false"
- value="16843507"
+ value="16843505"
static="true"
final="true"
deprecated="not deprecated"
@@ -8819,7 +8797,7 @@
type="int"
transient="false"
volatile="false"
- value="16843597"
+ value="16843595"
static="true"
final="true"
deprecated="not deprecated"
@@ -8830,7 +8808,7 @@
type="int"
transient="false"
volatile="false"
- value="16843505"
+ value="16843503"
static="true"
final="true"
deprecated="not deprecated"
@@ -8929,7 +8907,7 @@
type="int"
transient="false"
volatile="false"
- value="16843549"
+ value="16843547"
static="true"
final="true"
deprecated="not deprecated"
@@ -8940,7 +8918,7 @@
type="int"
transient="false"
volatile="false"
- value="16843520"
+ value="16843518"
static="true"
final="true"
deprecated="not deprecated"
@@ -9072,7 +9050,7 @@
type="int"
transient="false"
volatile="false"
- value="16843599"
+ value="16843597"
static="true"
final="true"
deprecated="not deprecated"
@@ -9127,7 +9105,7 @@
type="int"
transient="false"
volatile="false"
- value="16843571"
+ value="16843569"
static="true"
final="true"
deprecated="not deprecated"
@@ -9193,7 +9171,7 @@
type="int"
transient="false"
volatile="false"
- value="16843515"
+ value="16843513"
static="true"
final="true"
deprecated="not deprecated"
@@ -9578,7 +9556,7 @@
type="int"
transient="false"
volatile="false"
- value="16843523"
+ value="16843521"
static="true"
final="true"
deprecated="not deprecated"
@@ -9655,7 +9633,7 @@
type="int"
transient="false"
volatile="false"
- value="16843524"
+ value="16843522"
static="true"
final="true"
deprecated="not deprecated"
@@ -9699,7 +9677,7 @@
type="int"
transient="false"
volatile="false"
- value="16843528"
+ value="16843526"
static="true"
final="true"
deprecated="not deprecated"
@@ -9721,7 +9699,7 @@
type="int"
transient="false"
volatile="false"
- value="16843601"
+ value="16843599"
static="true"
final="true"
deprecated="not deprecated"
@@ -9765,7 +9743,7 @@
type="int"
transient="false"
volatile="false"
- value="16843602"
+ value="16843600"
static="true"
final="true"
deprecated="not deprecated"
@@ -9908,7 +9886,7 @@
type="int"
transient="false"
volatile="false"
- value="16843543"
+ value="16843541"
static="true"
final="true"
deprecated="not deprecated"
@@ -9919,7 +9897,7 @@
type="int"
transient="false"
volatile="false"
- value="16843542"
+ value="16843540"
static="true"
final="true"
deprecated="not deprecated"
@@ -9941,7 +9919,7 @@
type="int"
transient="false"
volatile="false"
- value="16843544"
+ value="16843542"
static="true"
final="true"
deprecated="not deprecated"
@@ -10172,7 +10150,7 @@
type="int"
transient="false"
volatile="false"
- value="16843514"
+ value="16843512"
static="true"
final="true"
deprecated="not deprecated"
@@ -10326,7 +10304,7 @@
type="int"
transient="false"
volatile="false"
- value="16843554"
+ value="16843552"
static="true"
final="true"
deprecated="not deprecated"
@@ -10337,7 +10315,7 @@
type="int"
transient="false"
volatile="false"
- value="16843555"
+ value="16843553"
static="true"
final="true"
deprecated="not deprecated"
@@ -10348,7 +10326,7 @@
type="int"
transient="false"
volatile="false"
- value="16843556"
+ value="16843554"
static="true"
final="true"
deprecated="not deprecated"
@@ -10359,7 +10337,7 @@
type="int"
transient="false"
volatile="false"
- value="16843557"
+ value="16843555"
static="true"
final="true"
deprecated="not deprecated"
@@ -10403,7 +10381,7 @@
type="int"
transient="false"
volatile="false"
- value="16843590"
+ value="16843588"
static="true"
final="true"
deprecated="not deprecated"
@@ -10436,7 +10414,7 @@
type="int"
transient="false"
volatile="false"
- value="16843538"
+ value="16843536"
static="true"
final="true"
deprecated="not deprecated"
@@ -10579,7 +10557,7 @@
type="int"
transient="false"
volatile="false"
- value="16843574"
+ value="16843572"
static="true"
final="true"
deprecated="not deprecated"
@@ -10799,7 +10777,7 @@
type="int"
transient="false"
volatile="false"
- value="16843594"
+ value="16843592"
static="true"
final="true"
deprecated="not deprecated"
@@ -10810,7 +10788,7 @@
type="int"
transient="false"
volatile="false"
- value="16843591"
+ value="16843589"
static="true"
final="true"
deprecated="not deprecated"
@@ -10821,7 +10799,7 @@
type="int"
transient="false"
volatile="false"
- value="16843592"
+ value="16843590"
static="true"
final="true"
deprecated="not deprecated"
@@ -10942,7 +10920,7 @@
type="int"
transient="false"
volatile="false"
- value="16843545"
+ value="16843543"
static="true"
final="true"
deprecated="not deprecated"
@@ -11030,7 +11008,7 @@
type="int"
transient="false"
volatile="false"
- value="16843608"
+ value="16843606"
static="true"
final="true"
deprecated="not deprecated"
@@ -11041,7 +11019,7 @@
type="int"
transient="false"
volatile="false"
- value="16843609"
+ value="16843607"
static="true"
final="true"
deprecated="not deprecated"
@@ -28602,17 +28580,6 @@
visibility="public"
>
</method>
-<method name="getCancelable"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getDialog"
return="android.app.Dialog"
abstract="false"
@@ -28646,6 +28613,17 @@
visibility="public"
>
</method>
+<method name="isCancelable"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="onCancel"
return="void"
abstract="false"
@@ -28822,6 +28800,19 @@
<parameter name="request" type="android.app.DownloadManager.Request">
</parameter>
</method>
+<method name="getMaxBytesOverMobile"
+ return="java.lang.Long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+</method>
<method name="getMimeTypeForDownloadedFile"
return="java.lang.String"
abstract="false"
@@ -28835,6 +28826,19 @@
<parameter name="id" type="long">
</parameter>
</method>
+<method name="getRecommendedMaxBytesOverMobile"
+ return="java.lang.Long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+</method>
<method name="getUriForDownloadedFile"
return="android.net.Uri"
abstract="false"
@@ -30683,17 +30687,6 @@
visibility="public"
>
</method>
-<method name="countBackStackEntries"
- return="int"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="dump"
return="void"
abstract="true"
@@ -30763,7 +30756,7 @@
<parameter name="tag" type="java.lang.String">
</parameter>
</method>
-<method name="getBackStackEntry"
+<method name="getBackStackEntryAt"
return="android.app.FragmentManager.BackStackEntry"
abstract="true"
native="false"
@@ -30776,6 +30769,17 @@
<parameter name="index" type="int">
</parameter>
</method>
+<method name="getBackStackEntryCount"
+ return="int"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getFragment"
return="android.app.Fragment"
abstract="true"
@@ -30791,17 +30795,6 @@
<parameter name="key" type="java.lang.String">
</parameter>
</method>
-<method name="openTransaction"
- return="android.app.FragmentTransaction"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="popBackStack"
return="void"
abstract="true"
@@ -30944,6 +30937,17 @@
visibility="public"
>
</method>
+<method name="getBreadCrumbShortTitleRes"
+ return="int"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getBreadCrumbTitle"
return="java.lang.CharSequence"
abstract="true"
@@ -30955,6 +30959,17 @@
visibility="public"
>
</method>
+<method name="getBreadCrumbTitleRes"
+ return="int"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getId"
return="int"
abstract="true"
@@ -31314,7 +31329,7 @@
visibility="public"
>
</field>
-<field name="TRANSIT_FRAGMENT_NEXT"
+<field name="TRANSIT_FRAGMENT_FADE"
type="int"
transient="false"
volatile="false"
@@ -31336,17 +31351,6 @@
visibility="public"
>
</field>
-<field name="TRANSIT_FRAGMENT_PREV"
- type="int"
- transient="false"
- volatile="false"
- value="8196"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="TRANSIT_NONE"
type="int"
transient="false"
@@ -33072,19 +33076,6 @@
<parameter name="callback" type="android.app.LoaderManager.LoaderCallbacks<D>">
</parameter>
</method>
-<method name="stopLoader"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="deprecated"
- visibility="public"
->
-<parameter name="id" type="int">
-</parameter>
-</method>
</class>
<interface name="LoaderManager.LoaderCallbacks"
abstract="true"
@@ -43781,7 +43772,7 @@
visibility="public"
>
</method>
-<method name="onCancelled"
+<method name="onCanceled"
return="void"
abstract="false"
native="false"
@@ -43794,6 +43785,19 @@
<parameter name="data" type="D">
</parameter>
</method>
+<method name="onCancelled"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="deprecated"
+ visibility="public"
+>
+<parameter name="data" type="D">
+</parameter>
+</method>
<method name="onLoadInBackground"
return="D"
abstract="false"
@@ -43818,17 +43822,6 @@
<parameter name="delayMS" type="long">
</parameter>
</method>
-<method name="waitForLoader"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
</class>
<class name="BroadcastReceiver"
extends="java.lang.Object"
@@ -44236,8 +44229,6 @@
</parameter>
<parameter name="mimeTypes" type="java.lang.String[]">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="item" type="android.content.ClipData.Item">
</parameter>
</constructor>
@@ -44250,8 +44241,6 @@
>
<parameter name="description" type="android.content.ClipDescription">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="item" type="android.content.ClipData.Item">
</parameter>
</constructor>
@@ -44290,18 +44279,7 @@
visibility="public"
>
</method>
-<method name="getIcon"
- return="android.graphics.Bitmap"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getItem"
+<method name="getItemAt"
return="android.content.ClipData.Item"
abstract="false"
native="false"
@@ -44337,8 +44315,6 @@
>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="intent" type="android.content.Intent">
</parameter>
</method>
@@ -44354,8 +44330,6 @@
>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="text" type="java.lang.CharSequence">
</parameter>
</method>
@@ -44371,8 +44345,6 @@
>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="uri" type="android.net.Uri">
</parameter>
</method>
@@ -44390,8 +44362,6 @@
</parameter>
<parameter name="label" type="java.lang.CharSequence">
</parameter>
-<parameter name="icon" type="android.graphics.Bitmap">
-</parameter>
<parameter name="uri" type="android.net.Uri">
</parameter>
</method>
@@ -50362,6 +50332,16 @@
>
<parameter name="context" type="android.content.Context">
</parameter>
+</constructor>
+<constructor name="CursorLoader"
+ type="android.content.CursorLoader"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
<parameter name="uri" type="android.net.Uri">
</parameter>
<parameter name="projection" type="java.lang.String[]">
@@ -50452,7 +50432,7 @@
visibility="public"
>
</method>
-<method name="onCancelled"
+<method name="onCanceled"
return="void"
abstract="false"
native="false"
@@ -57386,145 +57366,6 @@
>
</field>
</class>
-<class name="XmlDocumentProvider"
- extends="android.content.ContentProvider"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="XmlDocumentProvider"
- type="android.content.XmlDocumentProvider"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-<method name="delete"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="selection" type="java.lang.String">
-</parameter>
-<parameter name="selectionArgs" type="java.lang.String[]">
-</parameter>
-</method>
-<method name="getResourceXmlPullParser"
- return="org.xmlpull.v1.XmlPullParser"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="protected"
->
-<parameter name="resourceUri" type="android.net.Uri">
-</parameter>
-</method>
-<method name="getType"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-</method>
-<method name="getUriXmlPullParser"
- return="org.xmlpull.v1.XmlPullParser"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="protected"
->
-<parameter name="url" type="java.lang.String">
-</parameter>
-</method>
-<method name="insert"
- return="android.net.Uri"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="values" type="android.content.ContentValues">
-</parameter>
-</method>
-<method name="onCreate"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="query"
- return="android.database.Cursor"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="projection" type="java.lang.String[]">
-</parameter>
-<parameter name="selection" type="java.lang.String">
-</parameter>
-<parameter name="selectionArgs" type="java.lang.String[]">
-</parameter>
-<parameter name="sortOrder" type="java.lang.String">
-</parameter>
-</method>
-<method name="update"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="values" type="android.content.ContentValues">
-</parameter>
-<parameter name="selection" type="java.lang.String">
-</parameter>
-<parameter name="selectionArgs" type="java.lang.String[]">
-</parameter>
-</method>
-</class>
</package>
<package name="android.content.pm"
>
@@ -57794,17 +57635,6 @@
type="int"
transient="false"
volatile="false"
- value="1024"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="FLAG_IMMERSIVE"
- type="int"
- transient="false"
- volatile="false"
value="512"
static="true"
final="true"
@@ -146861,6 +146691,16 @@
visibility="public"
>
</constructor>
+<constructor name="StrictMode.VmPolicy.Builder"
+ type="android.os.StrictMode.VmPolicy.Builder"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="base" type="android.os.StrictMode.VmPolicy">
+</parameter>
+</constructor>
<method name="build"
return="android.os.StrictMode.VmPolicy"
abstract="false"
@@ -146938,6 +146778,21 @@
visibility="public"
>
</method>
+<method name="setClassInstanceLimit"
+ return="android.os.StrictMode.VmPolicy.Builder"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="klass" type="java.lang.Class">
+</parameter>
+<parameter name="instanceLimit" type="int">
+</parameter>
+</method>
</class>
<class name="SystemClock"
extends="java.lang.Object"
@@ -236205,6 +236060,48 @@
</parameter>
</method>
</class>
+<class name="WebStorage.Origin"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="getOrigin"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getQuota"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getUsage"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
<interface name="WebStorage.QuotaUpdater"
abstract="true"
static="true"
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java
index 9cbc7be..e6eaf71 100644
--- a/core/java/android/accounts/AccountManagerService.java
+++ b/core/java/android/accounts/AccountManagerService.java
@@ -1019,6 +1019,10 @@
AccountAuthenticatorResponse response, String authTokenType, String authTokenLabel) {
Intent intent = new Intent(mContext, GrantCredentialsPermissionActivity.class);
+ // See FLAT_ACTIVITY_NEW_TASK docs for limitations and benefits of the flag.
+ // Since it was set in Eclair+ we can't change it without breaking apps using
+ // the intent from a non-Activity context.
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(
String.valueOf(getCredentialPermissionNotificationId(account, authTokenType, uid)));
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index ec2f771..93ad17e 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -45,6 +45,7 @@
import android.os.Looper;
import android.os.Parcelable;
import android.os.RemoteException;
+import android.os.StrictMode;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
@@ -858,6 +859,7 @@
mFragments.restoreAllState(p, mLastNonConfigurationInstances != null
? mLastNonConfigurationInstances.fragments : null);
}
+ StrictMode.noteActivityClass(this.getClass());
mFragments.dispatchCreate();
mCalled = true;
}
diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java
index 33b747c..1d217f0 100644
--- a/core/java/android/app/BackStackRecord.java
+++ b/core/java/android/app/BackStackRecord.java
@@ -267,6 +267,14 @@
return mIndex;
}
+ public int getBreadCrumbTitleRes() {
+ return mBreadCrumbTitleRes;
+ }
+
+ public int getBreadCrumbShortTitleRes() {
+ return mBreadCrumbShortTitleRes;
+ }
+
public CharSequence getBreadCrumbTitle() {
if (mBreadCrumbTitleRes != 0) {
return mManager.mActivity.getText(mBreadCrumbTitleRes);
diff --git a/core/java/android/app/DialogFragment.java b/core/java/android/app/DialogFragment.java
index 6f25293..0bc89e7 100644
--- a/core/java/android/app/DialogFragment.java
+++ b/core/java/android/app/DialogFragment.java
@@ -295,7 +295,7 @@
/**
* Return the current value of {@link #setCancelable(boolean)}.
*/
- public boolean getCancelable() {
+ public boolean isCancelable() {
return mCancelable;
}
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index 12f4a18..297d246 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -28,6 +28,8 @@
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.provider.Downloads;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
import android.util.Pair;
@@ -1035,6 +1037,40 @@
}
/**
+ * Returns maximum size, in bytes, of downloads that may go over a mobile connection; or null if
+ * there's no limit
+ *
+ * @param context the {@link Context} to use for accessing the {@link ContentResolver}
+ * @return maximum size, in bytes, of downloads that may go over a mobile connection; or null if
+ * there's no limit
+ */
+ public static Long getMaxBytesOverMobile(Context context) {
+ try {
+ return Settings.Secure.getLong(context.getContentResolver(),
+ Settings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
+ } catch (SettingNotFoundException exc) {
+ return null;
+ }
+ }
+
+ /**
+ * Returns recommended maximum size, in bytes, of downloads that may go over a mobile
+ * connection; or null if there's no recommended limit. The user will have the option to bypass
+ * this limit.
+ *
+ * @param context the {@link Context} to use for accessing the {@link ContentResolver}
+ * @return recommended maximum size, in bytes, of downloads that may go over a mobile
+ * connection; or null if there's no recommended limit.
+ */
+ public static Long getRecommendedMaxBytesOverMobile(Context context) {
+ try {
+ return Settings.Secure.getLong(context.getContentResolver(),
+ Settings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
+ } catch (SettingNotFoundException exc) {
+ return null;
+ }
+ }
+ /**
* Get the DownloadProvider URI for the download with the given ID.
*/
Uri getDownloadUri(long id) {
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 316e513..3280b22 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -912,6 +912,12 @@
return null;
}
+ /**
+ * Get the root view for the fragment's layout (the one returned by {@link #onCreateView}),
+ * if provided.
+ *
+ * @return The fragment's root view, or null if it has no layout.
+ */
public View getView() {
return mView;
}
diff --git a/core/java/android/app/FragmentBreadCrumbs.java b/core/java/android/app/FragmentBreadCrumbs.java
index fb89099..72a8e9a 100644
--- a/core/java/android/app/FragmentBreadCrumbs.java
+++ b/core/java/android/app/FragmentBreadCrumbs.java
@@ -204,13 +204,13 @@
void updateCrumbs() {
FragmentManager fm = mActivity.getFragmentManager();
- int numEntries = fm.countBackStackEntries();
+ int numEntries = fm.getBackStackEntryCount();
int numPreEntries = getPreEntryCount();
int numViews = mContainer.getChildCount();
for (int i = 0; i < numEntries + numPreEntries; i++) {
BackStackEntry bse = i < numPreEntries
? getPreEntry(i)
- : fm.getBackStackEntry(i - numPreEntries);
+ : fm.getBackStackEntryAt(i - numPreEntries);
if (i < numViews) {
View v = mContainer.getChildAt(i);
Object tag = v.getTag();
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index e35ef87..bce240f 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -49,7 +49,7 @@
* Representation of an entry on the fragment back stack, as created
* with {@link FragmentTransaction#addToBackStack(String)
* FragmentTransaction.addToBackStack()}. Entries can later be
- * retrieved with {@link FragmentManager#getBackStackEntry(int)
+ * retrieved with {@link FragmentManager#getBackStackEntryAt(int)
* FragmentManager.getBackStackEntry()}.
*
* <p>Note that you should never hold on to a BackStackEntry object;
@@ -65,6 +65,18 @@
public int getId();
/**
+ * Return the full bread crumb title resource identifier for the entry,
+ * or 0 if it does not have one.
+ */
+ public int getBreadCrumbTitleRes();
+
+ /**
+ * Return the short bread crumb title resource identifier for the entry,
+ * or 0 if it does not have one.
+ */
+ public int getBreadCrumbShortTitleRes();
+
+ /**
* Return the full bread crumb title for the entry, or null if it
* does not have one.
*/
@@ -102,7 +114,8 @@
*/
public abstract FragmentTransaction beginTransaction();
- /** Old API */
+ /** @hide -- remove once prebuilts are in. */
+ @Deprecated
public FragmentTransaction openTransaction() {
return beginTransaction();
}
@@ -153,7 +166,9 @@
/**
* Pop the top state off the back stack. Returns true if there was one
- * to pop, else false.
+ * to pop, else false. This function is asynchronous -- it enqueues the
+ * request to pop, but the action will not be performed until the application
+ * returns to its event loop.
*/
public abstract void popBackStack();
@@ -168,6 +183,10 @@
/**
* Pop the last fragment transition from the manager's fragment
* back stack. If there is nothing to pop, false is returned.
+ * This function is asynchronous -- it enqueues the
+ * request to pop, but the action will not be performed until the application
+ * returns to its event loop.
+ *
* @param name If non-null, this is the name of a previous back state
* to look for; if found, all states up to that state will be popped. The
* {@link #POP_BACK_STACK_INCLUSIVE} flag can be used to control whether
@@ -186,6 +205,10 @@
/**
* Pop all back stack states up to the one with the given identifier.
+ * This function is asynchronous -- it enqueues the
+ * request to pop, but the action will not be performed until the application
+ * returns to its event loop.
+ *
* @param id Identifier of the stated to be popped. If no identifier exists,
* false is returned.
* The identifier is the number returned by
@@ -207,13 +230,13 @@
/**
* Return the number of entries currently in the back stack.
*/
- public abstract int countBackStackEntries();
+ public abstract int getBackStackEntryCount();
/**
* Return the BackStackEntry at index <var>index</var> in the back stack;
* entries start index 0 being the bottom of the stack.
*/
- public abstract BackStackEntry getBackStackEntry(int index);
+ public abstract BackStackEntry getBackStackEntryAt(int index);
/**
* Add a new listener for changes to the fragment back stack.
@@ -416,12 +439,12 @@
}
@Override
- public int countBackStackEntries() {
+ public int getBackStackEntryCount() {
return mBackStack != null ? mBackStack.size() : 0;
}
@Override
- public BackStackEntry getBackStackEntry(int index) {
+ public BackStackEntry getBackStackEntryAt(int index) {
return mBackStack.get(index);
}
@@ -1678,11 +1701,8 @@
case FragmentTransaction.TRANSIT_FRAGMENT_CLOSE:
rev = FragmentTransaction.TRANSIT_FRAGMENT_OPEN;
break;
- case FragmentTransaction.TRANSIT_FRAGMENT_NEXT:
- rev = FragmentTransaction.TRANSIT_FRAGMENT_PREV;
- break;
- case FragmentTransaction.TRANSIT_FRAGMENT_PREV:
- rev = FragmentTransaction.TRANSIT_FRAGMENT_NEXT;
+ case FragmentTransaction.TRANSIT_FRAGMENT_FADE:
+ rev = FragmentTransaction.TRANSIT_FRAGMENT_FADE;
break;
}
return rev;
@@ -1702,15 +1722,10 @@
? com.android.internal.R.styleable.FragmentAnimation_fragmentCloseEnterAnimation
: com.android.internal.R.styleable.FragmentAnimation_fragmentCloseExitAnimation;
break;
- case FragmentTransaction.TRANSIT_FRAGMENT_NEXT:
+ case FragmentTransaction.TRANSIT_FRAGMENT_FADE:
animAttr = enter
- ? com.android.internal.R.styleable.FragmentAnimation_fragmentNextEnterAnimation
- : com.android.internal.R.styleable.FragmentAnimation_fragmentNextExitAnimation;
- break;
- case FragmentTransaction.TRANSIT_FRAGMENT_PREV:
- animAttr = enter
- ? com.android.internal.R.styleable.FragmentAnimation_fragmentPrevEnterAnimation
- : com.android.internal.R.styleable.FragmentAnimation_fragmentPrevExitAnimation;
+ ? com.android.internal.R.styleable.FragmentAnimation_fragmentFadeEnterAnimation
+ : com.android.internal.R.styleable.FragmentAnimation_fragmentFadeExitAnimation;
break;
}
return animAttr;
diff --git a/core/java/android/app/FragmentTransaction.java b/core/java/android/app/FragmentTransaction.java
index 1b8debc..0cc774d 100644
--- a/core/java/android/app/FragmentTransaction.java
+++ b/core/java/android/app/FragmentTransaction.java
@@ -110,10 +110,9 @@
public static final int TRANSIT_FRAGMENT_OPEN = 1 | TRANSIT_ENTER_MASK;
/** Fragment is being removed from the stack */
public static final int TRANSIT_FRAGMENT_CLOSE = 2 | TRANSIT_EXIT_MASK;
- /** Fragment is being added in a 'next' operation*/
- public static final int TRANSIT_FRAGMENT_NEXT = 3 | TRANSIT_ENTER_MASK;
- /** Fragment is being removed in a 'previous' operation */
- public static final int TRANSIT_FRAGMENT_PREV = 4 | TRANSIT_EXIT_MASK;
+ /** Fragment should simply fade in or out; that is, no strong navigation associated
+ * with it except that it is appearing or disappearing for some reason. */
+ public static final int TRANSIT_FRAGMENT_FADE = 3 | TRANSIT_ENTER_MASK;
/**
* Set specific animation resources to run for the fragments that are
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index cd5e3bb..ffe2a5d 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -159,14 +159,6 @@
public abstract void destroyLoader(int id);
/**
- * @deprecated Renamed to {@link #destroyLoader}.
- */
- @Deprecated
- public void stopLoader(int id) {
- destroyLoader(id);
- }
-
- /**
* Return the Loader with the given id or null if no matching Loader
* is found.
*/
diff --git a/core/java/android/content/AsyncTaskLoader.java b/core/java/android/content/AsyncTaskLoader.java
index c6b9e80..3d6182b 100644
--- a/core/java/android/content/AsyncTaskLoader.java
+++ b/core/java/android/content/AsyncTaskLoader.java
@@ -168,6 +168,11 @@
* Called if the task was canceled before it was completed. Gives the class a chance
* to properly dispose of the result.
*/
+ public void onCanceled(D data) {
+ onCancelled(data);
+ }
+
+ @Deprecated
public void onCancelled(D data) {
}
@@ -195,7 +200,7 @@
}
void dispatchOnCancelled(LoadTask task, D data) {
- onCancelled(data);
+ onCanceled(data);
if (mCancellingTask == task) {
if (DEBUG) Slog.v(TAG, "Cancelled task is now canceled!");
mLastLoadCompleteTime = SystemClock.uptimeMillis();
@@ -240,6 +245,8 @@
* thread would cause a deadlock.
* <p>
* Use for testing only. <b>Never</b> call this from a UI thread.
+ *
+ * @hide
*/
public void waitForLoader() {
LoadTask task = mTask;
diff --git a/core/java/android/content/BroadcastReceiver.java b/core/java/android/content/BroadcastReceiver.java
index 5939643..028149b 100644
--- a/core/java/android/content/BroadcastReceiver.java
+++ b/core/java/android/content/BroadcastReceiver.java
@@ -170,6 +170,16 @@
* State for a result that is pending for a broadcast receiver. Returned
* by {@link BroadcastReceiver#goAsync() goAsync()}
* while in {@link BroadcastReceiver#onReceive BroadcastReceiver.onReceive()}.
+ * This allows you to return from onReceive() without having the broadcast
+ * terminate; you must call {@link #finish()} once you are done with the
+ * broadcast. This allows you to process the broadcast off of the main
+ * thread of your app.
+ *
+ * <p>Note on threading: the state inside of this class is not itself
+ * thread-safe, however you can use it from any thread if you properly
+ * sure that you do not have races. Typically this means you will hand
+ * the entire object to another thread, which will be solely responsible
+ * for setting any results and finally calling {@link #finish()}.
*/
public static class PendingResult {
/** @hide */
diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java
index 6f4d098..d9c6b07 100644
--- a/core/java/android/content/ClipData.java
+++ b/core/java/android/content/ClipData.java
@@ -42,9 +42,9 @@
* {@link ClipDescription#getMimeType(int) getDescription().getMimeType(int)}
* must return correct MIME type(s) describing the data in the clip. For help
* in correctly constructing a clip with the correct MIME type, use
- * {@link #newPlainText(CharSequence, Bitmap, CharSequence)},
- * {@link #newUri(ContentResolver, CharSequence, Bitmap, Uri)}, and
- * {@link #newIntent(CharSequence, Bitmap, Intent)}.
+ * {@link #newPlainText(CharSequence, CharSequence)},
+ * {@link #newUri(ContentResolver, CharSequence, Uri)}, and
+ * {@link #newIntent(CharSequence, Intent)}.
*
* <p>Each Item instance can be one of three main classes of data: a simple
* CharSequence of text, a single Intent object, or a Uri. See {@link Item}
@@ -70,7 +70,7 @@
* "content:" URIs. A content URI allows the recipient of a ClippedData item
* to interact closely with the ContentProvider holding the data in order to
* negotiate the transfer of that data. The clip must also be filled in with
- * the available MIME types; {@link #newUri(ContentResolver, CharSequence, Bitmap, Uri)}
+ * the available MIME types; {@link #newUri(ContentResolver, CharSequence, Uri)}
* will take care of correctly doing this.
*
* <p>For example, here is the paste function of a simple NotePad application.
@@ -321,16 +321,14 @@
*
* @param label Label to show to the user describing this clip.
* @param mimeTypes An array of MIME types this data is available as.
- * @param icon Bitmap providing the user with an iconing representation of
- * the clip.
* @param item The contents of the first item in the clip.
*/
- public ClipData(CharSequence label, String[] mimeTypes, Bitmap icon, Item item) {
+ public ClipData(CharSequence label, String[] mimeTypes, Item item) {
mClipDescription = new ClipDescription(label, mimeTypes);
if (item == null) {
throw new NullPointerException("item is null");
}
- mIcon = icon;
+ mIcon = null;
mItems.add(item);
}
@@ -338,16 +336,14 @@
* Create a new clip.
*
* @param description The ClipDescription describing the clip contents.
- * @param icon Bitmap providing the user with an iconing representation of
- * the clip.
* @param item The contents of the first item in the clip.
*/
- public ClipData(ClipDescription description, Bitmap icon, Item item) {
+ public ClipData(ClipDescription description, Item item) {
mClipDescription = description;
if (item == null) {
throw new NullPointerException("item is null");
}
- mIcon = icon;
+ mIcon = null;
mItems.add(item);
}
@@ -356,13 +352,12 @@
* {@link ClipDescription#MIMETYPE_TEXT_PLAIN}.
*
* @param label User-visible label for the clip data.
- * @param icon Iconic representation of the clip data.
* @param text The actual text in the clip.
* @return Returns a new ClipData containing the specified data.
*/
- static public ClipData newPlainText(CharSequence label, Bitmap icon, CharSequence text) {
+ static public ClipData newPlainText(CharSequence label, CharSequence text) {
Item item = new Item(text);
- return new ClipData(label, MIMETYPES_TEXT_PLAIN, icon, item);
+ return new ClipData(label, MIMETYPES_TEXT_PLAIN, item);
}
/**
@@ -370,13 +365,12 @@
* {@link ClipDescription#MIMETYPE_TEXT_INTENT}.
*
* @param label User-visible label for the clip data.
- * @param icon Iconic representation of the clip data.
* @param intent The actual Intent in the clip.
* @return Returns a new ClipData containing the specified data.
*/
- static public ClipData newIntent(CharSequence label, Bitmap icon, Intent intent) {
+ static public ClipData newIntent(CharSequence label, Intent intent) {
Item item = new Item(intent);
- return new ClipData(label, MIMETYPES_TEXT_INTENT, icon, item);
+ return new ClipData(label, MIMETYPES_TEXT_INTENT, item);
}
/**
@@ -387,12 +381,11 @@
*
* @param resolver ContentResolver used to get information about the URI.
* @param label User-visible label for the clip data.
- * @param icon Iconic representation of the clip data.
* @param uri The URI in the clip.
* @return Returns a new ClipData containing the specified data.
*/
static public ClipData newUri(ContentResolver resolver, CharSequence label,
- Bitmap icon, Uri uri) {
+ Uri uri) {
Item item = new Item(uri);
String[] mimeTypes = null;
if ("content".equals(uri.getScheme())) {
@@ -417,24 +410,23 @@
if (mimeTypes == null) {
mimeTypes = MIMETYPES_TEXT_URILIST;
}
- return new ClipData(label, mimeTypes, icon, item);
+ return new ClipData(label, mimeTypes, item);
}
/**
* Create a new ClipData holding an URI with MIME type
* {@link ClipDescription#MIMETYPE_TEXT_URILIST}.
- * Unlike {@link #newUri(ContentResolver, CharSequence, Bitmap, Uri)}, nothing
+ * Unlike {@link #newUri(ContentResolver, CharSequence, Uri)}, nothing
* is inferred about the URI -- if it is a content: URI holding a bitmap,
* the reported type will still be uri-list. Use this with care!
*
* @param label User-visible label for the clip data.
- * @param icon Iconic representation of the clip data.
* @param uri The URI in the clip.
* @return Returns a new ClipData containing the specified data.
*/
- static public ClipData newRawUri(CharSequence label, Bitmap icon, Uri uri) {
+ static public ClipData newRawUri(CharSequence label, Uri uri) {
Item item = new Item(uri);
- return new ClipData(label, MIMETYPES_TEXT_URILIST, icon, item);
+ return new ClipData(label, MIMETYPES_TEXT_URILIST, item);
}
/**
@@ -445,6 +437,9 @@
return mClipDescription;
}
+ /**
+ * Add a new Item to the overall ClipData container.
+ */
public void addItem(Item item) {
if (item == null) {
throw new NullPointerException("item is null");
@@ -452,15 +447,23 @@
mItems.add(item);
}
+ /** @hide */
public Bitmap getIcon() {
return mIcon;
}
+ /**
+ * Return the number of items in the clip data.
+ */
public int getItemCount() {
return mItems.size();
}
- public Item getItem(int index) {
+ /**
+ * Return a single item inside of the clip data. The index can range
+ * from 0 to {@link #getItemCount()}-1.
+ */
+ public Item getItemAt(int index) {
return mItems.get(index);
}
diff --git a/core/java/android/content/ClipboardManager.java b/core/java/android/content/ClipboardManager.java
index 3e2b763..a79f060 100644
--- a/core/java/android/content/ClipboardManager.java
+++ b/core/java/android/content/ClipboardManager.java
@@ -170,7 +170,7 @@
public CharSequence getText() {
ClipData clip = getPrimaryClip();
if (clip != null && clip.getItemCount() > 0) {
- return clip.getItem(0).coerceToText(mContext);
+ return clip.getItemAt(0).coerceToText(mContext);
}
return null;
}
@@ -181,7 +181,7 @@
* primary clip. It has no label or icon.
*/
public void setText(CharSequence text) {
- setPrimaryClip(ClipData.newPlainText(null, null, text));
+ setPrimaryClip(ClipData.newPlainText(null, text));
}
/**
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 38ebaf2..6228bd0 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -26,6 +26,17 @@
/**
* A loader that queries the {@link ContentResolver} and returns a {@link Cursor}.
+ * This class implements the {@link Loader} protocol in a standard way for
+ * querying cursors, building on {@link AsyncTaskLoader} to perform the cursor
+ * query on a background thread so that it does not block the application's UI.
+ *
+ * <p>A CursorLoader must be built with the full information for the query to
+ * perform, either through the
+ * {@link #CursorLoader(Context, Uri, String[], String, String[], String)} or
+ * creating an empty instance with {@link #CursorLoader(Context)} and filling
+ * in the desired paramters with {@link #setUri(Uri)}, {@link #setSelection(String)},
+ * {@link #setSelectionArgs(String[])}, {@link #setSortOrder(String)},
+ * and {@link #setProjection(String[])}.
*/
public class CursorLoader extends AsyncTaskLoader<Cursor> {
final ForceLoadContentObserver mObserver;
@@ -81,6 +92,22 @@
}
}
+ /**
+ * Creates an empty unspecified CursorLoader. You must follow this with
+ * calls to {@link #setUri(Uri)}, {@link #setSelection(String)}, etc
+ * to specify the query to perform.
+ */
+ public CursorLoader(Context context) {
+ super(context);
+ mObserver = new ForceLoadContentObserver();
+ }
+
+ /**
+ * Creates a fully-specified CursorLoader. See
+ * {@link ContentResolver#query(Uri, String[], String, String[], String)
+ * ContentResolver.query()} for documentation on the meaning of the
+ * parameters. These will be passed as-is to that call.
+ */
public CursorLoader(Context context, Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
super(context);
@@ -119,7 +146,7 @@
}
@Override
- public void onCancelled(Cursor cursor) {
+ public void onCanceled(Cursor cursor) {
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
diff --git a/core/java/android/content/XmlDocumentProvider.java b/core/java/android/content/XmlDocumentProvider.java
index 153ad38..76539c7 100644
--- a/core/java/android/content/XmlDocumentProvider.java
+++ b/core/java/android/content/XmlDocumentProvider.java
@@ -40,6 +40,8 @@
import java.util.regex.Pattern;
/**
+ * @hide -- not yet ready to support, should be provided just as a static lib.
+ *
* A read-only content provider which extracts data out of an XML document.
*
* <p>A XPath-like selection pattern is used to select some nodes in the XML document. Each such
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index e688c86..46f611f 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -149,7 +149,13 @@
* {@link android.R.attr#finishOnCloseSystemDialogs} attribute.
*/
public static final int FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS = 0x0100;
- /**
+ /**
+ * Value for {@link #flags}: true when the application's rendering should
+ * be hardware accelerated.
+ */
+ public static final int FLAG_HARDWARE_ACCELERATED = 0x0200;
+ /**
+ * @hide
* Bit in {@link #flags} corresponding to an immersive activity
* that wishes not to be interrupted by notifications.
* Applications that hide the system notification bar with
@@ -164,12 +170,7 @@
* "toast" window).
* {@see android.app.Notification#FLAG_HIGH_PRIORITY}
*/
- public static final int FLAG_IMMERSIVE = 0x0200;
- /**
- * Value for {@link #flags}: true when the application's rendering should
- * be hardware accelerated.
- */
- public static final int FLAG_HARDWARE_ACCELERATED = 0x0400;
+ public static final int FLAG_IMMERSIVE = 0x0400;
/**
* Options that have been set in the activity declaration in the
* manifest.
@@ -180,7 +181,7 @@
* {@link #FLAG_STATE_NOT_NEEDED}, {@link #FLAG_EXCLUDE_FROM_RECENTS},
* {@link #FLAG_ALLOW_TASK_REPARENTING}, {@link #FLAG_NO_HISTORY},
* {@link #FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS},
- * {@link #FLAG_IMMERSIVE}, {@link #FLAG_HARDWARE_ACCELERATED}
+ * {@link #FLAG_HARDWARE_ACCELERATED}
*/
public int flags;
diff --git a/core/java/android/database/DefaultDatabaseErrorHandler.java b/core/java/android/database/DefaultDatabaseErrorHandler.java
index 3619e48..61337dd 100644
--- a/core/java/android/database/DefaultDatabaseErrorHandler.java
+++ b/core/java/android/database/DefaultDatabaseErrorHandler.java
@@ -24,8 +24,22 @@
import android.util.Pair;
/**
- * Default class used defining the actions to take when the following errors are detected
- * database corruption
+ * Default class used to define the actions to take when the database corruption is reported
+ * by sqlite.
+ * <p>
+ * An application can specify an implementation of {@link DatabaseErrorHandler} on the
+ * following:
+ * <ul>
+ * <li>{@link SQLiteDatabase#openOrCreateDatabase(String,
+ * android.database.sqlite.SQLiteDatabase.CursorFactory, DatabaseErrorHandler)}</li>
+ * <li>{@link SQLiteDatabase#openDatabase(String,
+ * android.database.sqlite.SQLiteDatabase.CursorFactory, int, DatabaseErrorHandler)}</li>
+ * </ul>
+ * The specified {@link DatabaseErrorHandler} is used to handle database corruption errors, if they
+ * occur.
+ * <p>
+ * If null is specified for DatabaeErrorHandler param in the above calls, then this class is used
+ * as the default {@link DatabaseErrorHandler}.
*/
public final class DefaultDatabaseErrorHandler implements DatabaseErrorHandler {
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index cc95642..904b2e9 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -20,22 +20,19 @@
import android.content.res.Resources;
import android.os.storage.IMountService;
+import android.util.Log;
/**
* Provides access to environment variables.
*/
public class Environment {
+ private static final String TAG = "Environment";
private static final File ROOT_DIRECTORY
= getDirectory("ANDROID_ROOT", "/system");
private static final String SYSTEM_PROPERTY_EFS_ENABLED = "persist.security.efs.enabled";
- private static class MountServiceHolder {
- static IMountService mSingleton = IMountService.Stub.asInterface(ServiceManager
- .getService("mount"));
- }
-
private static final Object mLock = new Object();
private volatile static Boolean mIsExternalStorageEmulated = null;
@@ -401,7 +398,9 @@
*/
public static String getExternalStorageState() {
try {
- return MountServiceHolder.mSingleton.getVolumeState(getExternalStorageDirectory()
+ IMountService mountService = IMountService.Stub.asInterface(ServiceManager
+ .getService("mount"));
+ return mountService.getVolumeState(getExternalStorageDirectory()
.toString());
} catch (Exception rex) {
return Environment.MEDIA_REMOVED;
@@ -433,12 +432,14 @@
if (mIsExternalStorageEmulated == null) {
boolean externalStorageEmulated;
try {
- externalStorageEmulated =
- MountServiceHolder.mSingleton.isExternalStorageEmulated();
+ IMountService mountService = IMountService.Stub.asInterface(ServiceManager
+ .getService("mount"));
+ externalStorageEmulated = mountService.isExternalStorageEmulated();
+ mIsExternalStorageEmulated = Boolean.valueOf(externalStorageEmulated);
} catch (Exception e) {
- externalStorageEmulated = false;
+ Log.e(TAG, "couldn't talk to MountService", e);
+ return false;
}
- mIsExternalStorageEmulated = Boolean.valueOf(externalStorageEmulated);
}
}
}
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 0f062cc..997ea53 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -34,6 +34,7 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;
@@ -166,13 +167,19 @@
* Note, a "VM_" bit, not thread.
* @hide
*/
- public static final int DETECT_VM_CURSOR_LEAKS = 0x200; // for ProcessPolicy
+ public static final int DETECT_VM_CURSOR_LEAKS = 0x200; // for VmPolicy
/**
* Note, a "VM_" bit, not thread.
* @hide
*/
- public static final int DETECT_VM_CLOSABLE_LEAKS = 0x400; // for ProcessPolicy
+ public static final int DETECT_VM_CLOSABLE_LEAKS = 0x400; // for VmPolicy
+
+ /**
+ * Note, a "VM_" bit, not thread.
+ * @hide
+ */
+ public static final int DETECT_VM_ACTIVITY_LEAKS = 0x800; // for VmPolicy
/**
* @hide
@@ -232,10 +239,18 @@
PENALTY_LOG | PENALTY_DIALOG | PENALTY_DEATH | PENALTY_DROPBOX | PENALTY_GATHER |
PENALTY_DEATH_ON_NETWORK | PENALTY_FLASH;
+
+ // TODO: wrap in some ImmutableHashMap thing.
+ // Note: must be before static initialization of sVmPolicy.
+ private static final HashMap<Class, Integer> EMPTY_CLASS_LIMIT_MAP = new HashMap<Class, Integer>();
+
/**
* The current VmPolicy in effect.
+ *
+ * TODO: these are redundant (mask is in VmPolicy). Should remove sVmPolicyMask.
*/
private static volatile int sVmPolicyMask = 0;
+ private static volatile VmPolicy sVmPolicy = VmPolicy.LAX;
/**
* The number of threads trying to do an async dropbox write.
@@ -481,12 +496,19 @@
/**
* The default, lax policy which doesn't catch anything.
*/
- public static final VmPolicy LAX = new VmPolicy(0);
+ public static final VmPolicy LAX = new VmPolicy(0, EMPTY_CLASS_LIMIT_MAP);
final int mask;
- private VmPolicy(int mask) {
+ // Map from class to max number of allowed instances in memory.
+ final HashMap<Class, Integer> classInstanceLimit;
+
+ private VmPolicy(int mask, HashMap<Class, Integer> classInstanceLimit) {
+ if (classInstanceLimit == null) {
+ throw new NullPointerException("classInstanceLimit == null");
+ }
this.mask = mask;
+ this.classInstanceLimit = classInstanceLimit;
}
@Override
@@ -516,6 +538,49 @@
public static final class Builder {
private int mMask;
+ private HashMap<Class, Integer> mClassInstanceLimit; // null until needed
+ private boolean mClassInstanceLimitNeedCow = false; // need copy-on-write
+
+ public Builder() {
+ mMask = 0;
+ }
+
+ /**
+ * Build upon an existing VmPolicy.
+ */
+ public Builder(VmPolicy base) {
+ mMask = base.mask;
+ mClassInstanceLimitNeedCow = true;
+ mClassInstanceLimit = base.classInstanceLimit;
+ }
+
+ /**
+ * Set an upper bound on how many instances of a class can be in memory
+ * at once. Helps to prevent object leaks.
+ */
+ public Builder setClassInstanceLimit(Class klass, int instanceLimit) {
+ if (klass == null) {
+ throw new NullPointerException("klass == null");
+ }
+ if (mClassInstanceLimitNeedCow) {
+ if (mClassInstanceLimit.containsKey(klass) &&
+ mClassInstanceLimit.get(klass) == instanceLimit) {
+ // no-op; don't break COW
+ return this;
+ }
+ mClassInstanceLimitNeedCow = false;
+ mClassInstanceLimit = (HashMap<Class, Integer>) mClassInstanceLimit.clone();
+ } else if (mClassInstanceLimit == null) {
+ mClassInstanceLimit = new HashMap<Class, Integer>();
+ }
+ mClassInstanceLimit.put(klass, instanceLimit);
+ return this;
+ }
+
+ private Builder detectActivityLeaks() {
+ return enable(DETECT_VM_ACTIVITY_LEAKS);
+ }
+
/**
* Detect everything that's potentially suspect.
*
@@ -524,7 +589,8 @@
* likely expand in future releases.
*/
public Builder detectAll() {
- return enable(DETECT_VM_CURSOR_LEAKS | DETECT_VM_CLOSABLE_LEAKS);
+ return enable(DETECT_VM_ACTIVITY_LEAKS |
+ DETECT_VM_CURSOR_LEAKS | DETECT_VM_CLOSABLE_LEAKS);
}
/**
@@ -598,7 +664,8 @@
PENALTY_DROPBOX | PENALTY_DIALOG)) == 0) {
penaltyLog();
}
- return new VmPolicy(mMask);
+ return new VmPolicy(mMask,
+ mClassInstanceLimit != null ? mClassInstanceLimit : EMPTY_CLASS_LIMIT_MAP);
}
}
}
@@ -829,9 +896,7 @@
if (IS_USER_BUILD) {
setCloseGuardEnabled(false);
} else {
- sVmPolicyMask = StrictMode.DETECT_VM_CURSOR_LEAKS |
- StrictMode.DETECT_VM_CLOSABLE_LEAKS |
- StrictMode.PENALTY_DROPBOX;
+ setVmPolicy(new VmPolicy.Builder().detectAll().penaltyDropBox().build());
setCloseGuardEnabled(vmClosableObjectLeaksEnabled());
}
return true;
@@ -1289,6 +1354,7 @@
* @param policy the policy to put into place
*/
public static void setVmPolicy(final VmPolicy policy) {
+ sVmPolicy = policy;
sVmPolicyMask = policy.mask;
setCloseGuardEnabled(vmClosableObjectLeaksEnabled());
}
@@ -1297,7 +1363,7 @@
* Gets the current VM policy.
*/
public static VmPolicy getVmPolicy() {
- return new VmPolicy(sVmPolicyMask);
+ return sVmPolicy;
}
/**
@@ -1652,6 +1718,20 @@
}
/**
+ * @hide
+ */
+ public static void noteActivityClass(Class klass) {
+ if ((sVmPolicy.mask & DETECT_VM_ACTIVITY_LEAKS) == 0) {
+ return;
+ }
+ if (sVmPolicy.classInstanceLimit.containsKey(klass)) {
+ return;
+ }
+ // Note: capping at 2, not 1, to give some breathing room.
+ setVmPolicy(new VmPolicy.Builder(sVmPolicy).setClassInstanceLimit(klass, 2).build());
+ }
+
+ /**
* Parcelable that gets sent in Binder call headers back to callers
* to report violations that happened during a cross-process call.
*
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index ee3bdab..3883451 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -1045,9 +1045,7 @@
FragmentManager.POP_BACK_STACK_INCLUSIVE);
Fragment f = Fragment.instantiate(this, fragmentName, args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
- transaction.setTransition(direction == 0 ? FragmentTransaction.TRANSIT_NONE
- : direction > 0 ? FragmentTransaction.TRANSIT_FRAGMENT_NEXT
- : FragmentTransaction.TRANSIT_FRAGMENT_PREV);
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(com.android.internal.R.id.prefs, f);
transaction.commit();
}
@@ -1142,7 +1140,7 @@
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack(BACK_STACK_PREFS);
} else {
- transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_NEXT);
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
}
transaction.commit();
}
diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java
index c7f8ab2..45e3a4c 100644
--- a/core/java/android/preference/PreferenceScreen.java
+++ b/core/java/android/preference/PreferenceScreen.java
@@ -80,6 +80,8 @@
private ListAdapter mRootAdapter;
private Dialog mDialog;
+
+ private ListView mListView;
/**
* Do NOT use this constructor, use {@link PreferenceManager#createPreferenceScreen(Context)}.
@@ -146,15 +148,18 @@
private void showDialog(Bundle state) {
Context context = getContext();
- ListView listView = new ListView(context);
- bind(listView);
+ if (mListView != null) {
+ mListView.setAdapter(null);
+ }
+ mListView = new ListView(context);
+ bind(mListView);
// Set the title bar if title is available, else no title bar
final CharSequence title = getTitle();
Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title)
? com.android.internal.R.style.Theme_NoTitleBar
: com.android.internal.R.style.Theme);
- dialog.setContentView(listView);
+ dialog.setContentView(mListView);
if (!TextUtils.isEmpty(title)) {
dialog.setTitle(title);
}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 5fac525..99b686e 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -374,16 +374,18 @@
@Override
public void translate(float dx, float dy) {
- nTranslate(mRenderer, dx, dy);
+ if (dx != 0.0f || dy != 0.0f) nTranslate(mRenderer, dx, dy);
}
private native void nTranslate(int renderer, float dx, float dy);
@Override
public void skew(float sx, float sy) {
- throw new UnsupportedOperationException();
+ nSkew(mRenderer, sx, sy);
}
+ private native void nSkew(int renderer, float sx, float sy);
+
@Override
public void rotate(float degrees) {
nRotate(mRenderer, degrees);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index f05ef8c..53fc0c0 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -7905,7 +7905,16 @@
+ "LAYER_TYPE_SOFTWARE or LAYER_TYPE_HARDWARE");
}
- if (layerType == mLayerType) return;
+ if (layerType == mLayerType) {
+ if (layerType != LAYER_TYPE_NONE && paint != mLayerPaint) {
+ mLayerPaint = paint == null ? new Paint() : paint;
+ if (mParent instanceof ViewGroup) {
+ ((ViewGroup) mParent).invalidate();
+ }
+ invalidate();
+ }
+ return;
+ }
// Destroy any previous software drawing cache if needed
switch (mLayerType) {
@@ -7931,9 +7940,11 @@
}
mLayerType = layerType;
- mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : paint;
+ mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : (paint == null ? new Paint() : paint);
- // TODO: Make sure we invalidate the parent's display list
+ if (mParent instanceof ViewGroup) {
+ ((ViewGroup) mParent).invalidate();
+ }
invalidate();
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index f6b6778..d1781cc 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -2398,16 +2398,15 @@
layerType != LAYER_TYPE_NONE) {
layerFlags |= Canvas.CLIP_TO_LAYER_SAVE_FLAG;
}
- if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) {
+ if (layerType != LAYER_TYPE_NONE) {
child.mLayerPaint.setAlpha(multipliedAlpha);
} else {
canvas.saveLayerAlpha(sx, sy, sx + cr - cl, sy + cb - ct,
multipliedAlpha, layerFlags);
- layerSaved = true;
}
} else {
// Alpha is handled by the child directly, clobber the layer's alpha
- if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) {
+ if (layerType != LAYER_TYPE_NONE) {
child.mLayerPaint.setAlpha(255);
}
child.mPrivateFlags |= ALPHA_SET;
@@ -2433,7 +2432,7 @@
if (hasNoCache) {
boolean layerRendered = false;
- if (!layerSaved && layerType == LAYER_TYPE_HARDWARE) {
+ if (layerType == LAYER_TYPE_HARDWARE) {
final HardwareLayer layer = child.getHardwareLayer(canvas);
if (layer != null && layer.isValid()) {
((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, child.mLayerPaint);
@@ -2465,7 +2464,7 @@
child.mPrivateFlags &= ~DIRTY_MASK;
Paint cachePaint;
- if (layerType == LAYER_TYPE_NONE || child.mLayerPaint == null) {
+ if (layerType == LAYER_TYPE_NONE) {
cachePaint = mCachePaint;
if (alpha < 1.0f) {
cachePaint.setAlpha((int) (alpha * 255));
@@ -2476,9 +2475,7 @@
}
} else {
cachePaint = child.mLayerPaint;
- if (alpha < 1.0f) {
- cachePaint.setAlpha((int) (alpha * 255));
- }
+ cachePaint.setAlpha((int) (alpha * 255));
}
canvas.drawBitmap(cache, 0.0f, 0.0f, cachePaint);
}
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 0670c4e..2f96782b4 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -1629,6 +1629,11 @@
/* package */ synchronized void setPrivateBrowsingEnabled(boolean flag) {
if (mPrivateBrowsingEnabled != flag) {
mPrivateBrowsingEnabled = flag;
+
+ // AutoFill is dependant on private browsing being enabled so
+ // reset it to take account of the new value of mPrivateBrowsingEnabled.
+ setAutoFillEnabled(mAutoFillEnabled);
+
postSync();
}
}
@@ -1644,8 +1649,10 @@
* @hide
*/
public synchronized void setAutoFillEnabled(boolean enabled) {
- if (mAutoFillEnabled != enabled) {
- mAutoFillEnabled = enabled;
+ // AutoFill is always disabled in private browsing mode.
+ boolean autoFillEnabled = enabled && !mPrivateBrowsingEnabled;
+ if (mAutoFillEnabled != autoFillEnabled) {
+ mAutoFillEnabled = autoFillEnabled;
postSync();
}
}
diff --git a/core/java/android/webkit/WebStorage.java b/core/java/android/webkit/WebStorage.java
index 5345879..257ed2a 100644
--- a/core/java/android/webkit/WebStorage.java
+++ b/core/java/android/webkit/WebStorage.java
@@ -75,23 +75,23 @@
private Handler mHandler = null;
private Handler mUIHandler = null;
- static class Origin {
- String mOrigin = null;
- long mQuota = 0;
- long mUsage = 0;
+ public static class Origin {
+ private String mOrigin = null;
+ private long mQuota = 0;
+ private long mUsage = 0;
- public Origin(String origin, long quota, long usage) {
+ private Origin(String origin, long quota, long usage) {
mOrigin = origin;
mQuota = quota;
mUsage = usage;
}
- public Origin(String origin, long quota) {
+ private Origin(String origin, long quota) {
mOrigin = origin;
mQuota = quota;
}
- public Origin(String origin) {
+ private Origin(String origin) {
mOrigin = origin;
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index eddfffe..78d4cd2 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1037,7 +1037,7 @@
String host = proxyProperties.getHost();
int port = proxyProperties.getPort();
if (port != 0)
- host += ": " + port;
+ host += ":" + port;
// TODO: Handle exclusion list
// The plan is to make an AndroidProxyResolver, and handle the blacklist
@@ -6723,43 +6723,60 @@
}
}
- /*
- * Return true if the view (Plugin) is fully visible and maximized inside
- * the WebView.
+ /**
+ * Returns plugin bounds if x/y in content coordinates corresponds to a
+ * plugin. Otherwise a NULL rectangle is returned.
*/
- boolean isPluginFitOnScreen(ViewManager.ChildView view) {
+ Rect getPluginBounds(int x, int y) {
+ if (nativePointInNavCache(x, y, mNavSlop) && nativeCacheHitIsPlugin()) {
+ return nativeCacheHitNodeBounds();
+ } else {
+ return null;
+ }
+ }
+
+ /*
+ * Return true if the rect (e.g. plugin) is fully visible and maximized
+ * inside the WebView.
+ */
+ boolean isRectFitOnScreen(Rect rect) {
+ final int rectWidth = rect.width();
+ final int rectHeight = rect.height();
final int viewWidth = getViewWidth();
final int viewHeight = getViewHeightWithTitle();
- float scale = Math.min((float) viewWidth / view.width, (float) viewHeight / view.height);
+ float scale = Math.min((float) viewWidth / rectWidth, (float) viewHeight / rectHeight);
scale = mZoomManager.computeScaleWithLimits(scale);
return !mZoomManager.willScaleTriggerZoom(scale)
- && contentToViewX(view.x) >= mScrollX
- && contentToViewX(view.x + view.width) <= mScrollX + viewWidth
- && contentToViewY(view.y) >= mScrollY
- && contentToViewY(view.y + view.height) <= mScrollY + viewHeight;
+ && contentToViewX(rect.left) >= mScrollX
+ && contentToViewX(rect.right) <= mScrollX + viewWidth
+ && contentToViewY(rect.top) >= mScrollY
+ && contentToViewY(rect.bottom) <= mScrollY + viewHeight;
}
/*
* Maximize and center the rectangle, specified in the document coordinate
* space, inside the WebView. If the zoom doesn't need to be changed, do an
* animated scroll to center it. If the zoom needs to be changed, find the
- * zoom center and do a smooth zoom transition.
+ * zoom center and do a smooth zoom transition. The rect is in document
+ * coordinates
*/
- void centerFitRect(int docX, int docY, int docWidth, int docHeight) {
- int viewWidth = getViewWidth();
- int viewHeight = getViewHeightWithTitle();
- float scale = Math.min((float) viewWidth / docWidth, (float) viewHeight
- / docHeight);
+ void centerFitRect(Rect rect) {
+ final int rectWidth = rect.width();
+ final int rectHeight = rect.height();
+ final int viewWidth = getViewWidth();
+ final int viewHeight = getViewHeightWithTitle();
+ float scale = Math.min((float) viewWidth / rectWidth, (float) viewHeight
+ / rectHeight);
scale = mZoomManager.computeScaleWithLimits(scale);
if (!mZoomManager.willScaleTriggerZoom(scale)) {
- pinScrollTo(contentToViewX(docX + docWidth / 2) - viewWidth / 2,
- contentToViewY(docY + docHeight / 2) - viewHeight / 2,
+ pinScrollTo(contentToViewX(rect.left + rectWidth / 2) - viewWidth / 2,
+ contentToViewY(rect.top + rectHeight / 2) - viewHeight / 2,
true, 0);
} else {
float actualScale = mZoomManager.getScale();
- float oldScreenX = docX * actualScale - mScrollX;
- float rectViewX = docX * scale;
- float rectViewWidth = docWidth * scale;
+ float oldScreenX = rect.left * actualScale - mScrollX;
+ float rectViewX = rect.left * scale;
+ float rectViewWidth = rectWidth * scale;
float newMaxWidth = mContentWidth * scale;
float newScreenX = (viewWidth - rectViewWidth) / 2;
// pin the newX to the WebView
@@ -6770,10 +6787,10 @@
}
float zoomCenterX = (oldScreenX * scale - newScreenX * actualScale)
/ (scale - actualScale);
- float oldScreenY = docY * actualScale + getTitleHeight()
+ float oldScreenY = rect.top * actualScale + getTitleHeight()
- mScrollY;
- float rectViewY = docY * scale + getTitleHeight();
- float rectViewHeight = docHeight * scale;
+ float rectViewY = rect.top * scale + getTitleHeight();
+ float rectViewHeight = rectHeight * scale;
float newMaxHeight = mContentHeight * scale + getTitleHeight();
float newScreenY = (viewHeight - rectViewHeight) / 2;
// pin the newY to the WebView
@@ -7506,8 +7523,7 @@
break;
case CENTER_FIT_RECT:
- Rect r = (Rect)msg.obj;
- centerFitRect(r.left, r.top, r.width(), r.height());
+ centerFitRect((Rect)msg.obj);
break;
case SET_SCROLLBAR_MODES:
@@ -8150,6 +8166,7 @@
}
private native int nativeCacheHitFramePointer();
+ private native boolean nativeCacheHitIsPlugin();
private native Rect nativeCacheHitNodeBounds();
private native int nativeCacheHitNodePointer();
/* package */ native void nativeClearCursor();
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index b4a33de..88a54ea 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -20,6 +20,7 @@
import android.content.pm.PackageManager;
import android.graphics.Canvas;
import android.graphics.Point;
+import android.graphics.Rect;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
@@ -551,12 +552,12 @@
* If the double tap was on a plugin then either zoom to maximize the
* plugin on the screen or scale to overview mode.
*/
- ViewManager.ChildView plugin = mWebView.mViewManager.hitTest(mAnchorX, mAnchorY);
- if (plugin != null) {
- if (mWebView.isPluginFitOnScreen(plugin)) {
+ Rect pluginBounds = mWebView.getPluginBounds(mAnchorX, mAnchorY);
+ if (pluginBounds != null) {
+ if (mWebView.isRectFitOnScreen(pluginBounds)) {
zoomToOverview();
} else {
- mWebView.centerFitRect(plugin.x, plugin.y, plugin.width, plugin.height);
+ mWebView.centerFitRect(pluginBounds);
}
return;
}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 7631df4..d8f5972 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2642,6 +2642,7 @@
setPressed(true);
layoutChildren();
positionSelector(mMotionPosition, child);
+ refreshDrawableState();
final int longPressTimeout = ViewConfiguration.getLongPressTimeout();
final boolean longClickable = isLongClickable();
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index 4d63cf4..2c53005 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -46,8 +46,8 @@
* displayed. Also the minimal and maximal date from which dates to be selected
* can be customized.
* <p>
- * See the <a href="{@docRoot}
- * resources/tutorials/views/hello-datepicker.html">Date Picker tutorial</a>.
+ * See the <a href="{@docRoot}resources/tutorials/views/hello-datepicker.html">Date
+ * Picker tutorial</a>.
* </p>
* <p>
* For a dialog using this view, see {@link android.app.DatePickerDialog}.
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 24165aa..8f25311 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -796,18 +796,21 @@
if (this.value != null) {
final Bitmap b = (Bitmap) this.value;
final Bitmap.Config c = b.getConfig();
+ // If we don't know, be pessimistic and assume 4
int bpp = 4;
- switch (c) {
- case ALPHA_8:
- bpp = 1;
- break;
- case RGB_565:
- case ARGB_4444:
- bpp = 2;
- break;
- case ARGB_8888:
- bpp = 4;
- break;
+ if (c != null) {
+ switch (c) {
+ case ALPHA_8:
+ bpp = 1;
+ break;
+ case RGB_565:
+ case ARGB_4444:
+ bpp = 2;
+ break;
+ case ARGB_8888:
+ bpp = 4;
+ break;
+ }
}
counter.bitmapIncrement(b.getWidth() * b.getHeight() * bpp);
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 623cd41..1895d79 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -7931,9 +7931,6 @@
max = Math.max(0, Math.max(selStart, selEnd));
}
- ClipboardManager clipboard = (ClipboardManager)getContext()
- .getSystemService(Context.CLIPBOARD_SERVICE);
-
switch (id) {
case ID_COPY_URL:
URLSpan[] urls = ((Spanned) mText).getSpans(min, max, URLSpan.class);
@@ -7942,7 +7939,7 @@
for (int i=0; i<urls.length; i++) {
Uri uri = Uri.parse(urls[0].getURL());
if (clip == null) {
- clip = ClipData.newRawUri(null, null, uri);
+ clip = ClipData.newRawUri(null, uri);
} else {
clip.addItem(new ClipData.Item(uri));
}
@@ -7976,15 +7973,13 @@
return true;
case ID_CUT:
- setPrimaryClip(ClipData.newPlainText(null, null,
- mTransformed.subSequence(min, max)));
+ setPrimaryClip(ClipData.newPlainText(null, mTransformed.subSequence(min, max)));
((Editable) mText).delete(min, max);
stopSelectionActionMode();
return true;
case ID_COPY:
- setPrimaryClip(ClipData.newPlainText(null, null,
- mTransformed.subSequence(min, max)));
+ setPrimaryClip(ClipData.newPlainText(null, mTransformed.subSequence(min, max)));
stopSelectionActionMode();
return true;
}
@@ -8105,7 +8100,7 @@
final int start = getSelectionStart();
final int end = getSelectionEnd();
CharSequence selectedText = mTransformed.subSequence(start, end);
- ClipData data = ClipData.newPlainText(null, null, selectedText);
+ ClipData data = ClipData.newPlainText(null, selectedText);
DragLocalState localState = new DragLocalState(this, start, end);
startDrag(data, getTextThumbnailBuilder(selectedText), localState, 0);
stopSelectionActionMode();
@@ -8257,7 +8252,7 @@
if (clip != null) {
boolean didfirst = false;
for (int i=0; i<clip.getItemCount(); i++) {
- CharSequence paste = clip.getItem(i).coerceToText(getContext());
+ CharSequence paste = clip.getItemAt(i).coerceToText(getContext());
if (paste != null) {
if (!didfirst) {
long minMax = prepareSpacesAroundPaste(min, max, paste);
@@ -8404,8 +8399,12 @@
*/
public void updatePosition(HandleView handle, int x, int y);
+ public void updateOffset(HandleView handle, int offset);
+
public void updatePosition();
+ public int getCurrentOffset(HandleView handle);
+
/**
* This method is called by {@link #onTouchEvent(MotionEvent)} and gives the controller
* a chance to become active and/or visible.
@@ -8422,7 +8421,7 @@
}
private class PastePopupMenu implements OnClickListener {
- private PopupWindow mContainer;
+ private final PopupWindow mContainer;
private int mPositionX;
private int mPositionY;
private View mPasteView, mNoPasteView;
@@ -8521,12 +8520,11 @@
}
private class HandleView extends View {
- private boolean mPositionOnTop = false;
private Drawable mDrawable;
- private PopupWindow mContainer;
+ private final PopupWindow mContainer;
private int mPositionX;
private int mPositionY;
- private CursorController mController;
+ private final CursorController mController;
private boolean mIsDragging;
private float mTouchToWindowOffsetX;
private float mTouchToWindowOffsetY;
@@ -8543,6 +8541,46 @@
private PastePopupMenu mPastePopupWindow;
private Runnable mLongPressCallback;
+ // Touch-up filter: number of previous positions remembered
+ private static final int HISTORY_SIZE = 5;
+ private static final int TOUCH_UP_FILTER_DELAY = 150;
+ private final long[] mPreviousOffsetsTimes = new long[HISTORY_SIZE];
+ private final int[] mPreviousOffsets = new int[HISTORY_SIZE];
+ private int mPreviousOffsetIndex = 0;
+ private int mNumberPreviousOffsets = 0;
+
+ public void startTouchUpFilter(int offset) {
+ mNumberPreviousOffsets = 0;
+ addPositionToTouchUpFilter(offset);
+ }
+
+ public void addPositionToTouchUpFilter(int offset) {
+ if (mNumberPreviousOffsets > 0 &&
+ mPreviousOffsets[mPreviousOffsetIndex] == offset) {
+ // Make sure only actual changes of position are recorded.
+ return;
+ }
+
+ mPreviousOffsetIndex = (mPreviousOffsetIndex + 1) % HISTORY_SIZE;
+ mPreviousOffsets[mPreviousOffsetIndex] = offset;
+ mPreviousOffsetsTimes[mPreviousOffsetIndex] = SystemClock.uptimeMillis();
+ mNumberPreviousOffsets++;
+ }
+
+ public void filterOnTouchUp() {
+ final long now = SystemClock.uptimeMillis();
+ int i = 0;
+ int index = 0;
+ final int iMax = Math.min(mNumberPreviousOffsets, HISTORY_SIZE);
+ while (i < iMax) {
+ index = (mPreviousOffsetIndex - i + HISTORY_SIZE) % HISTORY_SIZE;
+ if ((now - mPreviousOffsetsTimes[index]) >= TOUCH_UP_FILTER_DELAY) break;
+ i++;
+ }
+
+ mController.updateOffset(this, mPreviousOffsets[index]);
+ }
+
public static final int LEFT = 0;
public static final int CENTER = 1;
public static final int RIGHT = 2;
@@ -8738,20 +8776,14 @@
@Override
protected void onDraw(Canvas c) {
mDrawable.setBounds(0, 0, mRight - mLeft, mBottom - mTop);
- if (mPositionOnTop) {
- c.save();
- c.rotate(180, (mRight - mLeft) / 2, (mBottom - mTop) / 2);
- mDrawable.draw(c);
- c.restore();
- } else {
- mDrawable.draw(c);
- }
+ mDrawable.draw(c);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN: {
+ startTouchUpFilter(mController.getCurrentOffset(this));
mDownPositionX = ev.getRawX();
mDownPositionY = ev.getRawY();
mTouchToWindowOffsetX = mDownPositionX - mPositionX;
@@ -8808,6 +8840,7 @@
}
}
}
+ filterOnTouchUp();
mIsDragging = false;
break;
@@ -8825,6 +8858,7 @@
}
void positionAtCursor(final int offset, boolean bottom) {
+ addPositionToTouchUpFilter(offset);
final int width = mDrawable.getIntrinsicWidth();
final int height = mDrawable.getIntrinsicHeight();
final int line = mLayout.getLineForOffset(offset);
@@ -8940,12 +8974,16 @@
int offset = getHysteresisOffset(x, y, previousOffset);
if (offset != previousOffset) {
- Selection.setSelection((Spannable) mText, offset);
- updatePosition();
+ updateOffset(handle, offset);
}
hideDelayed();
}
+ public void updateOffset(HandleView handle, int offset) {
+ Selection.setSelection((Spannable) mText, offset);
+ updatePosition();
+ }
+
public void updatePosition() {
final int offset = getSelectionStart();
@@ -8959,6 +8997,10 @@
getHandle().positionAtCursor(offset, true);
}
+ public int getCurrentOffset(HandleView handle) {
+ return getSelectionStart();
+ }
+
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
@@ -9069,6 +9111,20 @@
updatePosition();
}
+ public void updateOffset(HandleView handle, int offset) {
+ int start = getSelectionStart();
+ int end = getSelectionEnd();
+
+ if (mStartHandle == handle) {
+ start = offset;
+ } else {
+ end = offset;
+ }
+
+ Selection.setSelection((Spannable) mText, start, end);
+ updatePosition();
+ }
+
public void updatePosition() {
if (!isShowing()) {
return;
@@ -9089,6 +9145,10 @@
mEndHandle.positionAtCursor(selectionEnd, true);
}
+ public int getCurrentOffset(HandleView handle) {
+ return mStartHandle == handle ? getSelectionStart() : getSelectionEnd();
+ }
+
public boolean onTouchEvent(MotionEvent event) {
// This is done even when the View does not have focus, so that long presses can start
// selection and tap can move cursor from this tap position.
@@ -9300,7 +9360,7 @@
ClipData clipData = event.getClipData();
final int itemCount = clipData.getItemCount();
for (int i=0; i < itemCount; i++) {
- Item item = clipData.getItem(i);
+ Item item = clipData.getItemAt(i);
content.append(item.coerceToText(TextView.this.mContext));
}
diff --git a/core/java/com/android/internal/widget/WaveView.java b/core/java/com/android/internal/widget/WaveView.java
index 4cb3966..c7a90c4 100644
--- a/core/java/com/android/internal/widget/WaveView.java
+++ b/core/java/com/android/internal/widget/WaveView.java
@@ -152,7 +152,6 @@
mUnlockRing.setScaleX(0.1f);
mUnlockRing.setScaleY(0.1f);
mUnlockRing.setAlpha(0.0f);
-
mDrawables.add(mUnlockRing);
mUnlockDefault = new DrawableHolder(createDrawable(R.drawable.unlock_default));
@@ -192,7 +191,6 @@
if (DBG) Log.v(TAG, "State RESET_LOCK");
mWaveTimerDelay = WAVE_DELAY;
for (int i = 0; i < mLightWaves.size(); i++) {
- //TweenMax.to(mLightWave.get(i), .3, {alpha:0, ease:Quint.easeOut});
DrawableHolder holder = mLightWaves.get(i);
holder.addAnimTo(300, 0, "alpha", 0.0f, false);
}
@@ -200,16 +198,12 @@
mLightWaves.get(i).startAnimations(this);
}
- //TweenMax.to(unlockRing, .5, { x: lockX, y: lockY, scaleX: .1, scaleY: .1,
- // alpha: 0, overwrite: true, ease:Quint.easeOut });
mUnlockRing.addAnimTo(DURATION, 0, "x", mLockCenterX, true);
mUnlockRing.addAnimTo(DURATION, 0, "y", mLockCenterY, true);
mUnlockRing.addAnimTo(DURATION, 0, "scaleX", 0.1f, true);
mUnlockRing.addAnimTo(DURATION, 0, "scaleY", 0.1f, true);
mUnlockRing.addAnimTo(DURATION, 0, "alpha", 0.0f, true);
- //TweenMax.to(unlockDefault, 0, { x: lockX, y: lockY, scaleX: .1, scaleY: .1,
- // alpha: 0 , overwrite: true });
mUnlockDefault.removeAnimationFor("x");
mUnlockDefault.removeAnimationFor("y");
mUnlockDefault.removeAnimationFor("scaleX");
@@ -220,15 +214,10 @@
mUnlockDefault.setScaleX(0.1f);
mUnlockDefault.setScaleY(0.1f);
mUnlockDefault.setAlpha(0.0f);
-
- //TweenMax.to(unlockDefault, .5, { delay: .1, scaleX: 1, scaleY: 1,
- // alpha: 1, overwrite: true, ease:Quint.easeOut });
mUnlockDefault.addAnimTo(DURATION, SHORT_DELAY, "scaleX", 1.0f, true);
mUnlockDefault.addAnimTo(DURATION, SHORT_DELAY, "scaleY", 1.0f, true);
mUnlockDefault.addAnimTo(DURATION, SHORT_DELAY, "alpha", 1.0f, true);
- //TweenMax.to(unlockHalo, 0, { x: lockX, y: lockY, scaleX:.1, scaleY: .1,
- // alpha: 0 , overwrite: true });
mUnlockHalo.removeAnimationFor("x");
mUnlockHalo.removeAnimationFor("y");
mUnlockHalo.removeAnimationFor("scaleX");
@@ -239,16 +228,12 @@
mUnlockHalo.setScaleX(0.1f);
mUnlockHalo.setScaleY(0.1f);
mUnlockHalo.setAlpha(0.0f);
-
- //TweenMax.to(unlockHalo, .5, { x: lockX, y: lockY, scaleX: 1, scaleY: 1,
- // alpha: 1 , overwrite: true, ease:Quint.easeOut });
mUnlockHalo.addAnimTo(DURATION, SHORT_DELAY, "x", mLockCenterX, true);
mUnlockHalo.addAnimTo(DURATION, SHORT_DELAY, "y", mLockCenterY, true);
mUnlockHalo.addAnimTo(DURATION, SHORT_DELAY, "scaleX", 1.0f, true);
mUnlockHalo.addAnimTo(DURATION, SHORT_DELAY, "scaleY", 1.0f, true);
mUnlockHalo.addAnimTo(DURATION, SHORT_DELAY, "alpha", 1.0f, true);
- //lockTimer.stop();
removeCallbacks(mLockTimerActions);
mLockState = STATE_READY;
@@ -260,8 +245,6 @@
case STATE_START_ATTEMPT:
if (DBG) Log.v(TAG, "State START_ATTEMPT");
- //TweenMax.to(unlockDefault, 0, {scaleX: .1, scaleY:.1, alpha: 0,
- // x:lockX +182, y: lockY , overwrite: true });
mUnlockDefault.removeAnimationFor("x");
mUnlockDefault.removeAnimationFor("y");
mUnlockDefault.removeAnimationFor("scaleX");
@@ -273,14 +256,10 @@
mUnlockDefault.setScaleY(0.1f);
mUnlockDefault.setAlpha(0.0f);
- //TweenMax.to(unlockDefault, 0.5, { delay: .1 , scaleX: 1, scaleY: 1,
- // alpha: 1, ease:Quint.easeOut });
mUnlockDefault.addAnimTo(DURATION, SHORT_DELAY, "scaleX", 1.0f, false);
mUnlockDefault.addAnimTo(DURATION, SHORT_DELAY, "scaleY", 1.0f, false);
mUnlockDefault.addAnimTo(DURATION, SHORT_DELAY, "alpha", 1.0f, false);
- //TweenMax.to(unlockRing, 0.5, {scaleX: 1, scaleY: 1,
- // alpha: 1, ease:Quint.easeOut, overwrite: true });
mUnlockRing.addAnimTo(DURATION, 0, "scaleX", 1.0f, true);
mUnlockRing.addAnimTo(DURATION, 0, "scaleY", 1.0f, true);
mUnlockRing.addAnimTo(DURATION, 0, "alpha", 1.0f, true);
@@ -292,12 +271,8 @@
case STATE_ATTEMPTING:
if (DBG) Log.v(TAG, "State ATTEMPTING (fingerDown = " + fingerDown + ")");
- //TweenMax.to(unlockHalo, 0.4, { x:mouseX, y:mouseY, scaleX:1, scaleY:1,
- // alpha: 1, ease:Quint.easeOut });
if (dragDistance > mSnapRadius) {
if (fingerDown) {
- //TweenMax.to(unlockHalo, 0.4, {x:ringX, y:ringY, scaleX:1, scaleY:1,
- // alpha: 1 , ease:Quint.easeOut , overwrite: true });
mUnlockHalo.addAnimTo(0, 0, "x", ringX, true);
mUnlockHalo.addAnimTo(0, 0, "y", ringY, true);
mUnlockHalo.addAnimTo(0, 0, "scaleX", 1.0f, true);
@@ -320,8 +295,6 @@
if (DBG) Log.v(TAG, "State UNLOCK_ATTEMPT");
if (dragDistance > mSnapRadius) {
for (int n = 0; n < mLightWaves.size(); n++) {
- //TweenMax.to(this["lightWave"+n], .5,{alpha:0, delay: (6+n-currentWave)*.1,
- // x:ringX, y:ringY, scaleX: .1, scaleY: .1, ease:Quint.easeOut});
DrawableHolder wave = mLightWaves.get(n);
long delay = 1000L*(6 + n - mCurrentWave)/10L;
wave.addAnimTo(FINAL_DURATION, delay, "x", ringX, true);
@@ -334,19 +307,14 @@
mLightWaves.get(i).startAnimations(this);
}
- //TweenMax.to(unlockRing, .5, {x:ringX, y: ringY, scaleX: .1, scaleY: .1,
- // alpha: 0, ease: Quint.easeOut });
mUnlockRing.addAnimTo(FINAL_DURATION, 0, "x", ringX, false);
mUnlockRing.addAnimTo(FINAL_DURATION, 0, "y", ringY, false);
mUnlockRing.addAnimTo(FINAL_DURATION, 0, "scaleX", 0.1f, false);
mUnlockRing.addAnimTo(FINAL_DURATION, 0, "scaleY", 0.1f, false);
mUnlockRing.addAnimTo(FINAL_DURATION, 0, "alpha", 0.0f, false);
- //TweenMax.to(unlockRing, .5, { delay: 1.3, alpha: 0 , ease: Quint.easeOut });
mUnlockRing.addAnimTo(FINAL_DURATION, FINAL_DELAY, "alpha", 0.0f, false);
- //TweenMax.to(unlockDefault, 0, { x:ringX, y: ringY, scaleX: .1, scaleY: .1,
- // alpha: 0 , overwrite: true });
mUnlockDefault.removeAnimationFor("x");
mUnlockDefault.removeAnimationFor("y");
mUnlockDefault.removeAnimationFor("scaleX");
@@ -358,26 +326,19 @@
mUnlockDefault.setScaleY(0.1f);
mUnlockDefault.setAlpha(0.0f);
- //TweenMax.to(unlockDefault, .5, { x:ringX, y: ringY, scaleX: 1, scaleY: 1,
- // alpha: 1 , ease: Quint.easeOut , overwrite: true });
mUnlockDefault.addAnimTo(FINAL_DURATION, 0, "x", ringX, true);
mUnlockDefault.addAnimTo(FINAL_DURATION, 0, "y", ringY, true);
mUnlockDefault.addAnimTo(FINAL_DURATION, 0, "scaleX", 1.0f, true);
mUnlockDefault.addAnimTo(FINAL_DURATION, 0, "scaleY", 1.0f, true);
mUnlockDefault.addAnimTo(FINAL_DURATION, 0, "alpha", 1.0f, true);
- //TweenMax.to(unlockDefault, .5, { delay: 1.3, scaleX: 3, scaleY: 3,
- // alpha: 1, ease: Quint.easeOut });
mUnlockDefault.addAnimTo(FINAL_DURATION, FINAL_DELAY, "scaleX", 3.0f, false);
mUnlockDefault.addAnimTo(FINAL_DURATION, FINAL_DELAY, "scaleY", 3.0f, false);
mUnlockDefault.addAnimTo(FINAL_DURATION, FINAL_DELAY, "alpha", 0.0f, false);
- //TweenMax.to(unlockHalo, .5, { x:ringX, y: ringY , ease: Back.easeOut });
mUnlockHalo.addAnimTo(FINAL_DURATION, 0, "x", ringX, false);
mUnlockHalo.addAnimTo(FINAL_DURATION, 0, "y", ringY, false);
- //TweenMax.to(unlockHalo, .5, { delay: 1.3, scaleX: 3, scaleY: 3,
- // alpha: 1, ease: Quint.easeOut });
mUnlockHalo.addAnimTo(FINAL_DURATION, FINAL_DELAY, "scaleX", 3.0f, false);
mUnlockHalo.addAnimTo(FINAL_DURATION, FINAL_DELAY, "scaleY", 3.0f, false);
mUnlockHalo.addAnimTo(FINAL_DURATION, FINAL_DELAY, "alpha", 0.0f, false);
@@ -429,10 +390,12 @@
if (DBG) Log.v(TAG, "LockTimerActions");
// reset lock after inactivity
if (mLockState == STATE_ATTEMPTING) {
+ if (DBG) Log.v(TAG, "Timer resets to STATE_RESET_LOCK");
mLockState = STATE_RESET_LOCK;
}
// for prototype, reset after successful unlock
if (mLockState == STATE_UNLOCK_SUCCESS) {
+ if (DBG) Log.v(TAG, "Timer resets to STATE_RESET_LOCK after success");
mLockState = STATE_RESET_LOCK;
}
invalidate();
@@ -455,16 +418,12 @@
wave.setX(mMouseX);
wave.setY(mMouseY);
- //TweenMax.to(this["lightWave"+currentWave], 2, { x:lockX , y:lockY, alpha: 1.5,
- // scaleX: 1, scaleY:1, ease:Cubic.easeOut});
wave.addAnimTo(WAVE_DURATION, 0, "x", mLockCenterX, true);
wave.addAnimTo(WAVE_DURATION, 0, "y", mLockCenterY, true);
wave.addAnimTo(WAVE_DURATION*2/3, 0, "alpha", 1.0f, true);
wave.addAnimTo(WAVE_DURATION, 0, "scaleX", 1.0f, true);
wave.addAnimTo(WAVE_DURATION, 0, "scaleY", 1.0f, true);
- //TweenMax.to(this["lightWave"+currentWave], 1, { delay: 1.3
- // , alpha: 0 , ease:Quint.easeOut});
wave.addAnimTo(1000, RING_DELAY, "alpha", 0.0f, false);
wave.startAnimations(WaveView.this);
@@ -603,6 +562,8 @@
}
public void reset() {
+ if (DBG) Log.v(TAG, "reset() : resets state to STATE_RESET_LOCK");
mLockState = STATE_RESET_LOCK;
+ invalidate();
}
}
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index e47d91c..491a388 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -517,6 +517,11 @@
}
}
+static jboolean nativeIsSeekable(JNIEnv* env, jobject, jobject fileDescriptor) {
+ jint descriptor = env->GetIntField(fileDescriptor, gFileDescriptor_descriptor);
+ return ::lseek64(descriptor, 0, SEEK_CUR) != -1 ? JNI_TRUE : JNI_FALSE;
+}
+
///////////////////////////////////////////////////////////////////////////////
static JNINativeMethod gMethods[] = {
@@ -546,6 +551,11 @@
},
{ "nativeSetDefaultConfig", "(I)V", (void*)nativeSetDefaultConfig },
+
+ { "nativeIsSeekable",
+ "(Ljava/io/FileDescriptor;)Z",
+ (void*)nativeIsSeekable
+ },
};
static JNINativeMethod gOptionsMethods[] = {
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 40cec3e..ac491ea 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -213,6 +213,11 @@
renderer->scale(sx, sy);
}
+static void android_view_GLES20Canvas_skew(JNIEnv* env, jobject canvas,
+ OpenGLRenderer* renderer, jfloat sx, jfloat sy) {
+ renderer->skew(sx, sy);
+}
+
static void android_view_GLES20Canvas_setMatrix(JNIEnv* env, jobject canvas,
OpenGLRenderer* renderer, SkMatrix* matrix) {
renderer->setMatrix(matrix);
@@ -550,6 +555,7 @@
{ "nTranslate", "(IFF)V", (void*) android_view_GLES20Canvas_translate },
{ "nRotate", "(IF)V", (void*) android_view_GLES20Canvas_rotate },
{ "nScale", "(IFF)V", (void*) android_view_GLES20Canvas_scale },
+ { "nSkew", "(IFF)V", (void*) android_view_GLES20Canvas_skew },
{ "nSetMatrix", "(II)V", (void*) android_view_GLES20Canvas_setMatrix },
{ "nGetMatrix", "(I)I", (void*) android_view_GLES20Canvas_getNativeMatrix },
diff --git a/core/res/res/animator/fragment_next_enter.xml b/core/res/res/animator/fragment_fade_enter.xml
similarity index 100%
rename from core/res/res/animator/fragment_next_enter.xml
rename to core/res/res/animator/fragment_fade_enter.xml
diff --git a/core/res/res/animator/fragment_next_exit.xml b/core/res/res/animator/fragment_fade_exit.xml
similarity index 100%
rename from core/res/res/animator/fragment_next_exit.xml
rename to core/res/res/animator/fragment_fade_exit.xml
diff --git a/core/res/res/animator/fragment_prev_enter.xml b/core/res/res/animator/fragment_prev_enter.xml
deleted file mode 100644
index 13b15f3..0000000
--- a/core/res/res/animator/fragment_prev_enter.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:zAdjustment="top">
- <objectAnimator
- android:interpolator="@interpolator/decelerate_cubic"
- android:valueFrom="0"
- android:valueTo="1"
- android:valueType="floatType"
- android:propertyName="alpha"
- android:duration="@android:integer/config_activityDefaultDur"/>
-</set>
\ No newline at end of file
diff --git a/core/res/res/animator/fragment_prev_exit.xml b/core/res/res/animator/fragment_prev_exit.xml
deleted file mode 100644
index 503b7ad..0000000
--- a/core/res/res/animator/fragment_prev_exit.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:zAdjustment="normal">
- <objectAnimator
- android:interpolator="@interpolator/decelerate_cubic"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType"
- android:propertyName="alpha"
- android:duration="@android:integer/config_activityShortDur"/>
-</set>
\ No newline at end of file
diff --git a/core/res/res/color/secondary_text_holo_dark.xml b/core/res/res/color/secondary_text_holo_dark.xml
index 881a1de3..7c564f7 100644
--- a/core/res/res/color/secondary_text_holo_dark.xml
+++ b/core/res/res/color/secondary_text_holo_dark.xml
@@ -17,11 +17,11 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
<item android:state_window_focused="false" android:color="@android:color/dim_foreground_holo_dark"/>
- <item android:state_selected="true" android:state_enabled="false" android:color="@android:color/dim_foreground_inverse_disabled_holo_dark"/>
- <item android:state_pressed="true" android:state_enabled="false" android:color="@android:color/dim_foreground_inverse_disabled_holo_dark"/>
- <item android:state_selected="true" android:color="@android:color/dim_foreground_inverse_holo_dark"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_inverse_holo_dark"/>
- <item android:state_pressed="true" android:color="@android:color/dim_foreground_inverse_holo_dark"/>
+ <item android:state_selected="true" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
+ <item android:state_pressed="true" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
+ <item android:state_selected="true" android:color="@android:color/dim_foreground_holo_dark"/>
+ <item android:state_activated="true" android:color="@android:color/bright_foreground_holo_dark"/>
+ <item android:state_pressed="true" android:color="@android:color/dim_foreground_holo_dark"/>
<item android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
<item android:color="@android:color/dim_foreground_holo_dark"/> <!-- not selected -->
</selector>
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_0.png b/core/res/res/drawable-hdpi/stat_sys_battery_0.png
index 3ed0105..82f2509 100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_0.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_10.png b/core/res/res/drawable-hdpi/stat_sys_battery_10.png
old mode 100644
new mode 100755
index c81616b..4486553
--- a/core/res/res/drawable-hdpi/stat_sys_battery_10.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_10.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_100.png b/core/res/res/drawable-hdpi/stat_sys_battery_100.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_20.png b/core/res/res/drawable-hdpi/stat_sys_battery_20.png
old mode 100644
new mode 100755
index eb5ef09..c8f9c92
--- a/core/res/res/drawable-hdpi/stat_sys_battery_20.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_20.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_40.png b/core/res/res/drawable-hdpi/stat_sys_battery_40.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_60.png b/core/res/res/drawable-hdpi/stat_sys_battery_60.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_80.png b/core/res/res/drawable-hdpi/stat_sys_battery_80.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim0.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
old mode 100644
new mode 100755
index 9a6c683..c7464f7
--- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png
old mode 100644
new mode 100755
index c40c622..997feb3
--- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_unknown.png b/core/res/res/drawable-hdpi/stat_sys_battery_unknown.png
old mode 100644
new mode 100755
index 1a9abaf..dadfe8d
--- a/core/res/res/drawable-hdpi/stat_sys_battery_unknown.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_unknown.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_arrow.png b/core/res/res/drawable-mdpi/pointer_arrow.png
index e01129c..fbd187c 100644
--- a/core/res/res/drawable-mdpi/pointer_arrow.png
+++ b/core/res/res/drawable-mdpi/pointer_arrow.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/btn_code_lock_default.png b/core/res/res/drawable-xlarge-hdpi/btn_code_lock_default.png
new file mode 100644
index 0000000..719eb89
--- /dev/null
+++ b/core/res/res/drawable-xlarge-hdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/btn_code_lock_touched.png b/core/res/res/drawable-xlarge-hdpi/btn_code_lock_touched.png
new file mode 100644
index 0000000..719eb89
--- /dev/null
+++ b/core/res/res/drawable-xlarge-hdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_green_up.png
new file mode 100644
index 0000000..c605607
--- /dev/null
+++ b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_green_up.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_red_up.png b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_red_up.png
new file mode 100644
index 0000000..a798863
--- /dev/null
+++ b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_red_up.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_default.png
new file mode 100644
index 0000000..07e6165
--- /dev/null
+++ b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_green.png
new file mode 100644
index 0000000..ec17841
--- /dev/null
+++ b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_red.png b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_red.png
new file mode 100644
index 0000000..a0cb1ec
--- /dev/null
+++ b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_point_area_red.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-mdpi/btn_code_lock_default.png b/core/res/res/drawable-xlarge-mdpi/btn_code_lock_default.png
index eb4e0be..45cc20d 100644
--- a/core/res/res/drawable-xlarge-mdpi/btn_code_lock_default.png
+++ b/core/res/res/drawable-xlarge-mdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-mdpi/btn_code_lock_touched.png b/core/res/res/drawable-xlarge-mdpi/btn_code_lock_touched.png
index e56ae5b..45cc20d 100644
--- a/core/res/res/drawable-xlarge-mdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-xlarge-mdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_green_up.png
index 8c3e363..0bc86c3 100644
--- a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_green_up.png
+++ b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_green_up.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_red_up.png b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_red_up.png
index 7b3e41b..2ab4547 100644
--- a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_red_up.png
+++ b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_drag_direction_red_up.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_default.png
index f163742..fe72d00 100644
--- a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_default.png
+++ b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_green.png
index 37abb2f..be666c6 100644
--- a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_green.png
+++ b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_red.png b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_red.png
index c6f6fc2..9627197 100644
--- a/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_red.png
+++ b/core/res/res/drawable-xlarge-mdpi/indicator_code_lock_point_area_red.png
Binary files differ
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 080d66d..8a506a3 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"تعيين الخادم الوكيل العمومي للجهاز لكي يتم استخدامه أثناء تمكين السياسة. يعين مشرف الجهاز الأول فقط الخادم الوكيل العمومي الفعال."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"تعيين انتهاء صلاحية كلمة المرور"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"التحكم في الوقت المستغرق قبل الحاجة إلى تغيير كلمة مرور شاشة التوقف"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"الرئيسية"</item>
<item msgid="869923650527136615">"الجوال"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"تم توصيل تصحيح أخطاء USB"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"اختيار تعطيل تصحيح أخطاء USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"تحديد طريقة الإرسال"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789 أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"العناصر المرشحة"</u></string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index d1176b8..2736269 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Задаване на глобалния прокси сървър, който да се използва, когато правилото е активирано. Само първият администратор на устройството задава действителния глобален прокси сървър."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Срок на валидност на паролата"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Контролирайте след колко време трябва да се променя паролата при заключване на екрана"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Домашен"</item>
<item msgid="869923650527136615">"Мобилен"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Отстраняването на грешки през USB е свързано"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Изберете, за да деактивирате отстраняването на грешки през USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Избиране на метод на въвеждане"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"кандидати"</u></string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index e352fc0..ba93303 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Defineix el servidor intermediari global del dispositiu que cal utilitzar mentre la política estigui activada. Només el primer administrador del dispositiu pot definir el servidor intermediari global efectiu."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Defineix la caducitat de la contrasenya"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Controla quant de temps abans de la pantalla de bloqueig cal canviar la contrasenya"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Mòbil"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuració d\'USB connectada"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Seleccioneu-ho per desactivar la depuració d\'USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Selecció del mètode d\'entrada"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidats"</u></string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 441ad01..7495a66 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Vyberte globální proxy server, který se bude používat, když jsou zásady aktivní. Aktuální globální proxy server nastavuje pouze první správce zařízení."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Nastavit konec platnosti hesla"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Ovládání doby, po jejímž uplynutí je nutné změnit heslo pro odemknutí obrazovky"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Domů"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Ladění přes rozhraní USB připojeno"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Vyberte, chcete-li zakázat ladění USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Výběr metody zadávání dat"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidáti"</u></string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 0242ee9..0c9aefd 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Angiv enhedens globale proxy, der skal bruges, mens politikken er aktiveret. Kun den første enhedsadministrator angiver den effektive globale proxy."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Indstil udløb for adgangskode"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Kontroller, hvor lang tid der skal gå, før adgangskoden til skærmlåsen skal ændres."</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hjem"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-fejlretning er tilsluttet"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Vælg for at deaktivere USB-fejlretning."</string>
<string name="select_input_method" msgid="6865512749462072765">"Vælg indtastningsmetode"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 87f14c5..7856aaf 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Den globalen Proxy des Geräts zur Verwendung während der Aktivierung der Richtlinie festlegen. Nur der erste Geräteadministrator kann den gültigen globalen Proxy festlegen."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Ablauf des Passworts festlegen"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Zeitraum bis zur Änderung des Passworts für die Bildschirmsperre festlegen"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Privat"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-Debugging verbunden"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Auswählen, um USB-Debugging zu deaktivieren."</string>
<string name="select_input_method" msgid="6865512749462072765">"Eingabemethode auswählen"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"Kandidaten"</u></string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 6b8db1e..7dc9747 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Ορίστε τη χρήση του γενικού διακομιστή μεσολάβησης της συσκευής όταν είναι ενεργοποιημένη η πολιτική. Μόνο ο διαχειριστής της πρώτης συσκευής ορίζει τον ισχύοντα γενικό διακομιστή μεσολάβησης."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Ορισμός λήξης κωδ. πρόσβασης"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Ελέγξτε πόσος χρόνος απομένει προτού πρέπει να αλλάξετε τον κωδικό πρόσβασης κλειδώματος της οθόνης"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Οικία"</item>
<item msgid="869923650527136615">"Κινητό"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Συνδέθηκε ο εντοπισμός σφαλμάτων USB"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Επιλογή για απενεργοποίηση του εντοπισμού σφαλμάτων USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Επιλογή μεθόδου εισόδου"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"υποψήφιοι"</u></string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index a981ed6..a63e2c4 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Set the device\'s global proxy to be used while policy is enabled. Only the first device admin sets the effective global proxy."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Set password expiry"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Control how long before lock-screen password needs to be changed"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Home"</item>
<item msgid="869923650527136615">"Mobile"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Select to disable USB debugging."</string>
<string name="select_input_method" msgid="6865512749462072765">"Select input method"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidates"</u></string>
diff --git a/core/res/res/values-es-rUS-xlarge/strings.xml b/core/res/res/values-es-rUS-xlarge/strings.xml
index b1409ba..81b3f1a 100644
--- a/core/res/res/values-es-rUS-xlarge/strings.xml
+++ b/core/res/res/values-es-rUS-xlarge/strings.xml
@@ -288,6 +288,8 @@
<!-- XL -->
<string name="capital_on" msgid="5705918046896729554">"ENCENDIDO"</string>
<!-- XL -->
+ <string name="capital_off" msgid="6734525950925281617">"APAGADO"</string>
+ <!-- XL -->
<string name="wait" msgid="8036803866051401072">"Espera"</string>
<!-- XL -->
<string name="heavy_weight_notification" msgid="5762367358298413602">"<xliff:g id="APP">%1$s</xliff:g> se está ejecutando"</string>
@@ -311,6 +313,10 @@
<!-- XL -->
<string name="permdesc_mediaStorageWrite" product="default" msgid="2372999661142345443">"Permite que una aplicación modifique los contenidos del almacenamiento interno de medios."</string>
<!-- XL -->
+ <string name="policylab_encryptedStorage" msgid="488196329176602372">"Establecer la encriptación del almacenamiento"</string>
+ <!-- XL -->
+ <string name="policydesc_encryptedStorage" msgid="6111889605506443825">"Requiere que los datos almacenados de la aplicación estén encriptados"</string>
+ <!-- XL -->
<string name="autofill_address_summary_name_format" msgid="7531610259426153850">"$1$2$3"</string>
<!-- XL -->
<string name="autofill_address_summary_format" msgid="8398158823767723887">"$1$2$3"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 5e6645d..5d1a25f 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -489,6 +489,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Configuración del proxy global de dispositivo que se utilizará mientras se habilita la política. Sólo la primera administración de dispositivo configura el proxy global efectivo."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Establecer la caducidad de la contraseña"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Verifica cuánto tiempo antes debes cambiar la contraseña de la pantalla de bloqueo"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Celular"</item>
@@ -809,8 +813,8 @@
<string name="no" msgid="5141531044935541497">"Cancelar"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Atención"</string>
<string name="loading" msgid="1760724998928255250">"Cargando..."</string>
- <string name="capital_on" msgid="1544682755514494298">"Encendido"</string>
- <string name="capital_off" msgid="6815870386972805832">"APAGADO"</string>
+ <string name="capital_on" msgid="1544682755514494298">"Sí"</string>
+ <string name="capital_off" msgid="6815870386972805832">"No"</string>
<string name="whichApplication" msgid="4533185947064773386">"Completar la acción mediante"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Utilizar de manera predeterminada en esta acción."</string>
<string name="clearDefaultHintMsg" msgid="4815455344600932173">"Borrar la predeterminación en Configuración de la página principal > Aplicaciones > Administrar aplicaciones."</string>
@@ -904,6 +908,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración de USB conectada"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Seleccionar para desactivar la depuración de USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Seleccionar método de entrada"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 4f02c4b..a4d6545 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Define el servidor proxy global que se debe utilizar mientras la política esté habilitada. Solo el primer administrador de dispositivos define el servidor proxy global efectivo."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Definir caducidad contraseña"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Permite controlar cuándo se debe cambiar la contraseña de bloqueo de la pantalla."</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Móvil"</item>
@@ -501,7 +505,7 @@
<item msgid="9192514806975898961">"Personalizar"</item>
</string-array>
<string-array name="emailAddressTypes">
- <item msgid="8073994352956129127">"Personal"</item>
+ <item msgid="8073994352956129127">"Casa"</item>
<item msgid="7084237356602625604">"Trabajo"</item>
<item msgid="1112044410659011023">"Otra"</item>
<item msgid="2374913952870110618">"Personalizar"</item>
@@ -810,8 +814,8 @@
<string name="no" msgid="5141531044935541497">"Cancelar"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Atención"</string>
<string name="loading" msgid="1760724998928255250">"Cargando…"</string>
- <string name="capital_on" msgid="1544682755514494298">"Activado"</string>
- <string name="capital_off" msgid="6815870386972805832">"Desconectado"</string>
+ <string name="capital_on" msgid="1544682755514494298">"SÍ"</string>
+ <string name="capital_off" msgid="6815870386972805832">"NO"</string>
<string name="whichApplication" msgid="4533185947064773386">"Completar acción utilizando"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Utilizar de forma predeterminada para esta acción"</string>
<string name="clearDefaultHintMsg" msgid="4815455344600932173">"Borrar valores predeterminados en la página de configuración de la pantalla de inicio del teléfono > Aplicaciones > Administrar aplicaciones\"."</string>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Dispositivo de depuración USB conectado"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Seleccionar para inhabilitar la depuración USB"</string>
<string name="select_input_method" msgid="6865512749462072765">"Seleccionar método de introducción de texto"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 95871a4..767655d 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"پروکسی جهانی دستگاه مورد نظر را جهت استفاده هنگام فعال بودن خط مشی تنظیم کنید. فقط اولین سرپرست دستگاه پروکسی جهانی مفید را تنظیم می کند."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"تنظیم زمان انقضای رمز ورود"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"کنترل مدت زمانی که رمز ورود صفحه قفل قبل از تغییر یافتن لازم دارد"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"خانه"</item>
<item msgid="869923650527136615">"تلفن همراه"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"رفع عیب USB متصل شد"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"انتخاب کنید تا رفع عیب USB غیرفعال شود."</string>
<string name="select_input_method" msgid="6865512749462072765">"انتخاب روش ورودی"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"داوطلبین"</u></string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 1392ebb..d8d13ef 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Aseta laitteen yleinen välityspalvelin käyttöön, kun käytäntö on käytössä. Vain ensimmäinen laitteen järjestelmänhallitsija voi asettaa käytettävän yleisen välityspalvelimen."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Aseta salasanan umpeutuminen"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Valitse, kuinka pian ruudunlukituksen poiston salasana tulee vaihtaa"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Puhelinnumero (koti)"</item>
<item msgid="869923650527136615">"Mobiili"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-vianetsintä yhdistetty"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Poista USB-vianetsintä käytöstä valitsemalla tämä."</string>
<string name="select_input_method" msgid="6865512749462072765">"Valitse syöttötapa"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidaatit"</u></string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 361d193..c3fb6eb 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Indiquez le proxy global à utiliser pour ce mobile lorsque les règles sont activées. Seul l\'administrateur principal du mobile peut définir le proxy global utilisé."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Définir date exp. mot de passe"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Définir la fréquence de changement du mot de passe de verrouillage d\'écran"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Domicile"</item>
<item msgid="869923650527136615">"Mobile"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Débogage USB connecté"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Sélectionnez cette option pour désactiver le débogage USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Sélectionner un mode de saisie"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidats"</u></string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index befb526..fe9f319 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Postavi globalni proxy uređaja za upotrebu dok su pravila omogućena. Samo prvi administrator uređaja postavlja djelotvoran globalni proxy."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Postavi istek zaporke"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Nadzirite za koliko vremena zaporka za zaključani zaslon treba biti promijenjena"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Početna"</item>
<item msgid="869923650527136615">"Mobilni"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Priključen je alat za uklanjanje programske pogreške USB-a"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Odaberite da biste onemogućili rješavanje programske pogreške na USB-u."</string>
<string name="select_input_method" msgid="6865512749462072765">"Odaberite način unosa"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidati"</u></string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 0ee1bbc..a090f0b 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Az eszköz globális proxyja lesz használatban, amíg az irányelv engedélyezve van. Csak az eszköz első rendszergazdája állíthatja be a tényleges globális proxyt."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Jelszó lejáratának beállítása"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Azt vezérli, mennyi időnként kell módosítani a képernyőt zároló jelszót"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Otthoni"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB hibakereső csatlakoztatva"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Válassza ezt az USB hibakeresés kikapcsolásához."</string>
<string name="select_input_method" msgid="6865512749462072765">"Válassza ki a beviteli módszert"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"jelöltek"</u></string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 304ef90..8f738d6 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Setel proxy global perangkat yang akandigunakan ketika kebijakan diaktifkan. Hanya admin perangkat pertama yang menyetel procy global yang berlaku."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Setel kedaluwarsa sandi"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Kontrol berapa lama sebelum sandi penguncian layar perlu diubah"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Rumah"</item>
<item msgid="869923650527136615">"Seluler"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Debugging USB terhubung"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Pilih untuk menonaktifkan debugging USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Pilih metode masukan"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"calon"</u></string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 282d375..887a96d 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Imposta il proxy globale del dispositivo in modo da utilizzarlo mentre la norma è attiva. Il proxy globale effettivo è impostabile solo dal primo amministratore del dispositivo."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Imposta scadenza password"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Stabilisci la scadenza della password di blocco dello schermo"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Cellulare"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Debug USB collegato"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Seleziona per disattivare il debug USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Seleziona metodo di inserimento"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidati"</u></string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index ea48002..eab8673 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"הגדר את שרת proxy הגלובלי של ההתקן לשימוש כאשר המדיניות מופעלת. רק מנהל ההתקן הראשון מגדיר את שרת ה-proxy הגלובלי הפעיל."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"הגדר תפוגת תוקף של סיסמה"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"שלוט בפרק הזמן הדרוש לשינוי הסיסמה של נעילת המסך"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"דף הבית"</item>
<item msgid="869923650527136615">"נייד"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"ניקוי באגים של USB מחובר"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"בחר כדי להשבית ניקוי באגים ב-USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"בחר שיטת קלט"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZאבגדהוזחטיכלמנסעפצקרשת"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789אבגדהוזחטיכלמנסעפצקרשת"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"מועמדים"</u></string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 6df5f3d..c1b9f5d 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"ポリシーが有効になっている場合は端末のグローバルプロキシが使用されるように設定します。有効なグローバルプロキシを設定できるのは最初のデバイス管理者だけです。"</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"パスワードの有効期限の設定"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"画面ロックパスワードの変更が必要になるまでの期間を指定します"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"自宅"</item>
<item msgid="869923650527136615">"携帯"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USBデバッグが接続されました"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"USBデバッグを無効にする場合に選択します。"</string>
<string name="select_input_method" msgid="6865512749462072765">"入力方法の選択"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"候補"</u></string>
@@ -969,7 +975,7 @@
<string name="no_file_chosen" msgid="6363648562170759465">"ファイルが選択されていません"</string>
<string name="reset" msgid="2448168080964209908">"リセット"</string>
<string name="submit" msgid="1602335572089911941">"送信"</string>
- <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"運転モードを有効にする"</string>
+ <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"運転モードになっています"</string>
<string name="car_mode_disable_notification_message" msgid="668663626721675614">"運転モードを終了するには選択してください。"</string>
<string name="tethered_notification_title" msgid="3146694234398202601">"テザリングまたはアクセスポイントが有効です"</string>
<string name="tethered_notification_message" msgid="3067108323903048927">"タップして設定する"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 10eba59..eda018d 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"정책이 사용 설정되어 있는 동안 사용될 기기 전체 프록시를 설정합니다. 첫 번째 기기 관리자가 설정한 전체 프록시만 유효합니다."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"비밀번호 만료 설정"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"화면 잠금 비밀번호를 변경해야 하는 기간 변경"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"집"</item>
<item msgid="869923650527136615">"모바일"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB 디버깅 연결됨"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"USB 디버깅을 사용하지 않으려면 선택합니다."</string>
<string name="select_input_method" msgid="6865512749462072765">"입력 방법 선택"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"가능한 원인"</u></string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index bbb629d..f9f01e4 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Nustatyti įrenginio bendrąjį tarpinį serverį, kad būtų naudojamas, kol įgalinta politika. Tik pirmasis įrenginio administratorius nustato efektyvų bendrąjį tarpinį serverį."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Nust. slaptaž. galiojimo pab."</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Valdyti, per kiek laiko iki ekrano užrakinimo turi būti pakeistas slaptažodis"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Pagrindinis"</item>
<item msgid="869923650527136615">"Mobilusis"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB derinimas prijungtas"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Pasirinkite, kas išjungtumėte USB derinimą."</string>
<string name="select_input_method" msgid="6865512749462072765">"Pasirinkti įvesties būdą"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidatai"</u></string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 7ef1e0a..6d25c54 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Iestatiet izmantojamo ierīces globālo starpniekserveri, kad ir iespējota politika. Spēkā esošo globālo starpniekserveri iestata tikai pirmās ierīces administrators."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Paroles termiņa izb. iest."</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Kontrolē ekrāna bloķēšanas paroles maiņas intervālu"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Mājas"</item>
<item msgid="869923650527136615">"Mobilais"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB atkļūdošana ir pievienota."</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Atlasiet, lai atspējotu USB atkļūdošanu."</string>
<string name="select_input_method" msgid="6865512749462072765">"Atlasiet ievades metodi"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidāti"</u></string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 83fd2d3c..aed9163 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Angir den globale mellomtjeneren på enheten som skal brukes når regelen er aktivert. Kun den opprinnelige administratoren av enheten kan angi den globale mellomtjeneren."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Angi utløpsdato for passordet"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Velg hvor lenge det skal gå før passordet til låseskjermen må byttes"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hjemmenummer"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-debugging tilkoblet"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Velg for å deaktivere USB-debugging."</string>
<string name="select_input_method" msgid="6865512749462072765">"Velg inndatametode"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
<string name="candidates_style" msgid="4333913089637062257">"TAG_FONT"<u>"kandidater"</u>"CLOSE_FONT"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 3c03980..062caee 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Stel de algemene proxy voor het apparaat in die moet worden gebruikt terwijl het beleid is geactiveerd. Alleen de eerste apparaatbeheerder stelt de algemene proxy in."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Verval wachtwoord instellen"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Beheren hoe lang het duurt voordat het wachtwoord voor schermvergrendeling moet worden gewijzigd"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Thuis"</item>
<item msgid="869923650527136615">"Mobiel"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-foutopsporing verbonden"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Selecteer deze optie om USB-foutopsporing uit te schakelen."</string>
<string name="select_input_method" msgid="6865512749462072765">"Invoermethode selecteren"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidaten"</u></string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index e82dbca..868f168 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Ustaw globalny serwer proxy urządzenia do wykorzystywania przy włączonych zasadach. Tylko pierwszy administrator urządzenia ustawia obowiązujący globalny serwer proxy."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Ustaw wygasanie hasła"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Kontrola czasu, po którym należy zmienić hasło blokowania ekranu"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Dom"</item>
<item msgid="869923650527136615">"Komórka"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Podłączono moduł debugowania USB"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Wybierz, aby wyłączyć debugowanie USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Wybierz metodę wprowadzania"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandydaci"</u></string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 41634f8..f306b8d 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Definir o proxy global do aparelho a ser utilizado quando a política estiver activada. Só o primeiro administrador do aparelho define o proxy global efectivo."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Def. valid. da palavra-passe"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Controle com que antecedência é necessário alterar a palavra-passe de bloqueio do ecrã"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Residência"</item>
<item msgid="869923650527136615">"Móvel"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB ligada"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Seleccione para desactivar depuração USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Seleccionar método de entrada"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 572cbce..7cd6cc4 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Configura o proxy global do dispositivo para ser usado enquanto a política estiver ativada. Somente o primeiro administrador do dispositivo pode configurar um verdadeiro proxy global."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Definir validade da senha"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Controle quanto tempo uma senha de bloqueio de tela deve ficar ativa antes de ser alterada"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Residencial"</item>
<item msgid="869923650527136615">"Celular"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB conectada"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Selecione para desativar a depuração USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Selecionar método de entrada"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 9a879c7..a3d8191 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -498,6 +498,10 @@
<skip />
<!-- no translation found for policydesc_expirePassword (7276906351852798814) -->
<skip />
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Privat"</item>
<item msgid="869923650527136615">"Telefonin"</item>
@@ -947,6 +951,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Debugging USB connectà"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Tscherner per deactivar il debugging USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Tscherner ina metoda d\'endataziun"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidats"</u></string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index d0e1dc6..07a6213 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Setaţi serverul proxy global pentru dispozitiv care să fie utilizat cât timp politica este activă. Numai primul administrator al dispozitivului poate seta serverul proxy global activ."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Setaţi expirarea parolei"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Controlarea duratei până când parola de blocare a ecranului trebuie modificată"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Domiciliu"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depanarea USB este conectată"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Selectaţi pentru a dezactiva depanarea USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Selectaţi metoda de intrare"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidaţi"</u></string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 22ee02a..dfc5d08 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Настройте глобальный прокси-сервер устройства, который будет использоваться при активной политике. Глобальный прокси-сервер должен настроить первый администратор устройства."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Задать время действия пароля"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Задать время действия пароля перед появлением экрана блокировки"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Домашний"</item>
<item msgid="869923650527136615">"Мобильный"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Отладка по USB разрешена"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Нажмите, чтобы отключить отладку USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Выберите способ ввода"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"варианты"</u></string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 397688d..e7bbaf6 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Vyberte globálny server proxy, ktorý sa bude používať po aktivácii pravidiel. Platný globálny server proxy nastavuje iba prvý správca zariadenia."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Nastav. koniec platnosti hesla"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Ovládanie doby, po uplynutí ktorej treba zmeniť heslo na odomknutie obrazovky"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Domovská stránka"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Ladenie cez rozhranie USB pripojené"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Vyberte, ak chcete zakázať ladenie USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Výber metódy vstupu"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁÄBCČDĎDZDŽEÉFGHCHIÍJKLĽMNŇOÓÔPRŔSŠTŤUÚVWXYÝZŽ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidáti"</u></string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 91c42a8..c6b4302 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Nastavite globalni strežnik proxy naprave, ki bo v uporabi, ko je pravilnik omogočen. Samo skrbnik prve naprave lahko nastavi veljaven globalni strežnik proxy."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Nastavitev poteka gesla"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Nastavite, koliko časa prej je treba spremeniti geslo za odklepanje zaslona"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Začetna stran"</item>
<item msgid="869923650527136615">"Mobilni"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"iskanje in odpravljanje napak USB je povezano"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Izberite, če želite onemogočiti iskanje in odpravljanje napak prek vrat USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Izbiranje načina vnosa"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidati"</u></string>
@@ -997,8 +1003,7 @@
<string name="media_unknown_state" msgid="729192782197290385">"Neznano stanje zunanjih nosilcev podatkov."</string>
<string name="share" msgid="1778686618230011964">"Deli z dr."</string>
<string name="find" msgid="4808270900322985960">"Najdi"</string>
- <!-- no translation found for websearch (4337157977400211589) -->
- <skip />
+ <string name="websearch" msgid="4337157977400211589">"Spletno iskanje"</string>
<!-- no translation found for gpsNotifTicker (5622683912616496172) -->
<skip />
<!-- no translation found for gpsNotifTitle (5446858717157416839) -->
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index c5c1e43..0493685 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Подесите глобални прокси сервер уређаја који ће се користити док су омогућене смернице. Само први администратор уређаја поставља ефективни глобални прокси сервер."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Подеси време истека лозинке"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Контролишите време када лозинка за закључавање екрана треба да се промени"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Кућа"</item>
<item msgid="869923650527136615">"Мобилни"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Отклањање грешака са USB-а је успостављено"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Изаберите да бисте онемогућили отклањања грешака са USB-а."</string>
<string name="select_input_method" msgid="6865512749462072765">"Избор методе уноса"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"кандидати"</u></string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index bda3863..a60e7f9 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Ange vilken global proxyserver som ska användas när policyn är aktiverad. Endast den första enhetsadministratören anger den faktiska globala proxyservern."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Ange lösenordets utgångsdatum"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Se hur långt det är kvar till du måste ändra lösenordet till låsningsskärmen"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hem"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-felsökning ansluten"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Välj att inaktivera USB-felsökning."</string>
<string name="select_input_method" msgid="6865512749462072765">"Välj indatametod"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 41593f2..f192c6d 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"ตั้งค่าพร็อกซีส่วนกลางของอุปกรณ์ที่จะใช้ขณะเปิดการใช้งานนโยบาย เฉพาะผู้ดูแลอุปกรณ์คนแรกเท่านั้นที่ตั้งค่าพร็อกซีส่วนกลางที่มีผลบังคับ"</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"ตั้งค่าการหมดอายุของรหัสผ่าน"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"ควบคุมระยะเวลาก่อนที่จะต้องเปลี่ยนรหัสผ่านการล็อกหน้าจอ"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"บ้าน"</item>
<item msgid="869923650527136615">"มือถือ"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"เชื่อมต่อการแก้ไขข้อบกพร่อง USB แล้ว"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"เลือกเพื่อปิดใช้งานการแก้ไขข้อบกพร่อง USB"</string>
<string name="select_input_method" msgid="6865512749462072765">"เลือกวิธีป้อนข้อมูล"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"ตัวเลือก"</u></string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index f65d77e..d42ef28 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Itakda ang pandaigdigang proxy ng device na gagamitin habang pinagana ang patakaran. Tanging ang unang admin ng device ang magtatakda sa may bisang pandaigdigang proxy."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Itakda pag-expire ng password"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Kontrolin kung gaano katagal bago kailangang palitan ang password sa pag-lock ng screen"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Home"</item>
<item msgid="869923650527136615">"Mobile"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Konektado ang debugging ng USB"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Piliin upang huwag paganahin ang debugging ng USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Pumili ng pamamaraan ng pag-input"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"mga kandidato"</u></string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 762ea47..8b338dd 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Politika etkin olduğunda kullanılacak cihaz genelinde geçerli proxy\'yi ayarlayın. Etkin genel proxy\'yi yalnızca ilk cihaz yöneticisi ayarlar."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Şifre süre sonu tarihi ayarla"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Ekran kilitleme şifresinin ne kadar süre sonra değiştirilmesi gerekeceğini denetleyin."</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Ev"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB hata ayıklaması bağlandı"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"USB hata ayıklamasını devre dışı bırakmak için tıklayın."</string>
<string name="select_input_method" msgid="6865512749462072765">"Giriş yöntemini seç"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"adaylar"</u></string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index a2ad6dc..6e5fdaa 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Устан. використ. глоб. проксі, коли ввімкнено політику. Лише адміністратор першого пристрою встановлює активний глоб. проксі."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Установити термін дії пароля"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Регулює, за скільки часу перед блокуванням екрана треба змінювати пароль"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Дом."</item>
<item msgid="869923650527136615">"Мобільний"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Налагодження USB підключ."</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Вибер., щоб вимкн. налагодж. USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Виберіть метод введ-ня"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"кандидати"</u></string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 4e5220a..08c8990 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -487,6 +487,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Đặt proxy chung của điện thoại được sử dụng trong khi chính sách được bật. Chỉ quản trị viên đầu tiên của điện thoại mới có thể đặt proxy chung hiệu quả."</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"Đặt hết hạn mật khẩu"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"Kiểm soát thời lượng trước khi mật khẩu khóa màn hình cần được thay đổi"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Nhà riêng"</item>
<item msgid="869923650527136615">"ĐT di động"</item>
@@ -900,6 +904,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Gỡ lỗi USB đã được kết nối"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Chọn để vô hiệu hoá gỡ lỗi USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Chọn phương thức nhập"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"ứng viên"</u></string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 1cfc5cf..ecfdd63 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"请设置在启用政策的情况下要使用的设备全局代理。只有第一设备管理员才可设置有效的全局代理。"</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"设置密码有效期"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"控制屏幕锁定密码的使用期限"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"住宅"</item>
<item msgid="869923650527136615">"手机"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"已连接 USB 调试"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"选择停用 USB 调试。"</string>
<string name="select_input_method" msgid="6865512749462072765">"选择输入法"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"候选"</u></string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index d0f460f..28cb8b2 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -490,6 +490,10 @@
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"設定政策啟用時所要使用的裝置全域 Proxy,只有第一個裝置管理員所設定的全域 Proxy 具有效力。"</string>
<string name="policylab_expirePassword" msgid="2314569545488269564">"設定密碼到期日"</string>
<string name="policydesc_expirePassword" msgid="7276906351852798814">"控制螢幕鎖定密碼的使用期限"</string>
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+ <skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"住家電話"</item>
<item msgid="869923650527136615">"行動電話"</item>
@@ -905,6 +909,8 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB 偵錯模式已啟用"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"選取以停用 USB 偵錯。"</string>
<string name="select_input_method" msgid="6865512749462072765">"選取輸入方式"</string>
+ <!-- no translation found for configure_input_methods (6324843080254191535) -->
+ <skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"待選項目"</u></string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 19e2b8d..6ca42e3 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1379,10 +1379,8 @@
<attr name="fragmentOpenExitAnimation" format="reference" />
<attr name="fragmentCloseEnterAnimation" format="reference" />
<attr name="fragmentCloseExitAnimation" format="reference" />
- <attr name="fragmentNextEnterAnimation" format="reference" />
- <attr name="fragmentNextExitAnimation" format="reference" />
- <attr name="fragmentPrevEnterAnimation" format="reference" />
- <attr name="fragmentPrevExitAnimation" format="reference" />
+ <attr name="fragmentFadeEnterAnimation" format="reference" />
+ <attr name="fragmentFadeExitAnimation" format="reference" />
</declare-styleable>
<!-- Window animation class attributes. -->
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 3ad29c4..eabd457 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1311,10 +1311,8 @@
<public type="attr" name="fragmentOpenExitAnimation" />
<public type="attr" name="fragmentCloseEnterAnimation" />
<public type="attr" name="fragmentCloseExitAnimation" />
- <public type="attr" name="fragmentNextEnterAnimation" />
- <public type="attr" name="fragmentNextExitAnimation" />
- <public type="attr" name="fragmentPrevEnterAnimation" />
- <public type="attr" name="fragmentPrevExitAnimation" />
+ <public type="attr" name="fragmentFadeEnterAnimation" />
+ <public type="attr" name="fragmentFadeExitAnimation" />
<public type="attr" name="actionBarSize" />
<public type="attr" name="imeSubtypeLocale" />
<public type="attr" name="imeSubtypeMode" />
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index a366047..16c80d0 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -85,10 +85,8 @@
<item name="fragmentOpenExitAnimation">@animator/fragment_open_exit</item>
<item name="fragmentCloseEnterAnimation">@animator/fragment_close_enter</item>
<item name="fragmentCloseExitAnimation">@animator/fragment_close_exit</item>
- <item name="fragmentNextEnterAnimation">@animator/fragment_next_enter</item>
- <item name="fragmentNextExitAnimation">@animator/fragment_next_exit</item>
- <item name="fragmentPrevEnterAnimation">@animator/fragment_prev_enter</item>
- <item name="fragmentPrevExitAnimation">@animator/fragment_prev_exit</item>
+ <item name="fragmentFadeEnterAnimation">@animator/fragment_fade_enter</item>
+ <item name="fragmentFadeExitAnimation">@animator/fragment_fade_exit</item>
</style>
<!-- Standard animations for a non-full-screen window or activity. -->
diff --git a/docs/html/guide/developing/index.html b/docs/html/guide/developing/index.html
deleted file mode 100644
index 4881acf..0000000
--- a/docs/html/guide/developing/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=../index.html">
-</head>
-<body>
-<a href="../index.html">click here</a> if you are not redirected.
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index a984acd..67f1fec 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -58,6 +58,9 @@
<span class="zh-TW" style="display:none">應用程式基本原理</span>
</a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/fundamentals/fragments.html">
+ <span class="en">Fragments</span>
+ </a> <span class="new">new!</span></li>
</ul>
<ul>
<li class="toggle-list">
@@ -199,9 +202,6 @@
</li>
</ul>
<ul>
- <li><a href="<?cs var:toroot ?>guide/topics/fragments/index.html">
- <span class="en">Fragments</span>
- </a> <span class="new">new!</span></li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/graphics/index.html">
<span class="en">Graphics</span>
diff --git a/docs/html/guide/topics/fragments/index.jd b/docs/html/guide/topics/fundamentals/fragments.jd
similarity index 98%
rename from docs/html/guide/topics/fragments/index.jd
rename to docs/html/guide/topics/fundamentals/fragments.jd
index 045a1e8..0972805 100644
--- a/docs/html/guide/topics/fragments/index.jd
+++ b/docs/html/guide/topics/fundamentals/fragments.jd
@@ -319,7 +319,7 @@
<pre>
FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()}
-FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#openTransaction()};
+FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
</pre>
<p>You can then add a fragment using the {@link
@@ -406,7 +406,7 @@
<pre>
FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()};
-FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#openTransaction()};
+FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
</pre>
<p>Each transaction is a set of changes that you want to perform at the same time. You can set
@@ -428,7 +428,7 @@
<pre>
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
-FragmentTransaction transaction = getFragmentManager().openTransaction();
+FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index 44d75c1..c17fc3c 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -53,7 +53,7 @@
items"—providing instant access to key user actions. (Menu items not appearing as action
items are placed in the Overflow Menu, revealed by a drop-down in the Action Bar.)</li>
<li>Provide tabs for navigating between <a
-href="{@docRoot}guide/topics/fragments/index.html">fragments</a>.</li>
+href="{@docRoot}guide/topics/fundamentals/fragments.html">fragments</a>.</li>
<li>Provide drop-down navigation items.</li>
<li>Provide interactive "action views" in place of action items.</li>
<li>Use the application logo as a "return home" or "up" navigation action.</li>
@@ -432,7 +432,7 @@
the state of each fragment as necessary, so when the user switches fragments with the tabs,
then returns to a previous fragment, it appears the way they left. For information about saving
the state of your fragment, see the <a
-href="{@docRoot}guide/topics/fragments/index.html">Fragments</a> developer guide.</p>
+href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
diff --git a/docs/html/offline.jd b/docs/html/offline.jd
index fe70d50..1064a99 100644
--- a/docs/html/offline.jd
+++ b/docs/html/offline.jd
@@ -2,48 +2,59 @@
page.title=Welcome
@jd:body
+<style type="text/css">
+#qv h2 {
+ font-size:1.5em;
+ font-weight:bold;
+ margin:12px 0 .5em 0;
+ padding:5px;
+ color:#7BB026;
+ border:none;
+}
+#qv ul li {
+ padding: 0 5px 1em 0;
+}
+</style>
<div id="mainBodyFluid">
<h1>Welcome to the Android SDK!</h1>
-<img src="{@docRoot}assets/images/home/sdk-large.png" style="float:right; margin:-2em 3em 3em;" />
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Get Started</h2>
+ <ul>
+ <li>Create a <a href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a>
+application</li>
+ <li>Read <a href="{@docRoot}resources/browser.html?tag=sample">Sample Code</a>,
+especially <a href="{@docRoot}resources/samples/ApiDemos/index.html">API Demos</a></li>
+ <li>Read the <a href="{@docRoot}guide/topics/fundamentals/index.html">Application
+Fundamentals</a></li>
+ <li>Read the <a href="{@docRoot}guide/developing/index.html">Overview</a> for using the SDK
+tools</li>
+ </ul>
+</div>
+</div>
-<h3>If you've downloaded the Android SDK for the first time...</h3>
+<h3>If you've downloaded the Android SDK for the first time</h3>
-<p>Follow the online guide to
-<a href="{@docRoot}sdk/installing.html">Installing
-the Android SDK</a>, which will help you setup your development environment
-(including the Android Development Tools plugin for Eclipse)
-so you can start developing Android apps.</p>
+<p>Follow the guide to <a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>, which
+will help you setup your development environment.</p>
-<p>Once your environment is setup, look at the
-<a href="{@docRoot}sdk/installing.html#NextSteps">Next
-Steps</a> for some suggestions on how to begin learning about Android.</p>
-
-<h3>If you've just installed new SDK components using the <em>SDK and AVD Manager</em>...</h3>
+<h3>If you've installed new SDK components using the SDK and AVD Manager</h3>
<p>There's no additional setup.</p>
-<p>Newly installed Android platforms are automatically saved in the
-<code><em><sdk_dir>/</em>platforms/</code> directory of your existing SDK;
-new add-ons are saved in the <code><em><sdk_dir>/</em>add-ons/</code>
-directory; and new documentation is saved in the existing
-<code><em><sdk_dir>/</em>docs/</code> directory (old docs are replaced).</p>
+<p>New Android platforms are saved in the <code><sdk>/platforms/</code> directory of
+your existing SDK and new add-ons are saved in the <code><sdk>/add-ons/</code> directory.</p>
-<hr style="margin:2em 0;" />
+<div class="note">
+<p><strong>Note:</strong> You are currently viewing the offline version of the Android developer
+documentation. Because some features such as search and videos are network-based, not everything
+will work if you are not connected to the Internet. Additionally, the online version may contain
+more recently updated documents.</p>
-<p>Note that you are currently viewing a local, offline version of the
-Android developer documentation. The offline documentation offers almost all the same
-content and features as the online documentation. Because some features
-such as search and videos are network-based, not everything will work if you
-are not connected to the Internet.</p>
-
-<p>For the most current documentation and a fully-functional experience, please visit:</p>
-<p style="margin-left:2em;">
-<a href="http://developer.android.com">http://developer.android.com</a></strong>.
+<p>For the latest documentation, please visit
+<b><a href="http://developer.android.com">developer.android.com</a></b>.
</p>
-
-
-
</div>
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 9e1ff9c..2780135 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -35,18 +35,20 @@
</a></li>
</ul>
- </li><?cs
- /if ?>
- <?cs
+ </li>
+ <?cs /if ?><?cs
if:sdk.preview ?>
- <li><h2>Android Preview SDK</h2></li>
+ <li><h2>Android 3.0 Preview SDK</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/preview/features.html">Introduction
-to Honeycomb</a></li>
-<!--
- <li><a href="<?cs var:toroot ?>sdk/preview/installing.html">Getting
-Started</a></li>
--->
+ <li><a href="<?cs var:toroot ?>sdk/preview/start.html">Getting Started</a> <span class="new">new!</span></li>
+ <li class="toggle-list">
+ <div><a href="<?cs var:toroot ?>sdk/preview/platform.html">
+ <span class="en">Android 3.0 Platform</span></a> <span class="new">new!</span></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>sdk/preview/highlights.html">Platform Highlights</a></li>
+ <li><a href="<?cs var:toroot ?>sdk/api_diff/honeycomb/changes.html">API Differences Report »</a></li>
+ </ul>
+ </li>
</ul>
</li><?cs
/if ?>
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java
index dd6bf19..cffee5f 100644
--- a/graphics/java/android/graphics/BitmapFactory.java
+++ b/graphics/java/android/graphics/BitmapFactory.java
@@ -564,11 +564,22 @@
* @return the decoded bitmap, or null
*/
public static Bitmap decodeFileDescriptor(FileDescriptor fd, Rect outPadding, Options opts) {
- Bitmap bm = nativeDecodeFileDescriptor(fd, outPadding, opts);
- if (bm == null && opts != null && opts.inBitmap != null) {
- throw new IllegalArgumentException("Problem decoding into existing bitmap");
+ if (nativeIsSeekable(fd)) {
+ Bitmap bm = nativeDecodeFileDescriptor(fd, outPadding, opts);
+ if (bm == null && opts != null && opts.inBitmap != null) {
+ throw new IllegalArgumentException("Problem decoding into existing bitmap");
+ }
+ return finishDecode(bm, outPadding, opts);
+ } else {
+ FileInputStream fis = new FileInputStream(fd);
+ try {
+ return decodeStream(fis, outPadding, opts);
+ } finally {
+ try {
+ fis.close();
+ } catch (Throwable t) {/* ignore */}
+ }
}
- return finishDecode(bm, outPadding, opts);
}
/**
@@ -615,4 +626,5 @@
private static native Bitmap nativeDecodeByteArray(byte[] data, int offset,
int length, Options opts);
private static native byte[] nativeScaleNinePatch(byte[] chunk, float scale, Rect pad);
+ private static native boolean nativeIsSeekable(FileDescriptor fd);
}
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index 852aabf..1789891 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -121,6 +121,58 @@
mType = t;
}
+ private void validateIsInt32() {
+ if ((mType.mElement.mType == Element.DataType.SIGNED_32) ||
+ (mType.mElement.mType == Element.DataType.UNSIGNED_32)) {
+ return;
+ }
+ throw new RSIllegalArgumentException(
+ "32 bit integer source does not match allocation type " + mType.mElement.mType);
+ }
+
+ private void validateIsInt16() {
+ if ((mType.mElement.mType == Element.DataType.SIGNED_16) ||
+ (mType.mElement.mType == Element.DataType.UNSIGNED_16)) {
+ return;
+ }
+ throw new RSIllegalArgumentException(
+ "16 bit integer source does not match allocation type " + mType.mElement.mType);
+ }
+
+ private void validateIsInt8() {
+ if ((mType.mElement.mType == Element.DataType.SIGNED_8) ||
+ (mType.mElement.mType == Element.DataType.UNSIGNED_8)) {
+ return;
+ }
+ throw new RSIllegalArgumentException(
+ "8 bit integer source does not match allocation type " + mType.mElement.mType);
+ }
+
+ private void validateIsFloat32() {
+ if (mType.mElement.mType == Element.DataType.FLOAT_32) {
+ return;
+ }
+ throw new RSIllegalArgumentException(
+ "32 bit float source does not match allocation type " + mType.mElement.mType);
+ }
+
+ private void validateIsObject() {
+ if ((mType.mElement.mType == Element.DataType.RS_ELEMENT) ||
+ (mType.mElement.mType == Element.DataType.RS_TYPE) ||
+ (mType.mElement.mType == Element.DataType.RS_ALLOCATION) ||
+ (mType.mElement.mType == Element.DataType.RS_SAMPLER) ||
+ (mType.mElement.mType == Element.DataType.RS_SCRIPT) ||
+ (mType.mElement.mType == Element.DataType.RS_MESH) ||
+ (mType.mElement.mType == Element.DataType.RS_PROGRAM_FRAGMENT) ||
+ (mType.mElement.mType == Element.DataType.RS_PROGRAM_VERTEX) ||
+ (mType.mElement.mType == Element.DataType.RS_PROGRAM_RASTER) ||
+ (mType.mElement.mType == Element.DataType.RS_PROGRAM_STORE)) {
+ return;
+ }
+ throw new RSIllegalArgumentException(
+ "Object source does not match allocation type " + mType.mElement.mType);
+ }
+
@Override
void updateFromNative() {
super.updateFromNative();
@@ -151,6 +203,7 @@
public void copyFrom(BaseObj[] d) {
mRS.validate();
+ validateIsObject();
if (d.length != mType.getCount()) {
throw new RSIllegalArgumentException("Array size mismatch, allocation sizeX = " +
mType.getCount() + ", array length = " + d.length);
@@ -258,7 +311,6 @@
mRS.nAllocationData1D(getID(), xoff, 0, count, data, data.length);
}
-
/**
* This is only intended to be used by auto-generate code reflected from the
* renderscript script files.
@@ -317,27 +369,44 @@
mRS.nAllocationGenerateMipmaps(getID());
}
- public void copy1DRangeFrom(int off, int count, int[] d) {
+ void copy1DRangeFromUnchecked(int off, int count, int[] d) {
int dataSize = mType.mElement.getSizeBytes() * count;
data1DChecks(off, count, d.length * 4, dataSize);
mRS.nAllocationData1D(getID(), off, 0, count, d, dataSize);
}
- public void copy1DRangeFrom(int off, int count, short[] d) {
+ void copy1DRangeFromUnchecked(int off, int count, short[] d) {
int dataSize = mType.mElement.getSizeBytes() * count;
data1DChecks(off, count, d.length * 2, dataSize);
mRS.nAllocationData1D(getID(), off, 0, count, d, dataSize);
}
- public void copy1DRangeFrom(int off, int count, byte[] d) {
+ void copy1DRangeFromUnchecked(int off, int count, byte[] d) {
int dataSize = mType.mElement.getSizeBytes() * count;
data1DChecks(off, count, d.length, dataSize);
mRS.nAllocationData1D(getID(), off, 0, count, d, dataSize);
}
- public void copy1DRangeFrom(int off, int count, float[] d) {
+ void copy1DRangeFromUnchecked(int off, int count, float[] d) {
int dataSize = mType.mElement.getSizeBytes() * count;
data1DChecks(off, count, d.length * 4, dataSize);
mRS.nAllocationData1D(getID(), off, 0, count, d, dataSize);
}
+ public void copy1DRangeFrom(int off, int count, int[] d) {
+ validateIsInt32();
+ copy1DRangeFromUnchecked(off, count, d);
+ }
+ public void copy1DRangeFrom(int off, int count, short[] d) {
+ validateIsInt16();
+ copy1DRangeFromUnchecked(off, count, d);
+ }
+ public void copy1DRangeFrom(int off, int count, byte[] d) {
+ validateIsInt8();
+ copy1DRangeFromUnchecked(off, count, d);
+ }
+ public void copy1DRangeFrom(int off, int count, float[] d) {
+ validateIsFloat32();
+ copy1DRangeFromUnchecked(off, count, d);
+ }
+
private void validate2DRange(int xoff, int yoff, int w, int h) {
if (xoff < 0 || yoff < 0) {
throw new RSIllegalArgumentException("Offset cannot be negative.");
@@ -411,21 +480,25 @@
}
public void copyTo(byte[] d) {
+ validateIsInt8();
mRS.validate();
mRS.nAllocationRead(getID(), d);
}
public void copyTo(short[] d) {
+ validateIsInt16();
mRS.validate();
mRS.nAllocationRead(getID(), d);
}
public void copyTo(int[] d) {
+ validateIsInt32();
mRS.validate();
mRS.nAllocationRead(getID(), d);
}
public void copyTo(float[] d) {
+ validateIsFloat32();
mRS.validate();
mRS.nAllocationRead(getID(), d);
}
diff --git a/graphics/java/android/renderscript/FileA3D.java b/graphics/java/android/renderscript/FileA3D.java
index fe3971a..79ee997 100644
--- a/graphics/java/android/renderscript/FileA3D.java
+++ b/graphics/java/android/renderscript/FileA3D.java
@@ -46,7 +46,13 @@
**/
public enum EntryType {
+ /**
+ * Unknown or or invalid object, nothing will be loaded
+ **/
UNKNOWN (0),
+ /**
+ * Renderscript Mesh object
+ **/
MESH (1);
int mID;
@@ -74,14 +80,20 @@
BaseObj mLoadedObj;
/**
+ * Returns the name of a renderscript object the index entry
+ * describes
+ *
* @return name of a renderscript object the index entry
- * describes
+ * describes
+ *
*/
public String getName() {
return mName;
}
/**
+ * Returns the type of a renderscript object the index entry
+ * describes
* @return type of a renderscript object the index entry
* describes
*/
@@ -90,7 +102,8 @@
}
/**
- * @return renderscript object described by the entry
+ * Used to load the object described by the index entry
+ * @return base renderscript object described by the entry
*/
public BaseObj getObject() {
mRS.validate();
@@ -99,6 +112,9 @@
}
/**
+ * Used to load the mesh described by the index entry, object
+ * described by the index entry must be a renderscript mesh
+ *
* @return renderscript mesh object described by the entry
*/
public Mesh getMesh() {
@@ -166,7 +182,9 @@
}
/**
- * @return the numberof objects stored inside a FileA3D
+ * Returns the number of objects stored inside the a3d file
+ *
+ * @return the number of objects stored inside the a3d file
*/
public int getIndexEntryCount() {
if(mFileEntries == null) {
@@ -180,6 +198,8 @@
* FileA3D
*
* @param index number of the entry from the list to return
+ *
+ * @return entry in the a3d file described by the index
*/
public IndexEntry getIndexEntry(int index) {
if(getIndexEntryCount() == 0 || index < 0 || index >= mFileEntries.length) {
@@ -195,6 +215,7 @@
* @param mgr asset manager used to load asset
* @param path location of the file to load
*
+ * @return a3d file containing renderscript objects
*/
static public FileA3D createFromAsset(RenderScript rs, AssetManager mgr, String path) {
rs.validate();
@@ -214,6 +235,7 @@
* @param rs Context to which the object will belong.
* @param path location of the file to load
*
+ * @return a3d file containing renderscript objects
*/
static public FileA3D createFromFile(RenderScript rs, String path) {
int fileId = rs.nFileA3DCreateFromFile(path);
@@ -232,6 +254,7 @@
* @param rs Context to which the object will belong.
* @param path location of the file to load
*
+ * @return a3d file containing renderscript objects
*/
static public FileA3D createFromFile(RenderScript rs, File path) {
return createFromFile(rs, path.getAbsolutePath());
@@ -244,6 +267,7 @@
* @param res resource manager used for loading
* @param id resource to create FileA3D from
*
+ * @return a3d file containing renderscript objects
*/
static public FileA3D createFromResource(RenderScript rs, Resources res, int id) {
diff --git a/graphics/java/android/renderscript/Matrix2f.java b/graphics/java/android/renderscript/Matrix2f.java
index 2fffe8c..c9a0ea8 100644
--- a/graphics/java/android/renderscript/Matrix2f.java
+++ b/graphics/java/android/renderscript/Matrix2f.java
@@ -26,28 +26,61 @@
**/
public class Matrix2f {
+ /**
+ * Creates a new identity 2x2 matrix
+ */
public Matrix2f() {
mMat = new float[4];
loadIdentity();
}
+ /**
+ * Creates a new matrix and sets its values from the given
+ * parameter
+ *
+ * @param dataArray values to set the matrix to, must be 4
+ * floats long
+ */
public Matrix2f(float[] dataArray) {
mMat = new float[2];
System.arraycopy(dataArray, 0, mMat, 0, mMat.length);
}
+ /**
+ * Return a reference to the internal array representing matrix
+ * values. Modifying this array will also change the matrix
+ *
+ * @return internal array representing the matrix
+ */
public float[] getArray() {
return mMat;
}
+ /**
+ * Returns the value for a given row and column
+ *
+ * @param i row of the value to return
+ * @param j column of the value to return
+ *
+ * @return value in the ith row and jth column
+ */
public float get(int i, int j) {
return mMat[i*2 + j];
}
+ /**
+ * Sets the value for a given row and column
+ *
+ * @param i row of the value to set
+ * @param j column of the value to set
+ */
public void set(int i, int j, float v) {
mMat[i*2 + j] = v;
}
+ /**
+ * Sets the matrix values to identity
+ */
public void loadIdentity() {
mMat[0] = 1;
mMat[1] = 0;
@@ -56,10 +89,20 @@
mMat[3] = 1;
}
+ /**
+ * Sets the values of the matrix to those of the parameter
+ *
+ * @param src matrix to load the values from
+ */
public void load(Matrix2f src) {
System.arraycopy(src.getArray(), 0, mMat, 0, mMat.length);
}
+ /**
+ * Sets current values to be a rotation matrix of given angle
+ *
+ * @param rot rotation angle
+ */
public void loadRotate(float rot) {
float c, s;
rot *= (float)(java.lang.Math.PI / 180.0f);
@@ -71,11 +114,25 @@
mMat[3] = c;
}
+ /**
+ * Sets current values to be a scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ */
public void loadScale(float x, float y) {
loadIdentity();
mMat[0] = x;
mMat[3] = y;
}
+
+ /**
+ * Sets current values to be the result of multiplying two given
+ * matrices
+ *
+ * @param lhs left hand side matrix
+ * @param rhs right hand side matrix
+ */
public void loadMultiply(Matrix2f lhs, Matrix2f rhs) {
for (int i=0 ; i<2 ; i++) {
float ri0 = 0;
@@ -90,21 +147,42 @@
}
}
+ /**
+ * Post-multiplies the current matrix by a given parameter
+ *
+ * @param rhs right hand side to multiply by
+ */
public void multiply(Matrix2f rhs) {
Matrix2f tmp = new Matrix2f();
tmp.loadMultiply(this, rhs);
load(tmp);
}
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * rotation matrix of given angle
+ *
+ * @param rot angle of rotation
+ */
public void rotate(float rot) {
Matrix2f tmp = new Matrix2f();
tmp.loadRotate(rot);
multiply(tmp);
}
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ */
public void scale(float x, float y) {
Matrix2f tmp = new Matrix2f();
tmp.loadScale(x, y);
multiply(tmp);
}
+ /**
+ * Sets the current matrix to its transpose
+ */
public void transpose() {
float temp = mMat[1];
mMat[1] = mMat[2];
diff --git a/graphics/java/android/renderscript/Matrix3f.java b/graphics/java/android/renderscript/Matrix3f.java
index e4c5e00..2ec8c62 100644
--- a/graphics/java/android/renderscript/Matrix3f.java
+++ b/graphics/java/android/renderscript/Matrix3f.java
@@ -26,28 +26,61 @@
**/
public class Matrix3f {
+ /**
+ * Creates a new identity 3x3 matrix
+ */
public Matrix3f() {
mMat = new float[9];
loadIdentity();
}
+ /**
+ * Creates a new matrix and sets its values from the given
+ * parameter
+ *
+ * @param dataArray values to set the matrix to, must be 9
+ * floats long
+ */
public Matrix3f(float[] dataArray) {
mMat = new float[9];
System.arraycopy(dataArray, 0, mMat, 0, mMat.length);
}
+ /**
+ * Return a reference to the internal array representing matrix
+ * values. Modifying this array will also change the matrix
+ *
+ * @return internal array representing the matrix
+ */
public float[] getArray() {
return mMat;
}
+ /**
+ * Returns the value for a given row and column
+ *
+ * @param i row of the value to return
+ * @param j column of the value to return
+ *
+ * @return value in the ith row and jth column
+ */
public float get(int i, int j) {
return mMat[i*3 + j];
}
+ /**
+ * Sets the value for a given row and column
+ *
+ * @param i row of the value to set
+ * @param j column of the value to set
+ */
public void set(int i, int j, float v) {
mMat[i*3 + j] = v;
}
+ /**
+ * Sets the matrix values to identity
+ */
public void loadIdentity() {
mMat[0] = 1;
mMat[1] = 0;
@@ -62,10 +95,24 @@
mMat[8] = 1;
}
+ /**
+ * Sets the values of the matrix to those of the parameter
+ *
+ * @param src matrix to load the values from
+ */
public void load(Matrix3f src) {
System.arraycopy(src.getArray(), 0, mMat, 0, mMat.length);
}
+ /**
+ * Sets current values to be a rotation matrix of certain angle
+ * about a given axis
+ *
+ * @param rot angle of rotation
+ * @param x rotation axis x
+ * @param y rotation axis y
+ * @param z rotation axis z
+ */
public void loadRotate(float rot, float x, float y, float z) {
float c, s;
rot *= (float)(java.lang.Math.PI / 180.0f);
@@ -97,7 +144,13 @@
mMat[8] = z*z*nc + c;
}
+ /**
+ * Makes the upper 2x2 a rotation matrix of the given angle
+ *
+ * @param rot rotation angle
+ */
public void loadRotate(float rot) {
+ loadIdentity();
float c, s;
rot *= (float)(java.lang.Math.PI / 180.0f);
c = (float)java.lang.Math.cos(rot);
@@ -108,12 +161,25 @@
mMat[4] = c;
}
+ /**
+ * Makes the upper 2x2 a scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ */
public void loadScale(float x, float y) {
loadIdentity();
mMat[0] = x;
mMat[4] = y;
}
+ /**
+ * Sets current values to be a scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ * @param z scale component z
+ */
public void loadScale(float x, float y, float z) {
loadIdentity();
mMat[0] = x;
@@ -121,12 +187,26 @@
mMat[8] = z;
}
+ /**
+ * Sets current values to be a translation matrix of given
+ * dimensions
+ *
+ * @param x translation component x
+ * @param y translation component y
+ */
public void loadTranslate(float x, float y) {
loadIdentity();
mMat[6] = x;
mMat[7] = y;
}
+ /**
+ * Sets current values to be the result of multiplying two given
+ * matrices
+ *
+ * @param lhs left hand side matrix
+ * @param rhs right hand side matrix
+ */
public void loadMultiply(Matrix3f lhs, Matrix3f rhs) {
for (int i=0 ; i<3 ; i++) {
float ri0 = 0;
@@ -144,36 +224,87 @@
}
}
+ /**
+ * Post-multiplies the current matrix by a given parameter
+ *
+ * @param rhs right hand side to multiply by
+ */
public void multiply(Matrix3f rhs) {
Matrix3f tmp = new Matrix3f();
tmp.loadMultiply(this, rhs);
load(tmp);
}
+
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * rotation matrix of certain angle about a given axis
+ *
+ * @param rot angle of rotation
+ * @param x rotation axis x
+ * @param y rotation axis y
+ * @param z rotation axis z
+ */
public void rotate(float rot, float x, float y, float z) {
Matrix3f tmp = new Matrix3f();
tmp.loadRotate(rot, x, y, z);
multiply(tmp);
}
+
+ /**
+ * Modifies the upper 2x2 of the current matrix by
+ * post-multiplying it with a rotation matrix of given angle
+ *
+ * @param rot angle of rotation
+ */
public void rotate(float rot) {
Matrix3f tmp = new Matrix3f();
tmp.loadRotate(rot);
multiply(tmp);
}
+
+ /**
+ * Modifies the upper 2x2 of the current matrix by
+ * post-multiplying it with a scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ */
public void scale(float x, float y) {
Matrix3f tmp = new Matrix3f();
tmp.loadScale(x, y);
multiply(tmp);
}
+
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ * @param z scale component z
+ */
public void scale(float x, float y, float z) {
Matrix3f tmp = new Matrix3f();
tmp.loadScale(x, y, z);
multiply(tmp);
}
+
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * translation matrix of given dimensions
+ *
+ * @param x translation component x
+ * @param y translation component y
+ */
public void translate(float x, float y) {
Matrix3f tmp = new Matrix3f();
tmp.loadTranslate(x, y);
multiply(tmp);
}
+
+ /**
+ * Sets the current matrix to its transpose
+ */
public void transpose() {
for(int i = 0; i < 2; ++i) {
for(int j = i + 1; j < 3; ++j) {
diff --git a/graphics/java/android/renderscript/Matrix4f.java b/graphics/java/android/renderscript/Matrix4f.java
index ec07cd5..2afd72e 100644
--- a/graphics/java/android/renderscript/Matrix4f.java
+++ b/graphics/java/android/renderscript/Matrix4f.java
@@ -26,28 +26,61 @@
**/
public class Matrix4f {
+ /**
+ * Creates a new identity 4x4 matrix
+ */
public Matrix4f() {
mMat = new float[16];
loadIdentity();
}
+ /**
+ * Creates a new matrix and sets its values from the given
+ * parameter
+ *
+ * @param dataArray values to set the matrix to, must be 16
+ * floats long
+ */
public Matrix4f(float[] dataArray) {
mMat = new float[16];
System.arraycopy(dataArray, 0, mMat, 0, mMat.length);
}
+ /**
+ * Return a reference to the internal array representing matrix
+ * values. Modifying this array will also change the matrix
+ *
+ * @return internal array representing the matrix
+ */
public float[] getArray() {
return mMat;
}
+ /**
+ * Returns the value for a given row and column
+ *
+ * @param i row of the value to return
+ * @param j column of the value to return
+ *
+ * @return value in the ith row and jth column
+ */
public float get(int i, int j) {
return mMat[i*4 + j];
}
+ /**
+ * Sets the value for a given row and column
+ *
+ * @param i row of the value to set
+ * @param j column of the value to set
+ */
public void set(int i, int j, float v) {
mMat[i*4 + j] = v;
}
+ /**
+ * Sets the matrix values to identity
+ */
public void loadIdentity() {
mMat[0] = 1;
mMat[1] = 0;
@@ -70,10 +103,24 @@
mMat[15] = 1;
}
+ /**
+ * Sets the values of the matrix to those of the parameter
+ *
+ * @param src matrix to load the values from
+ */
public void load(Matrix4f src) {
System.arraycopy(src.getArray(), 0, mMat, 0, mMat.length);
}
+ /**
+ * Sets current values to be a rotation matrix of certain angle
+ * about a given axis
+ *
+ * @param rot angle of rotation
+ * @param x rotation axis x
+ * @param y rotation axis y
+ * @param z rotation axis z
+ */
public void loadRotate(float rot, float x, float y, float z) {
float c, s;
mMat[3] = 0;
@@ -112,6 +159,13 @@
mMat[10] = z*z*nc + c;
}
+ /**
+ * Sets current values to be a scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ * @param z scale component z
+ */
public void loadScale(float x, float y, float z) {
loadIdentity();
mMat[0] = x;
@@ -119,6 +173,14 @@
mMat[10] = z;
}
+ /**
+ * Sets current values to be a translation matrix of given
+ * dimensions
+ *
+ * @param x translation component x
+ * @param y translation component y
+ * @param z translation component z
+ */
public void loadTranslate(float x, float y, float z) {
loadIdentity();
mMat[12] = x;
@@ -126,6 +188,13 @@
mMat[14] = z;
}
+ /**
+ * Sets current values to be the result of multiplying two given
+ * matrices
+ *
+ * @param lhs left hand side matrix
+ * @param rhs right hand side matrix
+ */
public void loadMultiply(Matrix4f lhs, Matrix4f rhs) {
for (int i=0 ; i<4 ; i++) {
float ri0 = 0;
@@ -146,6 +215,16 @@
}
}
+ /**
+ * Set current values to be an orthographic projection matrix
+ *
+ * @param l location of the left vertical clipping plane
+ * @param r location of the right vertical clipping plane
+ * @param b location of the bottom horizontal clipping plane
+ * @param t location of the top horizontal clipping plane
+ * @param n location of the near clipping plane
+ * @param f location of the far clipping plane
+ */
public void loadOrtho(float l, float r, float b, float t, float n, float f) {
loadIdentity();
mMat[0] = 2 / (r - l);
@@ -156,10 +235,31 @@
mMat[14]= -(f + n) / (f - n);
}
+ /**
+ * Set current values to be an orthographic projection matrix
+ * with the right and bottom clipping planes set to the given
+ * values. Left and top clipping planes are set to 0. Near and
+ * far are set to -1, 1 respectively
+ *
+ * @param w location of the right vertical clipping plane
+ * @param h location of the bottom horizontal clipping plane
+ *
+ */
public void loadOrthoWindow(int w, int h) {
loadOrtho(0,w, h,0, -1,1);
}
+ /**
+ * Sets current values to be a perspective projection matrix
+ *
+ * @param l location of the left vertical clipping plane
+ * @param r location of the right vertical clipping plane
+ * @param b location of the bottom horizontal clipping plane
+ * @param t location of the top horizontal clipping plane
+ * @param n location of the near clipping plane, must be positive
+ * @param f location of the far clipping plane, must be positive
+ *
+ */
public void loadFrustum(float l, float r, float b, float t, float n, float f) {
loadIdentity();
mMat[0] = 2 * n / (r - l);
@@ -172,6 +272,14 @@
mMat[15]= 0;
}
+ /**
+ * Sets current values to be a perspective projection matrix
+ *
+ * @param fovy vertical field of view angle in degrees
+ * @param aspect aspect ratio of the screen
+ * @param near near cliping plane, must be positive
+ * @param far far clipping plane, must be positive
+ */
public void loadPerspective(float fovy, float aspect, float near, float far) {
float top = near * (float)Math.tan((float) (fovy * Math.PI / 360.0f));
float bottom = -top;
@@ -180,6 +288,14 @@
loadFrustum(left, right, bottom, top, near, far);
}
+ /**
+ * Helper function to set the current values to a perspective
+ * projection matrix with aspect ratio defined by the parameters
+ * and (near, far), (bottom, top) mapping to (-1, 1) at z = 0
+ *
+ * @param w screen width
+ * @param h screen height
+ */
public void loadProjectionNormalized(int w, int h) {
// range -1,1 in the narrow axis at z = 0.
Matrix4f m1 = new Matrix4f();
@@ -205,22 +321,53 @@
load(m1);
}
-
+ /**
+ * Post-multiplies the current matrix by a given parameter
+ *
+ * @param rhs right hand side to multiply by
+ */
public void multiply(Matrix4f rhs) {
Matrix4f tmp = new Matrix4f();
tmp.loadMultiply(this, rhs);
load(tmp);
}
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * rotation matrix of certain angle about a given axis
+ *
+ * @param rot angle of rotation
+ * @param x rotation axis x
+ * @param y rotation axis y
+ * @param z rotation axis z
+ */
public void rotate(float rot, float x, float y, float z) {
Matrix4f tmp = new Matrix4f();
tmp.loadRotate(rot, x, y, z);
multiply(tmp);
}
+
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * scale matrix of given dimensions
+ *
+ * @param x scale component x
+ * @param y scale component y
+ * @param z scale component z
+ */
public void scale(float x, float y, float z) {
Matrix4f tmp = new Matrix4f();
tmp.loadScale(x, y, z);
multiply(tmp);
}
+
+ /**
+ * Modifies the current matrix by post-multiplying it with a
+ * translation matrix of given dimensions
+ *
+ * @param x translation component x
+ * @param y translation component y
+ * @param z translation component z
+ */
public void translate(float x, float y, float z) {
Matrix4f tmp = new Matrix4f();
tmp.loadTranslate(x, y, z);
@@ -245,6 +392,9 @@
return cofactor;
}
+ /**
+ * Sets the current matrix to its inverse
+ */
public boolean inverse() {
Matrix4f result = new Matrix4f();
@@ -271,6 +421,9 @@
return true;
}
+ /**
+ * Sets the current matrix to its inverse transpose
+ */
public boolean inverseTranspose() {
Matrix4f result = new Matrix4f();
@@ -296,6 +449,9 @@
return true;
}
+ /**
+ * Sets the current matrix to its transpose
+ */
public void transpose() {
for(int i = 0; i < 3; ++i) {
for(int j = i + 1; j < 4; ++j) {
@@ -308,8 +464,3 @@
final float[] mMat;
}
-
-
-
-
-
diff --git a/graphics/java/android/renderscript/Mesh.java b/graphics/java/android/renderscript/Mesh.java
index fcf8178..7269cea 100644
--- a/graphics/java/android/renderscript/Mesh.java
+++ b/graphics/java/android/renderscript/Mesh.java
@@ -46,11 +46,32 @@
*
**/
public enum Primitive {
+ /**
+ * Vertex data will be rendered as a series of points
+ */
POINT (0),
+ /**
+ * Vertex pairs will be rendered as lines
+ */
LINE (1),
+ /**
+ * Vertex data will be rendered as a connected line strip
+ */
LINE_STRIP (2),
+ /**
+ * Vertices will be rendered as individual triangles
+ */
TRIANGLE (3),
+ /**
+ * Vertices will be rendered as a connected triangle strip
+ * defined by the first three vertices with each additional
+ * triangle defined by a new vertex
+ */
TRIANGLE_STRIP (4),
+ /**
+ * Vertices will be rendered as a sequence of triangles that all
+ * share first vertex as the origin
+ */
TRIANGLE_FAN (5);
int mID;
@@ -733,14 +754,14 @@
Mesh sm = smb.create();
- sm.getVertexAllocation(0).copyFrom(mVtxData);
+ sm.getVertexAllocation(0).copy1DRangeFromUnchecked(0, mVtxCount / floatCount, mVtxData);
if(uploadToBufferObject) {
if (uploadToBufferObject) {
sm.getVertexAllocation(0).syncAll(Allocation.USAGE_SCRIPT);
}
}
- sm.getIndexSetAllocation(0).copyFrom(mIndexData);
+ sm.getIndexSetAllocation(0).copy1DRangeFromUnchecked(0, mIndexCount, mIndexData);
if (uploadToBufferObject) {
sm.getIndexSetAllocation(0).syncAll(Allocation.USAGE_SCRIPT);
}
diff --git a/graphics/java/android/renderscript/ProgramFragmentFixedFunction.java b/graphics/java/android/renderscript/ProgramFragmentFixedFunction.java
index 1af31f8..666a3e6 100644
--- a/graphics/java/android/renderscript/ProgramFragmentFixedFunction.java
+++ b/graphics/java/android/renderscript/ProgramFragmentFixedFunction.java
@@ -280,9 +280,10 @@
pf.mTextureCount = MAX_TEXTURE;
if (!mVaryingColorEnable) {
Allocation constantData = Allocation.createTyped(mRS,constType);
- float[] data = new float[4];
- data[0] = data[1] = data[2] = data[3] = 1.0f;
- constantData.copyFrom(data);
+ FieldPacker fp = new FieldPacker(16);
+ Float4 f4 = new Float4(1.f, 1.f, 1.f, 1.f);
+ fp.addF32(f4);
+ constantData.setFromFieldPacker(0, fp);
pf.bindConstants(constantData, 0);
}
return pf;
diff --git a/graphics/java/android/renderscript/ProgramVertexFixedFunction.java b/graphics/java/android/renderscript/ProgramVertexFixedFunction.java
index 666c7ec..556964a 100644
--- a/graphics/java/android/renderscript/ProgramVertexFixedFunction.java
+++ b/graphics/java/android/renderscript/ProgramVertexFixedFunction.java
@@ -229,7 +229,7 @@
for(int i = 0; i < 16; i ++) {
mIOBuffer.addF32(m.mMat[i]);
}
- mAlloc.copyFrom(mIOBuffer.getData());
+ mAlloc.setFromFieldPacker(0, mIOBuffer);
}
/**
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index e3593da..ade85e5 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -268,6 +268,10 @@
renderer.scale(getFloat(), getFloat());
}
break;
+ case Skew: {
+ renderer.skew(getFloat(), getFloat());
+ }
+ break;
case SetMatrix: {
renderer.setMatrix(getMatrix());
}
@@ -508,6 +512,12 @@
OpenGLRenderer::scale(sx, sy);
}
+void DisplayListRenderer::skew(float sx, float sy) {
+ addOp(DisplayList::Skew);
+ addPoint(sx, sy);
+ OpenGLRenderer::skew(sx, sy);
+}
+
void DisplayListRenderer::setMatrix(SkMatrix* matrix) {
addOp(DisplayList::SetMatrix);
addMatrix(matrix);
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 7152334..05864ec 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -98,6 +98,7 @@
Translate,
Rotate,
Scale,
+ Skew,
SetMatrix,
ConcatMatrix,
ClipRect,
@@ -250,6 +251,7 @@
void translate(float dx, float dy);
void rotate(float degrees);
void scale(float sx, float sy);
+ void skew(float sx, float sy);
void setMatrix(SkMatrix* matrix);
void concatMatrix(SkMatrix* matrix);
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index d1fbfba..c080501 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -38,8 +38,10 @@
// Font
///////////////////////////////////////////////////////////////////////////////
-Font::Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags) :
- mState(state), mFontId(fontId), mFontSize(fontSize), mFlags(flags) {
+Font::Font(FontRenderer* state, uint32_t fontId, float fontSize,
+ int flags, uint32_t italicStyle) :
+ mState(state), mFontId(fontId), mFontSize(fontSize),
+ mFlags(flags), mItalicStyle(italicStyle) {
}
@@ -275,17 +277,19 @@
return newGlyph;
}
-Font* Font::create(FontRenderer* state, uint32_t fontId, float fontSize, int flags) {
+Font* Font::create(FontRenderer* state, uint32_t fontId, float fontSize,
+ int flags, uint32_t italicStyle) {
Vector<Font*> &activeFonts = state->mActiveFonts;
for (uint32_t i = 0; i < activeFonts.size(); i++) {
Font* font = activeFonts[i];
- if (font->mFontId == fontId && font->mFontSize == fontSize && font->mFlags == flags) {
+ if (font->mFontId == fontId && font->mFontSize == fontSize &&
+ font->mFlags == flags && font->mItalicStyle == italicStyle) {
return font;
}
}
- Font* newFont = new Font(state, fontId, fontSize, flags);
+ Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle);
activeFonts.push(newFont);
return newFont;
}
@@ -638,7 +642,10 @@
if (paint->isFakeBoldText()) {
flags |= Font::kFakeBold;
}
- mCurrentFont = Font::create(this, fontId, fontSize, flags);
+
+ const float skewX = paint->getTextSkewX();
+ uint32_t italicStyle = *(uint32_t*) &skewX;
+ mCurrentFont = Font::create(this, fontId, fontSize, flags, italicStyle);
const float maxPrecacheFontSize = 40.0f;
bool isNewFont = currentNumFonts != mActiveFonts.size();
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index 40572c6..1005812 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -57,7 +57,8 @@
/**
* Creates a new font associated with the specified font state.
*/
- static Font* create(FontRenderer* state, uint32_t fontId, float fontSize, int flags);
+ static Font* create(FontRenderer* state, uint32_t fontId, float fontSize,
+ int flags, uint32_t italicStyle);
protected:
friend class FontRenderer;
@@ -103,7 +104,7 @@
SkFixed mRsbDelta;
};
- Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags);
+ Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags, uint32_t italicStyle);
DefaultKeyedVector<int32_t, CachedGlyphInfo*> mCachedGlyphs;
@@ -122,6 +123,7 @@
uint32_t mFontId;
float mFontSize;
int mFlags;
+ uint32_t mItalicStyle;
};
class FontRenderer {
diff --git a/libs/hwui/Matrix.cpp b/libs/hwui/Matrix.cpp
index fe7f883..e7c0fe3 100644
--- a/libs/hwui/Matrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -178,6 +178,24 @@
data[kScaleZ] = sz;
}
+void Matrix4::loadSkew(float sx, float sy) {
+ loadIdentity();
+
+ data[kScaleX] = 1.0f;
+ data[kSkewX] = sx;
+ data[kTranslateX] = 0.0f;
+
+ data[kSkewY] = sy;
+ data[kScaleY] = 1.0f;
+ data[kTranslateY] = 0.0f;
+
+ data[kPerspective0] = 0.0f;
+ data[kPerspective1] = 0.0f;
+ data[kPerspective2] = 1.0f;
+
+ mSimpleMatrix = false;
+}
+
void Matrix4::loadRotate(float angle, float x, float y, float z) {
data[kPerspective0] = 0.0f;
data[kPerspective1] = 0.0f;
diff --git a/libs/hwui/Matrix.h b/libs/hwui/Matrix.h
index 23fc6c3..08f5d77 100644
--- a/libs/hwui/Matrix.h
+++ b/libs/hwui/Matrix.h
@@ -72,6 +72,7 @@
void loadTranslate(float x, float y, float z);
void loadScale(float sx, float sy, float sz);
+ void loadSkew(float sx, float sy);
void loadRotate(float angle, float x, float y, float z);
void loadMultiply(const Matrix4& u, const Matrix4& v);
@@ -97,6 +98,12 @@
multiply(u);
}
+ void skew(float sx, float sy) {
+ Matrix4 u;
+ u.loadSkew(sx, sy);
+ multiply(u);
+ }
+
void rotate(float angle, float x, float y, float z) {
Matrix4 u;
u.loadRotate(angle, x, y, z);
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 16a1de7..2067acc1 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -766,6 +766,10 @@
mSnapshot->transform->scale(sx, sy, 1.0f);
}
+void OpenGLRenderer::skew(float sx, float sy) {
+ mSnapshot->transform->skew(sx, sy);
+}
+
void OpenGLRenderer::setMatrix(SkMatrix* matrix) {
mSnapshot->transform->load(*matrix);
}
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 7387b92..272c5c2 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -84,6 +84,7 @@
virtual void translate(float dx, float dy);
virtual void rotate(float degrees);
virtual void scale(float sx, float sy);
+ virtual void skew(float sx, float sy);
const float* getMatrix() const;
void getMatrix(SkMatrix* matrix);
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 535c0ac..3f0036a 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -154,8 +154,7 @@
float y1 = 0.0f;
float v1 = 0.0f;
- uint32_t i = 0;
- for ( ; i < mYCount; i++) {
+ for (uint32_t i = 0; i < mYCount; i++) {
float stepY = mYDivs[i];
float y2 = 0.0f;
@@ -167,8 +166,10 @@
}
float v2 = fmax(0.0f, stepY - 0.5f) / bitmapHeight;
- generateRow(vertex, y1, y2, v1, v2, stretchX, right - left,
- bitmapWidth, quadCount, i & 1);
+ if (stepY > 0.0f) {
+ generateRow(vertex, y1, y2, v1, v2, stretchX, right - left,
+ bitmapWidth, quadCount);
+ }
y1 = y2;
v1 = (stepY + 0.5f) / bitmapHeight;
@@ -177,7 +178,7 @@
}
generateRow(vertex, y1, bottom - top, v1, 1.0f, stretchX, right - left,
- bitmapWidth, quadCount, i & 1);
+ bitmapWidth, quadCount);
if (verticesCount > 0) {
Caches::getInstance().bindMeshBuffer(meshBuffer);
@@ -195,15 +196,14 @@
}
void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, float v2,
- float stretchX, float width, float bitmapWidth, uint32_t& quadCount, bool isStretch) {
+ float stretchX, float width, float bitmapWidth, uint32_t& quadCount) {
float previousStepX = 0.0f;
float x1 = 0.0f;
float u1 = 0.0f;
// Generate the row quad by quad
- uint32_t i = 0;
- for ( ; i < mXCount; i++) {
+ for (uint32_t i = 0; i < mXCount; i++) {
float stepX = mXDivs[i];
float x2 = 0.0f;
@@ -215,7 +215,9 @@
}
float u2 = fmax(0.0f, stepX - 0.5f) / bitmapWidth;
- generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount, isStretch || (i & 1));
+ if (stepX > 0.0f) {
+ generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount);
+ }
x1 = x2;
u1 = (stepX + 0.5f) / bitmapWidth;
@@ -223,19 +225,16 @@
previousStepX = stepX;
}
- generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount, isStretch || (i & 1));
+ generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount);
}
void Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2,
- float u1, float v1, float u2, float v2, uint32_t& quadCount, bool isStretch) {
+ float u1, float v1, float u2, float v2, uint32_t& quadCount) {
const uint32_t oldQuadCount = quadCount;
- const bool valid = isStretch || (x2 - x1 > 0.9999f && y2 - y1 > 0.9999f);
- if (valid) {
- quadCount++;
- }
+ quadCount++;
// Skip degenerate and transparent (empty) quads
- if (!valid || ((mColorKey >> oldQuadCount) & 0x1) == 1) {
+ if ((mColorKey >> oldQuadCount) & 0x1) {
#if DEBUG_PATCHES_EMPTY_VERTICES
PATCH_LOGD(" quad %d (empty)", oldQuadCount);
PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.2f, %.2f", x1, y1, u1, v1);
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index 4de0c76..0f0ffa2 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -70,11 +70,11 @@
void generateRow(TextureVertex*& vertex, float y1, float y2,
float v1, float v2, float stretchX, float width, float bitmapWidth,
- uint32_t& quadCount, bool isStretch);
+ uint32_t& quadCount);
void generateQuad(TextureVertex*& vertex,
float x1, float y1, float x2, float y2,
float u1, float v1, float u2, float v2,
- uint32_t& quadCount, bool isStretch);
+ uint32_t& quadCount);
}; // struct Patch
}; // namespace uirenderer
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index 1ab2109..9f730bf 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -471,45 +471,42 @@
ScriptC *s,
const char *resName,
const char *cacheDir) {
- {
- s->mBccScript = bccCreateScript();
+ s->mBccScript = bccCreateScript();
- s->mEnviroment.mIsThreadable = true;
+ s->mEnviroment.mIsThreadable = true;
- bccRegisterSymbolCallback(s->mBccScript, symbolLookup, s);
+ bccRegisterSymbolCallback(s->mBccScript, symbolLookup, s);
- if (bccReadBC(s->mBccScript,
- resName,
- s->mEnviroment.mScriptText,
- s->mEnviroment.mScriptTextLength, 0) != 0) {
- LOGE("bcc: FAILS to read bitcode");
- // Handle Fatal Error
- }
+ if (bccReadBC(s->mBccScript,
+ resName,
+ s->mEnviroment.mScriptText,
+ s->mEnviroment.mScriptTextLength, 0) != 0) {
+ LOGE("bcc: FAILS to read bitcode");
+ // Handle Fatal Error
+ }
#if 1
- if (bccLinkBC(s->mBccScript,
- resName,
- NULL /*rs_runtime_lib_bc*/,
- 1 /*rs_runtime_lib_bc_size*/
- /*"1" means skip buffer here, and let libbcc decide*/,
- 0) != 0) {
- LOGE("bcc: FAILS to link bitcode");
- // Handle Fatal Error
- }
-#endif
- char *cachePath = genCacheFileName(cacheDir, resName, ".oBCC");
-
- if (bccPrepareExecutable(s->mBccScript, cachePath, 0) != 0) {
- LOGE("bcc: FAILS to prepare executable");
- // Handle Fatal Error
- }
-
- free(cachePath);
-
- s->mProgram.mRoot = reinterpret_cast<int (*)()>(bccGetFuncAddr(s->mBccScript, "root"));
- s->mProgram.mInit = reinterpret_cast<void (*)()>(bccGetFuncAddr(s->mBccScript, "init"));
+ if (bccLinkBC(s->mBccScript,
+ resName,
+ NULL /*rs_runtime_lib_bc*/,
+ 1 /*rs_runtime_lib_bc_size*/
+ /*"1" means skip buffer here, and let libbcc decide*/,
+ 0) != 0) {
+ LOGE("bcc: FAILS to link bitcode");
+ // Handle Fatal Error
}
- LOGV("%p ScriptCState::runCompiler root %p, init %p", rsc, s->mProgram.mRoot, s->mProgram.mInit);
+#endif
+ char *cachePath = genCacheFileName(cacheDir, resName, ".oBCC");
+
+ if (bccPrepareExecutable(s->mBccScript, cachePath, 0) != 0) {
+ LOGE("bcc: FAILS to prepare executable");
+ // Handle Fatal Error
+ }
+
+ free(cachePath);
+
+ s->mProgram.mRoot = reinterpret_cast<int (*)()>(bccGetFuncAddr(s->mBccScript, "root"));
+ s->mProgram.mInit = reinterpret_cast<void (*)()>(bccGetFuncAddr(s->mBccScript, "init"));
if (s->mProgram.mInit) {
s->mProgram.mInit();
@@ -537,66 +534,69 @@
s->mEnviroment.mFragmentStore.set(rsc->getDefaultProgramStore());
s->mEnviroment.mRaster.set(rsc->getDefaultProgramRaster());
- if (s->mProgram.mRoot) {
- const static int pragmaMax = 16;
- size_t pragmaCount = bccGetPragmaCount(s->mBccScript);
- char const *keys[pragmaMax];
- char const *values[pragmaMax];
- bccGetPragmaList(s->mBccScript, pragmaMax, keys, values);
+ const static int pragmaMax = 16;
+ size_t pragmaCount = bccGetPragmaCount(s->mBccScript);
+ char const *keys[pragmaMax];
+ char const *values[pragmaMax];
+ bccGetPragmaList(s->mBccScript, pragmaMax, keys, values);
- for (size_t i=0; i < pragmaCount; ++i) {
- //LOGE("pragma %s %s", keys[i], values[i]);
- if (!strcmp(keys[i], "version")) {
+ for (size_t i=0; i < pragmaCount; ++i) {
+ //LOGE("pragma %s %s", keys[i], values[i]);
+ if (!strcmp(keys[i], "version")) {
+ if (!strcmp(values[i], "1")) {
continue;
}
-
- if (!strcmp(keys[i], "stateVertex")) {
- if (!strcmp(values[i], "default")) {
- continue;
- }
- if (!strcmp(values[i], "parent")) {
- s->mEnviroment.mVertex.clear();
- continue;
- }
- LOGE("Unreconized value %s passed to stateVertex", values[i]);
- }
-
- if (!strcmp(keys[i], "stateRaster")) {
- if (!strcmp(values[i], "default")) {
- continue;
- }
- if (!strcmp(values[i], "parent")) {
- s->mEnviroment.mRaster.clear();
- continue;
- }
- LOGE("Unreconized value %s passed to stateRaster", values[i]);
- }
-
- if (!strcmp(keys[i], "stateFragment")) {
- if (!strcmp(values[i], "default")) {
- continue;
- }
- if (!strcmp(values[i], "parent")) {
- s->mEnviroment.mFragment.clear();
- continue;
- }
- LOGE("Unreconized value %s passed to stateFragment", values[i]);
- }
-
- if (!strcmp(keys[i], "stateStore")) {
- if (!strcmp(values[i], "default")) {
- continue;
- }
- if (!strcmp(values[i], "parent")) {
- s->mEnviroment.mFragmentStore.clear();
- continue;
- }
- LOGE("Unreconized value %s passed to stateStore", values[i]);
- }
+ LOGE("Invalid version pragma value: %s\n", values[i]);
+ // Handle Fatal Error
}
- } else {
- LOGE("bcc: FAILS to prepare executable");
- // Handle Fatal Error
+
+ if (!strcmp(keys[i], "stateVertex")) {
+ if (!strcmp(values[i], "default")) {
+ continue;
+ }
+ if (!strcmp(values[i], "parent")) {
+ s->mEnviroment.mVertex.clear();
+ continue;
+ }
+ LOGE("Unrecognized value %s passed to stateVertex", values[i]);
+ // Handle Fatal Error
+ }
+
+ if (!strcmp(keys[i], "stateRaster")) {
+ if (!strcmp(values[i], "default")) {
+ continue;
+ }
+ if (!strcmp(values[i], "parent")) {
+ s->mEnviroment.mRaster.clear();
+ continue;
+ }
+ LOGE("Unrecognized value %s passed to stateRaster", values[i]);
+ // Handle Fatal Error
+ }
+
+ if (!strcmp(keys[i], "stateFragment")) {
+ if (!strcmp(values[i], "default")) {
+ continue;
+ }
+ if (!strcmp(values[i], "parent")) {
+ s->mEnviroment.mFragment.clear();
+ continue;
+ }
+ LOGE("Unrecognized value %s passed to stateFragment", values[i]);
+ // Handle Fatal Error
+ }
+
+ if (!strcmp(keys[i], "stateStore")) {
+ if (!strcmp(values[i], "default")) {
+ continue;
+ }
+ if (!strcmp(values[i], "parent")) {
+ s->mEnviroment.mFragmentStore.clear();
+ continue;
+ }
+ LOGE("Unrecognized value %s passed to stateStore", values[i]);
+ // Handle Fatal Error
+ }
}
}
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index 8929393..10c9a9a 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -1177,7 +1177,8 @@
long lastModifiedSeconds = file.lastModified() / 1000;
// always scan the file, so we can return the content://media Uri for existing files
- return mClient.doScanFile(path, mimeType, lastModifiedSeconds, file.length(),false, true);
+ return mClient.doScanFile(path, mimeType, lastModifiedSeconds, file.length(),
+ false, true);
} catch (RemoteException e) {
Log.e(TAG, "RemoteException in MediaScanner.scanFile()", e);
return null;
@@ -1185,17 +1186,30 @@
}
public void scanMtpFile(String path, String volumeName, int objectHandle, int format) {
+ initialize(volumeName);
MediaFile.MediaFileType mediaFileType = MediaFile.getFileType(path);
int fileType = (mediaFileType == null ? 0 : mediaFileType.fileType);
+ File file = new File(path);
+ long lastModifiedSeconds = file.lastModified() / 1000;
if (!MediaFile.isAudioFileType(fileType) && !MediaFile.isVideoFileType(fileType) &&
!MediaFile.isImageFileType(fileType) && !MediaFile.isPlayListFileType(fileType)) {
- // nothing to do
+
+ // no need to use the media scanner, but we need to update last modified and file size
+ ContentValues values = new ContentValues();
+ values.put(Files.FileColumns.SIZE, file.length());
+ values.put(Files.FileColumns.DATE_MODIFIED, lastModifiedSeconds);
+ try {
+ String[] whereArgs = new String[] { Integer.toString(objectHandle) };
+ mMediaProvider.update(Files.getMtpObjectsUri(volumeName), values, "_id=?",
+ whereArgs);
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException in scanMtpFile", e);
+ }
return;
}
mMtpObjectHandle = objectHandle;
- initialize(volumeName);
try {
if (MediaFile.isPlayListFileType(fileType)) {
// build file cache so we can look up tracks in the playlist
@@ -1213,11 +1227,6 @@
// MTP will create a file entry for us so we don't want to do it in prescan
prescan(path, false);
- File file = new File(path);
-
- // lastModified is in milliseconds on Files.
- long lastModifiedSeconds = file.lastModified() / 1000;
-
// always scan the file, so we can return the content://media Uri for existing files
mClient.doScanFile(path, mediaFileType.mimeType, lastModifiedSeconds, file.length(),
(format == MtpConstants.FORMAT_ASSOCIATION), true);
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index 3e54627..d3e9a49 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -150,7 +150,7 @@
*/
public static final int ERROR = -1;
/**
- * Internal opreation status. Not returned by any method.
+ * Internal operation status. Not returned by any method.
*/
public static final int ALREADY_EXISTS = -2;
/**
diff --git a/media/java/android/media/audiofx/Visualizer.java b/media/java/android/media/audiofx/Visualizer.java
index 41309dc..bcf7b89 100755
--- a/media/java/android/media/audiofx/Visualizer.java
+++ b/media/java/android/media/audiofx/Visualizer.java
@@ -95,7 +95,7 @@
*/
public static final int ERROR = -1;
/**
- * Internal opreation status. Not returned by any method.
+ * Internal operation status. Not returned by any method.
*/
public static final int ALREADY_EXISTS = -2;
/**
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index ac476ff..abc457e 100644
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -185,7 +185,7 @@
}
}
- private void endSendObject(String path, int handle, int format, long actualSize, boolean succeeded) {
+ private void endSendObject(String path, int handle, int format, boolean succeeded) {
if (succeeded) {
// handle abstract playlists separately
// they do not exist in the file system so don't use the media scanner here
@@ -196,11 +196,16 @@
if (lastSlash >= 0) {
name = name.substring(lastSlash + 1);
}
+ // strip trailing ".pla" from the name
+ if (name.endsWith(".pla")) {
+ name = name.substring(0, name.length() - 4);
+ }
ContentValues values = new ContentValues(1);
values.put(Audio.Playlists.DATA, path);
values.put(Audio.Playlists.NAME, name);
values.put(Files.FileColumns.FORMAT, format);
+ values.put(Files.FileColumns.DATE_MODIFIED, System.currentTimeMillis() / 1000);
values.put(MediaColumns.MEDIA_SCANNER_NEW_OBJECT_ID, handle);
try {
Uri uri = mMediaProvider.insert(Audio.Playlists.EXTERNAL_CONTENT_URI, values);
@@ -208,18 +213,6 @@
Log.e(TAG, "RemoteException in endSendObject", e);
}
} else {
- if (actualSize >= 0) {
- // update size if necessary
- ContentValues values = new ContentValues();
- values.put(Files.FileColumns.SIZE, actualSize);
- try {
- String[] whereArgs = new String[] { Integer.toString(handle) };
- mMediaProvider.update(mObjectsUri, values, ID_WHERE, whereArgs);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in mMediaProvider.update", e);
- }
- }
-
mMediaScanner.scanMtpFile(path, mVolumeName, handle, format);
}
} else {
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index 8f9b8a2..9abf6a2 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -99,7 +99,6 @@
virtual void endSendObject(const char* path,
MtpObjectHandle handle,
MtpObjectFormat format,
- int64_t actualSize,
bool succeeded);
virtual MtpObjectHandleList* getObjectList(MtpStorageID storageID,
@@ -236,11 +235,11 @@
}
void MyMtpDatabase::endSendObject(const char* path, MtpObjectHandle handle,
- MtpObjectFormat format, int64_t actualSize, bool succeeded) {
+ MtpObjectFormat format, bool succeeded) {
JNIEnv* env = AndroidRuntime::getJNIEnv();
jstring pathStr = env->NewStringUTF(path);
env->CallVoidMethod(mDatabase, method_endSendObject, pathStr,
- (jint)handle, (jint)format, (jlong)actualSize, (jboolean)succeeded);
+ (jint)handle, (jint)format, (jboolean)succeeded);
if (pathStr)
env->DeleteLocalRef(pathStr);
@@ -1094,7 +1093,7 @@
LOGE("Can't find beginSendObject");
return -1;
}
- method_endSendObject = env->GetMethodID(clazz, "endSendObject", "(Ljava/lang/String;IIJZ)V");
+ method_endSendObject = env->GetMethodID(clazz, "endSendObject", "(Ljava/lang/String;IIZ)V");
if (method_endSendObject == NULL) {
LOGE("Can't find endSendObject");
return -1;
diff --git a/media/jni/mediaeditor/Android.mk b/media/jni/mediaeditor/Android.mk
index 9d6e7d4..27c41be 100755
--- a/media/jni/mediaeditor/Android.mk
+++ b/media/jni/mediaeditor/Android.mk
@@ -36,9 +36,7 @@
$(TOP)/frameworks/base/media/libstagefright/rtsp \
$(JNI_H_INCLUDE) \
$(call include-path-for, corecg graphics) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
- $(TOP)/external/opencore/android \
- $(TOP)/vendor/qcom/proprietary/qdsp6/mm-core/omxcore/inc \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/core/jni/mediaeditor \
$(TOP)/frameworks/media/libvideoeditor/vss/inc \
$(TOP)/frameworks/media/libvideoeditor/vss/common/inc \
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index 992abd7..54e515a 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -1244,7 +1244,9 @@
// Use software codec for time lapse
uint32_t encoder_flags = 0;
if (mCaptureTimeLapse) {
- encoder_flags |= OMXCodec::kPreferSoftwareCodecs;
+ // Do not use software encoder for timelapse for now
+ // It is _very_ slow and the preview appears sluggish
+ //encoder_flags |= OMXCodec::kPreferSoftwareCodecs;
} else if (mIsMetaDataStoredInVideoBuffers) {
encoder_flags |= OMXCodec::kHardwareCodecsOnly;
encoder_flags |= OMXCodec::kStoreMetaDataInVideoBuffers;
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 4cfe28e..49d05ed 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -520,8 +520,10 @@
*durationUs = mRTSPController->getQueueDurationUs(eos);
return true;
} else if (mCachedSource != NULL && getBitrate(&bitrate)) {
- size_t cachedDataRemaining = mCachedSource->approxDataRemaining(eos);
+ status_t finalStatus;
+ size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&finalStatus);
*durationUs = cachedDataRemaining * 8000000ll / bitrate;
+ *eos = (finalStatus != OK);
return true;
}
@@ -564,11 +566,14 @@
mBufferingEventPending = false;
if (mCachedSource != NULL) {
- bool eos;
- size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&eos);
+ status_t finalStatus;
+ size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&finalStatus);
+ bool eos = (finalStatus != OK);
if (eos) {
- notifyListener_l(MEDIA_BUFFERING_UPDATE, 100);
+ if (finalStatus == ERROR_END_OF_STREAM) {
+ notifyListener_l(MEDIA_BUFFERING_UPDATE, 100);
+ }
if (mFlags & PREPARING) {
LOGV("cache has reached EOS, prepare is done.");
finishAsyncPrepare_l();
diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp
index 9017921..20f1655 100644
--- a/media/libstagefright/NuCachedSource2.cpp
+++ b/media/libstagefright/NuCachedSource2.cpp
@@ -393,13 +393,13 @@
return mCacheOffset + mCache->totalSize();
}
-size_t NuCachedSource2::approxDataRemaining(bool *eos) {
+size_t NuCachedSource2::approxDataRemaining(status_t *finalStatus) {
Mutex::Autolock autoLock(mLock);
- return approxDataRemaining_l(eos);
+ return approxDataRemaining_l(finalStatus);
}
-size_t NuCachedSource2::approxDataRemaining_l(bool *eos) {
- *eos = (mFinalStatus != OK);
+size_t NuCachedSource2::approxDataRemaining_l(status_t *finalStatus) {
+ *finalStatus = mFinalStatus;
off64_t lastBytePosCached = mCacheOffset + mCache->totalSize();
if (mLastAccessPos < lastBytePosCached) {
return lastBytePosCached - mLastAccessPos;
@@ -488,4 +488,3 @@
return mSource->getUri();
}
} // namespace android
-
diff --git a/media/libstagefright/include/NuCachedSource2.h b/media/libstagefright/include/NuCachedSource2.h
index aa320fc..28840be 100644
--- a/media/libstagefright/include/NuCachedSource2.h
+++ b/media/libstagefright/include/NuCachedSource2.h
@@ -43,7 +43,7 @@
////////////////////////////////////////////////////////////////////////////
size_t cachedSize();
- size_t approxDataRemaining(bool *eos);
+ size_t approxDataRemaining(status_t *finalStatus);
void resumeFetchingIfNecessary();
@@ -92,7 +92,7 @@
ssize_t readInternal(off64_t offset, void *data, size_t size);
status_t seekInternal_l(off64_t offset);
- size_t approxDataRemaining_l(bool *eos);
+ size_t approxDataRemaining_l(status_t *finalStatus);
void restartPrefetcherIfNecessary_l(bool ignoreLowWaterThreshold = false);
DISALLOW_EVIL_CONSTRUCTORS(NuCachedSource2);
diff --git a/media/libstagefright/rtsp/APacketSource.cpp b/media/libstagefright/rtsp/APacketSource.cpp
index 10cc88b..f0b858d 100644
--- a/media/libstagefright/rtsp/APacketSource.cpp
+++ b/media/libstagefright/rtsp/APacketSource.cpp
@@ -373,7 +373,17 @@
br.skipBits(2); // chroma_format
br.skipBits(1); // low_delay
if (br.getBits(1)) { // vbv_parameters
- TRESPASS();
+ br.skipBits(15); // first_half_bit_rate
+ CHECK(br.getBits(1)); // marker_bit
+ br.skipBits(15); // latter_half_bit_rate
+ CHECK(br.getBits(1)); // marker_bit
+ br.skipBits(15); // first_half_vbv_buffer_size
+ CHECK(br.getBits(1)); // marker_bit
+ br.skipBits(3); // latter_half_vbv_buffer_size
+ br.skipBits(11); // first_half_vbv_occupancy
+ CHECK(br.getBits(1)); // marker_bit
+ br.skipBits(15); // latter_half_vbv_occupancy
+ CHECK(br.getBits(1)); // marker_bit
}
}
unsigned video_object_layer_shape = br.getBits(2);
diff --git a/media/mtp/MtpDatabase.h b/media/mtp/MtpDatabase.h
index 6dcb931..4d9a1ae 100644
--- a/media/mtp/MtpDatabase.h
+++ b/media/mtp/MtpDatabase.h
@@ -42,7 +42,6 @@
virtual void endSendObject(const char* path,
MtpObjectHandle handle,
MtpObjectFormat format,
- int64_t size,
bool succeeded) = 0;
virtual MtpObjectHandleList* getObjectList(MtpStorageID storageID,
diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp
index 236cd0a..b1bd145 100644
--- a/media/mtp/MtpServer.cpp
+++ b/media/mtp/MtpServer.cpp
@@ -700,6 +700,9 @@
if (ret && ret != -EEXIST)
return MTP_RESPONSE_GENERAL_ERROR;
chown((const char *)path, getuid(), mFileGroup);
+
+ // SendObject does not get sent for directories, so call endSendObject here instead
+ mDatabase->endSendObject(path, handle, MTP_FORMAT_ASSOCIATION, MTP_RESPONSE_OK);
} else {
mSendObjectFilePath = path;
// save the handle for the SendObject call, which should follow
@@ -718,7 +721,6 @@
MtpResponseCode result = MTP_RESPONSE_OK;
mode_t mask;
int ret;
- uint64_t actualSize = -1;
if (mSendObjectHandle == kInvalidObjectHandle) {
LOGE("Expected SendObjectInfo before SendObject");
@@ -761,18 +763,11 @@
result = MTP_RESPONSE_TRANSACTION_CANCELLED;
else
result = MTP_RESPONSE_GENERAL_ERROR;
- } else if (mSendObjectFileSize == 0xFFFFFFFF) {
- // actual size is likely > 4 gig so stat the file to compute actual length
- struct stat s;
- if (lstat(mSendObjectFilePath, &s) == 0) {
- actualSize = s.st_size;
- LOGD("actualSize: %lld\n", actualSize);
- }
}
done:
mDatabase->endSendObject(mSendObjectFilePath, mSendObjectHandle, mSendObjectFormat,
- actualSize, result == MTP_RESPONSE_OK);
+ result == MTP_RESPONSE_OK);
mSendObjectHandle = kInvalidObjectHandle;
mSendObjectFormat = 0;
return result;
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java
index 8f2f974..4099c4c 100644
--- a/opengl/java/android/opengl/GLSurfaceView.java
+++ b/opengl/java/android/opengl/GLSurfaceView.java
@@ -272,6 +272,37 @@
}
/**
+ * @hide
+ * Control whether the EGL context is preserved when the GLSurfaceView is paused and
+ * resumed.
+ * <p>
+ * If set to true, then the EGL context may be preserved when the GLSurfaceView is paused.
+ * Whether the EGL context is actually preserved or not depends upon whether the
+ * Android device that the program is running on can support an arbitrary number of EGL
+ * contexts or not. Devices that can only support a limited number of EGL contexts must
+ * release the EGL context in order to allow multiple applications to share the GPU.
+ * <p>
+ * If set to false, the EGL context will be released when the GLSurfaceView is paused,
+ * and recreated when the GLSurfaceView is resumed.
+ * <p>
+ *
+ * The default is false.
+ *
+ * @param preserveOnPause preserve the EGL context when paused
+ */
+ public void setPreserveEGLContextOnPause(boolean preserveOnPause) {
+ mPreserveEGLContextOnPause = preserveOnPause;
+ }
+
+ /**
+ * @hide
+ * @return true if the EGL context will be preserved when paused
+ */
+ public boolean getPreserveEGLContextOnPause() {
+ return mPreserveEGLContextOnPause;
+ }
+
+ /**
* Set the renderer associated with this view. Also starts the thread that
* will call the renderer, which in turn causes the rendering to start.
* <p>This method should be called once and only once in the life-cycle of
@@ -1240,7 +1271,7 @@
Log.i("GLThread", "releasing EGL surface because paused tid=" + getId());
}
stopEglSurfaceLocked();
- if (sGLThreadManager.shouldReleaseEGLContextWhenPausing()) {
+ if (!mPreserveEGLContextOnPause || sGLThreadManager.shouldReleaseEGLContextWhenPausing()) {
stopEglContextLocked();
if (LOG_SURFACE) {
Log.i("GLThread", "releasing EGL context because paused tid=" + getId());
@@ -1705,7 +1736,7 @@
// Release the EGL context when pausing even if
// the hardware supports multiple EGL contexts.
// Otherwise the device could run out of EGL contexts.
- return true;
+ return mLimitedGLESContexts;
}
public synchronized boolean shouldTerminateEGLWhenPausing() {
@@ -1716,16 +1747,18 @@
public synchronized void checkGLDriver(GL10 gl) {
if (! mGLESDriverCheckComplete) {
checkGLESVersion();
+ String renderer = gl.glGetString(GL10.GL_RENDERER);
if (mGLESVersion < kGLES_20) {
- String renderer = gl.glGetString(GL10.GL_RENDERER);
mMultipleGLESContextsAllowed =
! renderer.startsWith(kMSM7K_RENDERER_PREFIX);
- if (LOG_SURFACE) {
- Log.w(TAG, "checkGLDriver renderer = \"" + renderer + "\" multipleContextsAllowed = "
- + mMultipleGLESContextsAllowed);
- }
notifyAll();
}
+ mLimitedGLESContexts = !mMultipleGLESContextsAllowed || renderer.startsWith(kADRENO);
+ if (LOG_SURFACE) {
+ Log.w(TAG, "checkGLDriver renderer = \"" + renderer + "\" multipleContextsAllowed = "
+ + mMultipleGLESContextsAllowed
+ + " mLimitedGLESContexts = " + mLimitedGLESContexts);
+ }
mGLESDriverCheckComplete = true;
}
}
@@ -1750,9 +1783,11 @@
private int mGLESVersion;
private boolean mGLESDriverCheckComplete;
private boolean mMultipleGLESContextsAllowed;
+ private boolean mLimitedGLESContexts;
private static final int kGLES_20 = 0x20000;
private static final String kMSM7K_RENDERER_PREFIX =
"Q3Dimension MSM7500 ";
+ private static final String kADRENO = "Adreno";
private GLThread mEglOwner;
}
@@ -1768,4 +1803,5 @@
private GLWrapper mGLWrapper;
private int mDebugFlags;
private int mEGLContextClientVersion;
+ private boolean mPreserveEGLContextOnPause;
}
diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
index 2ec2226..21f77e3 100644
--- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
+++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
@@ -190,6 +190,7 @@
while ((pkg=pm.nextPackageToClean(pkg)) != null) {
eraseFiles(Environment.getExternalStorageAppDataDirectory(pkg));
eraseFiles(Environment.getExternalStorageAppMediaDirectory(pkg));
+ eraseFiles(Environment.getExternalStorageAppObbDirectory(pkg));
}
} catch (RemoteException e) {
}
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
index 993ea55..3359602 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 5f01f4d..b0eac55 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index aa98f7d..53c44c6 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 583044d..168d8af 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index ea5694d..1ff4a80 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index b95c6cb..969a7d8 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 4043c2e..cc741ee 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 39a462c..83f29ff 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 72373bb..068451e 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml b/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
index f29259a..5c9c6fc 100644
--- a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
@@ -9,6 +9,8 @@
<string name="status_bar_settings_rotation_lock" msgid="9125161825884157545">"Bloquear orient. de pant."</string>
<!-- XL -->
<string name="recent_tasks_app_label" msgid="5550538721034982973">"Google Apps"</string>
+ <!-- XL -->
+ <string name="bluetooth_tethered" msgid="8017158699581472359">"Bluetooth anclado"</string>
<!-- XL xlarge -->
<string name="status_bar_settings_signal_meter_disconnected" msgid="4866302415753953027">"Sin conexión a Internet"</string>
<!-- XL xlarge -->
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 8013a19..da742e6 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 3acfb45..58046ab 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 0528d68..3c65051 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 1ce102a..cbb2eec 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 12308fb..d199d9a 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 411336a..3e60b8d 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index b82aa77..dbcd29d 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index db170ab..db87cd3 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index ca99d86..9d751795 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index f2d5621..34eb41f 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 25d8873..3b59844 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 6c5970a..35d7503 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 90a5e44..a5848a9 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index fb33329..cf81e85 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 82405a8..4d6140f 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 4efdcbb..339d146 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 07ef5ef..b50c422 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index aa14cce..01544b5 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 17be76a..35ffabb 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index e3fec88..7b94e9b 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -57,4 +57,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 2bb3c14..4e32019 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 89b9cc8..7a6a71e 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 9716327..6b497b9 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index b05b93c..54145f2 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -32,8 +32,7 @@
<string name="invalid_charger" msgid="4549105996740522523">"Polnjenje po povezavi USB ni podprto."\n"Uporabite priloženi polnilnik."</string>
<string name="battery_low_why" msgid="7279169609518386372">"Uporaba baterije"</string>
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Nastavitve"</string>
- <!-- no translation found for status_bar_settings_wifi_button (1733928151698311923) -->
- <skip />
+ <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
<string name="status_bar_settings_airplane" msgid="4879879698500955300">"Način za letalo"</string>
<string name="status_bar_settings_rotation_lock" msgid="8361452930058000609">"Zakleni usmerjenost zaslona"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"TIHO"</string>
@@ -45,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index ff1d3fb..6ee4009 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 06b6880..99623c3 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 2d337a90..7d154a6 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index e94d3cc..bb56bc2 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 4c3f818..361d7ee 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 85ead1c..ae40e56 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 71df0c3..2ec07f1 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 0cdc38d..cb15613 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index c85020f..960130f 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -44,4 +44,6 @@
<skip />
<!-- no translation found for bluetooth_tethered (7094101612161133267) -->
<skip />
+ <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
index 69bc161..7012ddc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
@@ -188,6 +188,12 @@
Settings.Secure.INPUT_METHOD_SELECTOR_VISIBILITY, ID_IME_BUTTON_VISIBILITY_AUTO);
}
+ public void setIconImage(int resId) {
+ if (mIcon != null) {
+ mIcon.setImageResource(resId);
+ }
+ }
+
public void setIMEButtonVisible(IBinder token, boolean keyboardVisible) {
mToken = token;
mKeyboardVisible = keyboardVisible;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
index add67b1..cc200e3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
-import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.IBinder;
import android.provider.Settings;
@@ -53,11 +52,12 @@
new HashMap<InputMethodInfo, List<InputMethodSubtype>>();
private final HashMap<View, Pair<InputMethodInfo, InputMethodSubtype>> mRadioViewAndImiMap =
new HashMap<View, Pair<InputMethodInfo, InputMethodSubtype>>();
- private final PackageManager mPackageManager;
private Context mContext;
private IBinder mToken;
+ private InputMethodButton mInputMethodSwitchButton;
private LinearLayout mInputMethodMenuList;
+ private PackageManager mPackageManager;
private String mEnabledInputMethodAndSubtypesCacheStr;
private View mConfigureImeShortcut;
@@ -69,7 +69,6 @@
super(context, attrs, defStyle);
mContext = context;
mImm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- mPackageManager = context.getPackageManager();
}
@Override
@@ -90,8 +89,17 @@
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
- if (visibility == View.VISIBLE && changedView == this) {
- updateUiElements();
+ if (changedView == this) {
+ if (visibility == View.VISIBLE) {
+ updateUiElements();
+ if (mInputMethodSwitchButton != null) {
+ mInputMethodSwitchButton.setIconImage(R.drawable.ic_sysbar_ime_pressed);
+ }
+ } else {
+ if (mInputMethodSwitchButton != null) {
+ mInputMethodSwitchButton.setIconImage(R.drawable.ic_sysbar_ime);
+ }
+ }
}
}
@@ -180,6 +188,8 @@
// TODO: Reuse subtype views.
mInputMethodMenuList.removeAllViews();
mRadioViewAndImiMap.clear();
+ mPackageManager = mContext.getPackageManager();
+
HashMap<InputMethodInfo, List<InputMethodSubtype>> enabledIMIs
= getEnabledInputMethodAndSubtypeList();
// TODO: Sort by alphabet and mode.
@@ -198,10 +208,14 @@
updateRadioButtons();
}
- public void setIMEToken(IBinder token) {
+ public void setImeToken(IBinder token) {
mToken = token;
}
+ public void setImeSwitchButton(InputMethodButton imb) {
+ mInputMethodSwitchButton = imb;
+ }
+
private void setInputMethodAndSubtype(InputMethodInfo imi, InputMethodSubtype subtype) {
if (mToken != null) {
mImm.setInputMethodAndSubtype(mToken, imi.getId(), subtype);
@@ -308,6 +322,10 @@
private CharSequence getSubtypeName(InputMethodInfo imi, InputMethodSubtype subtype) {
if (imi == null || subtype == null) return null;
+ if (DEBUG) {
+ Log.d(TAG, "Get text from: " + imi.getPackageName() + subtype.getNameResId()
+ + imi.getServiceInfo().applicationInfo);
+ }
// TODO: Change the language of subtype name according to subtype's locale.
return mPackageManager.getText(
imi.getPackageName(), subtype.getNameResId(), imi.getServiceInfo().applicationInfo);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
index e864577..a67f915 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
@@ -120,7 +120,7 @@
mAltText.setVisibility(View.VISIBLE);
if (mClipping.getItemCount() > 0) {
// TODO: figure out how to visualize every kind of ClipData!
- mAltText.setText(mClipping.getItem(0).coerceToText(getContext()));
+ mAltText.setText(mClipping.getItemAt(0).coerceToText(getContext()));
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 825877a..6db74d1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -272,6 +272,7 @@
mInputMethodsPanel.setVisibility(View.GONE);
mInputMethodsPanel.setOnTouchListener(new TouchOutsideListener(
MSG_CLOSE_INPUT_METHODS_PANEL, mInputMethodsPanel));
+ mInputMethodsPanel.setImeSwitchButton(mInputMethodSwitchButton);
mStatusBarView.setIgnoreChildren(3, mInputMethodSwitchButton, mInputMethodsPanel);
lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
@@ -853,7 +854,7 @@
if (oldVisibility != mInputMethodSwitchButton.getVisibility()) {
updateNotificationIcons();
}
- mInputMethodsPanel.setIMEToken(token);
+ mInputMethodsPanel.setImeToken(token);
mBackButton.setImageResource(
visible ? R.drawable.ic_sysbar_back_ime : R.drawable.ic_sysbar_back);
if (FAKE_SPACE_BAR) {
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
index 70a4b20..32c016d 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
@@ -114,14 +114,12 @@
lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;
lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen;
- if (mContext.getResources().getBoolean(R.bool.config_enableLockScreenRotation)) {
- Log.d(TAG, "Rotation sensor for lock screen On!");
- lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR;
- } else {
- Log.d(TAG, "Rotation sensor for lock screen Off!");
- lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
- }
-
+ // TODO: Sometimes we get the wrong value for the sensor resource we use to configure
+ // this. However, the current UI design has LockScreen always respond to orientation so
+ // we don't need this for the time-being.
+ //
+ // For reference, the configuration variable is R.bool.config_enableLockScreenRotation
+ lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR;
lp.setTitle("Keyguard");
mWindowLayoutParams = lp;
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
index c0c3afd..7809961 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
@@ -123,7 +123,7 @@
/**
* The default amount of time we stay awake (used for all key input)
*/
- protected static final int AWAKE_INTERVAL_DEFAULT_MS = 5000;
+ protected static final int AWAKE_INTERVAL_DEFAULT_MS = 10000;
/**
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 6b559cf..747242f 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -1965,23 +1965,29 @@
// behind it.
return false;
}
- if (mStatusBar != null && mStatusBar.isVisibleLw()) {
- Rect rect = new Rect(mStatusBar.getShownFrameLw());
- for (int i=mStatusBarPanels.size()-1; i>=0; i--) {
- WindowState w = mStatusBarPanels.get(i);
- if (w.isVisibleLw()) {
- rect.union(w.getShownFrameLw());
+ if (false) {
+ // Don't do this on the tablet, since the system bar never completely
+ // covers the screen, and with all its transparency this will
+ // incorrectly think it does cover it when it doesn't. We'll revisit
+ // this later when we re-do the phone status bar.
+ if (mStatusBar != null && mStatusBar.isVisibleLw()) {
+ Rect rect = new Rect(mStatusBar.getShownFrameLw());
+ for (int i=mStatusBarPanels.size()-1; i>=0; i--) {
+ WindowState w = mStatusBarPanels.get(i);
+ if (w.isVisibleLw()) {
+ rect.union(w.getShownFrameLw());
+ }
}
- }
- final int insetw = mRestrictedScreenWidth/10;
- final int inseth = mRestrictedScreenHeight/10;
- if (rect.contains(insetw, inseth, mRestrictedScreenWidth-insetw,
- mRestrictedScreenHeight-inseth)) {
- // All of the status bar windows put together cover the
- // screen, so the app can't be seen. (Note this test doesn't
- // work if the rects of these windows are at off offsets or
- // sizes, causing gaps in the rect union we have computed.)
- return false;
+ final int insetw = mRestrictedScreenWidth/10;
+ final int inseth = mRestrictedScreenHeight/10;
+ if (rect.contains(insetw, inseth, mRestrictedScreenWidth-insetw,
+ mRestrictedScreenHeight-inseth)) {
+ // All of the status bar windows put together cover the
+ // screen, so the app can't be seen. (Note this test doesn't
+ // work if the rects of these windows are at off offsets or
+ // sizes, causing gaps in the rect union we have computed.)
+ return false;
+ }
}
}
return true;
diff --git a/services/input/PointerController.cpp b/services/input/PointerController.cpp
index ebc58ee..92af51e 100644
--- a/services/input/PointerController.cpp
+++ b/services/input/PointerController.cpp
@@ -310,8 +310,16 @@
void PointerController::setPointerIcon(const SkBitmap* bitmap, float hotSpotX, float hotSpotY) {
AutoMutex _l(mLock);
- delete mLocked.iconBitmap;
- mLocked.iconBitmap = bitmap ? new SkBitmap(*bitmap) : NULL;
+ if (mLocked.iconBitmap) {
+ delete mLocked.iconBitmap;
+ mLocked.iconBitmap = NULL;
+ }
+
+ if (bitmap) {
+ mLocked.iconBitmap = new SkBitmap();
+ bitmap->copyTo(mLocked.iconBitmap, SkBitmap::kARGB_8888_Config);
+ }
+
mLocked.iconHotSpotX = hotSpotX;
mLocked.iconHotSpotY = hotSpotY;
mLocked.drawn = false;
diff --git a/services/java/com/android/server/ClipboardService.java b/services/java/com/android/server/ClipboardService.java
index bec35d1..062ab74 100644
--- a/services/java/com/android/server/ClipboardService.java
+++ b/services/java/com/android/server/ClipboardService.java
@@ -140,7 +140,7 @@
public boolean hasClipboardText() {
synchronized (this) {
if (mPrimaryClip != null) {
- CharSequence text = mPrimaryClip.getItem(0).getText();
+ CharSequence text = mPrimaryClip.getItemAt(0).getText();
return text != null && text.length() > 0;
}
return false;
@@ -175,7 +175,7 @@
private final void checkDataOwnerLocked(ClipData data, int uid) {
final int N = data.getItemCount();
for (int i=0; i<N; i++) {
- checkItemOwnerLocked(data.getItem(i), uid);
+ checkItemOwnerLocked(data.getItemAt(i), uid);
}
}
@@ -214,7 +214,7 @@
if (mPrimaryClip != null && !mActivePermissionOwners.contains(pkg)) {
final int N = mPrimaryClip.getItemCount();
for (int i=0; i<N; i++) {
- grantItemLocked(mPrimaryClip.getItem(i), pkg);
+ grantItemLocked(mPrimaryClip.getItemAt(i), pkg);
}
mActivePermissionOwners.add(pkg);
}
@@ -249,7 +249,7 @@
}
final int N = mPrimaryClip.getItemCount();
for (int i=0; i<N; i++) {
- revokeItemLocked(mPrimaryClip.getItem(i));
+ revokeItemLocked(mPrimaryClip.getItemAt(i));
}
}
}
diff --git a/services/java/com/android/server/DropBoxManagerService.java b/services/java/com/android/server/DropBoxManagerService.java
index 4305c358..5c878c9 100644
--- a/services/java/com/android/server/DropBoxManagerService.java
+++ b/services/java/com/android/server/DropBoxManagerService.java
@@ -97,10 +97,18 @@
// Ensure that all log entries have a unique timestamp
private long mLastTimestamp = 0;
+ private volatile boolean mBooted = false;
+
/** Receives events that might indicate a need to clean up files. */
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
+ if (intent != null && Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+ mBooted = true;
+ return;
+ }
+
+ // Else, for ACTION_DEVICE_STORAGE_LOW:
mCachedQuotaUptimeMillis = 0; // Force a re-check of quota size
// Run the initialization in the background (not this main thread).
@@ -132,7 +140,11 @@
// Set up intent receivers
mContext = context;
mContentResolver = context.getContentResolver();
- context.registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW));
+
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_DEVICE_STORAGE_LOW);
+ filter.addAction(Intent.ACTION_BOOT_COMPLETED);
+ context.registerReceiver(mReceiver, filter);
mContentResolver.registerContentObserver(
Settings.Secure.CONTENT_URI, true,
@@ -224,6 +236,9 @@
Intent dropboxIntent = new Intent(DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED);
dropboxIntent.putExtra(DropBoxManager.EXTRA_TAG, tag);
dropboxIntent.putExtra(DropBoxManager.EXTRA_TIME, time);
+ if (!mBooted) {
+ dropboxIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ }
mContext.sendBroadcast(dropboxIntent, android.Manifest.permission.READ_LOGS);
} catch (IOException e) {
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 7b4f246..4d40620 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -2049,8 +2049,9 @@
for (int i = 0; i < N; ++i) {
InputMethodSubtype subtype = subtypes.get(i);
final String subtypeLocale = subtype.getLocale();
- // An applicable subtype should match "mode".
- if (subtypes.get(i).getMode().equalsIgnoreCase(mode)) {
+ // An applicable subtype should match "mode". If mode is null, mode will be ignored,
+ // and all subtypes with all modes can be candidates.
+ if (mode == null || subtypes.get(i).getMode().equalsIgnoreCase(mode)) {
if (firstMatchedModeSubtype == null) {
firstMatchedModeSubtype = subtype;
}
@@ -2175,11 +2176,24 @@
InputMethodInfo imi = mMethodMap.get(lastInputMethodId);
if (imi != null) {
// If there are no selected subtypes, the framework will try to find
- // the most applicable subtype from all subtypes whose mode is
- // SUBTYPE_MODE_KEYBOARD. This is an exceptional case, so we will hardcode
- // the mode.
- mCurrentSubtype = findLastResortApplicableSubtypeLocked(
- mRes, imi.getSubtypes(), SUBTYPE_MODE_KEYBOARD, null, true);
+ // the most applicable subtype from explicitly or implicitly enabled
+ // subtypes.
+ List<InputMethodSubtype> explicitlyOrImplicitlyEnabledSubtypes =
+ getEnabledInputMethodSubtypeList(imi, true);
+ // If there is only one explicitly or implicitly enabled subtype,
+ // just returns it.
+ if (explicitlyOrImplicitlyEnabledSubtypes.size() == 1) {
+ mCurrentSubtype = explicitlyOrImplicitlyEnabledSubtypes.get(0);
+ } else if (explicitlyOrImplicitlyEnabledSubtypes.size() > 1) {
+ mCurrentSubtype = findLastResortApplicableSubtypeLocked(
+ mRes, explicitlyOrImplicitlyEnabledSubtypes,
+ SUBTYPE_MODE_KEYBOARD, null, true);
+ if (mCurrentSubtype == null) {
+ mCurrentSubtype = findLastResortApplicableSubtypeLocked(
+ mRes, explicitlyOrImplicitlyEnabledSubtypes, null, null,
+ true);
+ }
+ }
}
} else {
mCurrentSubtype =
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 1eebd6a..059c0b8 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -4407,10 +4407,19 @@
}
}
}
-
+
+ /**
+ * Check if the external storage media is available. This is true if there
+ * is a mounted external storage medium or if the external storage is
+ * emulated.
+ */
+ private boolean isExternalMediaAvailable() {
+ return mMediaMounted || Environment.isExternalStorageEmulated();
+ }
+
public String nextPackageToClean(String lastPackage) {
synchronized (mPackages) {
- if (!mMediaMounted) {
+ if (!isExternalMediaAvailable()) {
// If the external storage is no longer mounted at this point,
// the caller may not have been able to delete all of this
// packages files and can not delete any more. Bail.
@@ -4430,7 +4439,7 @@
void startCleaningPackages() {
synchronized (mPackages) {
- if (!mMediaMounted) {
+ if (!isExternalMediaAvailable()) {
return;
}
if (mSettings.mPackagesToBeCleaned.size() <= 0) {
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 1b3725c..3e930ae 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -3031,7 +3031,7 @@
}
private AttributeCache.Entry getCachedAnimations(WindowManager.LayoutParams lp) {
- if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: params package="
+ if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: layout params pkg="
+ (lp != null ? lp.packageName : null)
+ " resId=0x" + (lp != null ? Integer.toHexString(lp.windowAnimations) : null));
if (lp != null && lp.windowAnimations != 0) {
@@ -3052,7 +3052,7 @@
}
private AttributeCache.Entry getCachedAnimations(String packageName, int resId) {
- if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: params package="
+ if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: package="
+ packageName + " resId=0x" + Integer.toHexString(resId));
if (packageName != null) {
if ((resId&0xFF000000) == 0x01000000) {
@@ -9957,8 +9957,8 @@
// The top-most window will supply the layout params,
// and we will determine it below.
LayoutParams animLp = null;
- AppWindowToken animToken = null;
int bestAnimLayer = -1;
+ boolean fullscreenAnim = false;
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New wallpaper target=" + mWallpaperTarget
@@ -10000,11 +10000,18 @@
// window, we will always use its anim.
if ((ws.mAttrs.flags&FLAG_COMPATIBLE_WINDOW) != 0) {
animLp = ws.mAttrs;
- animToken = ws.mAppToken;
bestAnimLayer = Integer.MAX_VALUE;
- } else if (ws.mLayer > bestAnimLayer) {
+ } else if (!fullscreenAnim || ws.mLayer > bestAnimLayer) {
animLp = ws.mAttrs;
- animToken = ws.mAppToken;
+ bestAnimLayer = ws.mLayer;
+ }
+ fullscreenAnim = true;
+ }
+ } else if (!fullscreenAnim) {
+ WindowState ws = wtoken.findMainWindow();
+ if (ws != null) {
+ if (ws.mLayer > bestAnimLayer) {
+ animLp = ws.mAttrs;
bestAnimLayer = ws.mLayer;
}
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 2c5aa3c..19e7fae 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -152,9 +152,16 @@
private ContentObserver mAutoTimeObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
- Log.i("CdmaServiceStateTracker", "Auto time state called ...");
- revertToNitz();
+ Log.i("CdmaServiceStateTracker", "Auto time state changed");
+ revertToNitzTime();
+ }
+ };
+ private ContentObserver mAutoTimeZoneObserver = new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ Log.i("CdmaServiceStateTracker", "Auto time zone state changed");
+ revertToNitzTimeZone();
}
};
@@ -194,6 +201,9 @@
cr.registerContentObserver(
Settings.System.getUriFor(Settings.System.AUTO_TIME), true,
mAutoTimeObserver);
+ cr.registerContentObserver(
+ Settings.System.getUriFor(Settings.System.AUTO_TIME_ZONE), true,
+ mAutoTimeZoneObserver);
setSignalStrengthDefaultValues();
mNeedToRegForRuimLoaded = true;
@@ -212,6 +222,7 @@
cm.unSetOnSignalStrengthUpdate(this);
cm.unSetOnNITZTime(this);
cr.unregisterContentObserver(this.mAutoTimeObserver);
+ cr.unregisterContentObserver(this.mAutoTimeZoneObserver);
}
@Override
@@ -1582,20 +1593,29 @@
phone.getContext().sendStickyBroadcast(intent);
}
- private void revertToNitz() {
+ private void revertToNitzTime() {
if (Settings.System.getInt(cr, Settings.System.AUTO_TIME, 0) == 0) {
return;
}
- Log.d(LOG_TAG, "Reverting to NITZ: tz='" + mSavedTimeZone
- + "' mSavedTime=" + mSavedTime
+ Log.d(LOG_TAG, "Reverting to NITZ Time: mSavedTime=" + mSavedTime
+ " mSavedAtTime=" + mSavedAtTime);
- if (mSavedTimeZone != null && mSavedTime != 0 && mSavedAtTime != 0) {
- setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
+ if (mSavedTime != 0 && mSavedAtTime != 0) {
setAndBroadcastNetworkSetTime(mSavedTime
+ (SystemClock.elapsedRealtime() - mSavedAtTime));
}
}
+ private void revertToNitzTimeZone() {
+ if (Settings.System.getInt(phone.getContext().getContentResolver(),
+ Settings.System.AUTO_TIME_ZONE, 0) == 0) {
+ return;
+ }
+ Log.d(LOG_TAG, "Reverting to NITZ TimeZone: tz='" + mSavedTimeZone);
+ if (mSavedTimeZone != null) {
+ setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
+ }
+ }
+
private boolean isSidsAllZeros() {
if (mHomeSystemId != null) {
for (int i=0; i < mHomeSystemId.length; i++) {
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index b04d4b9..c107d17 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -181,7 +181,15 @@
@Override
public void onChange(boolean selfChange) {
Log.i("GsmServiceStateTracker", "Auto time state changed");
- revertToNitz();
+ revertToNitzTime();
+ }
+ };
+
+ private ContentObserver mAutoTimeZoneObserver = new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ Log.i("GsmServiceStateTracker", "Auto time zone state changed");
+ revertToNitzTimeZone();
}
};
@@ -220,6 +228,10 @@
cr.registerContentObserver(
Settings.System.getUriFor(Settings.System.AUTO_TIME), true,
mAutoTimeObserver);
+ cr.registerContentObserver(
+ Settings.System.getUriFor(Settings.System.AUTO_TIME_ZONE), true,
+ mAutoTimeZoneObserver);
+
setSignalStrengthDefaultValues();
mNeedToRegForSimLoaded = true;
@@ -244,6 +256,7 @@
cm.unSetOnRestrictedStateChanged(this);
cm.unSetOnNITZTime(this);
cr.unregisterContentObserver(this.mAutoTimeObserver);
+ cr.unregisterContentObserver(this.mAutoTimeZoneObserver);
}
protected void finalize() {
@@ -1613,21 +1626,30 @@
phone.getContext().sendStickyBroadcast(intent);
}
- private void revertToNitz() {
+ private void revertToNitzTime() {
if (Settings.System.getInt(phone.getContext().getContentResolver(),
Settings.System.AUTO_TIME, 0) == 0) {
return;
}
- Log.d(LOG_TAG, "Reverting to NITZ: tz='" + mSavedTimeZone
- + "' mSavedTime=" + mSavedTime
+ Log.d(LOG_TAG, "Reverting to NITZ Time: mSavedTime=" + mSavedTime
+ " mSavedAtTime=" + mSavedAtTime);
- if (mSavedTimeZone != null && mSavedTime != 0 && mSavedAtTime != 0) {
- setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
+ if (mSavedTime != 0 && mSavedAtTime != 0) {
setAndBroadcastNetworkSetTime(mSavedTime
+ (SystemClock.elapsedRealtime() - mSavedAtTime));
}
}
+ private void revertToNitzTimeZone() {
+ if (Settings.System.getInt(phone.getContext().getContentResolver(),
+ Settings.System.AUTO_TIME_ZONE, 0) == 0) {
+ return;
+ }
+ Log.d(LOG_TAG, "Reverting to NITZ TimeZone: tz='" + mSavedTimeZone);
+ if (mSavedTimeZone != null) {
+ setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
+ }
+ }
+
/**
* Post a notification to NotificationManager for restricted state
*
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 7099ab5..691aff28 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -166,6 +166,15 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+
+ <activity
+ android:name="BitmapsSkewActivity"
+ android:label="_BitmapsSkew">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
<activity
android:name="BitmapsAlphaActivity"
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsSkewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsSkewActivity.java
new file mode 100644
index 0000000..099c0dd
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsSkewActivity.java
@@ -0,0 +1,56 @@
+/*
+ * 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.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class BitmapsSkewActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ final BitmapsView view = new BitmapsView(this);
+ setContentView(view);
+ }
+
+ static class BitmapsView extends View {
+ private Paint mBitmapPaint;
+ private final Bitmap mBitmap1;
+
+ BitmapsView(Context c) {
+ super(c);
+
+ mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ canvas.translate(120.0f, 50.0f);
+ canvas.skew(0.2f, 0.3f);
+ canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mBitmapPaint);
+ }
+ }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java
index 1b79cb6..e7f431c 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextActivity.java
@@ -37,6 +37,7 @@
private final Paint mLargePaint;
private final Paint mStrikePaint;
private final Paint mScaledPaint;
+ private final Paint mSkewPaint;
CustomTextView(Context c) {
super(c);
@@ -57,6 +58,10 @@
mScaledPaint = new Paint();
mScaledPaint.setAntiAlias(true);
mScaledPaint.setTextSize(16.0f);
+
+ mSkewPaint = new Paint();
+ mSkewPaint.setAntiAlias(true);
+ mSkewPaint.setTextSize(16.0f);
}
@Override
@@ -100,11 +105,18 @@
mStrikePaint.setStrikeThruText(false);
mStrikePaint.setUnderlineText(true);
+ mSkewPaint.setTextSkewX(-0.25f);
+ canvas.drawText("Hello OpenGL renderer!", 680, 200, mSkewPaint);
+ mSkewPaint.setTextSkewX(0.5f);
+ canvas.drawText("Hello OpenGL renderer!", 680, 230, mSkewPaint);
+ mSkewPaint.setTextSkewX(0.0f);
+ canvas.drawText("Hello OpenGL renderer!", 680, 260, mSkewPaint);
+
mScaledPaint.setTextScaleX(0.5f);
canvas.drawText("Hello OpenGL renderer!", 500, 200, mScaledPaint);
- mScaledPaint.setTextScaleX(2.0f);
- canvas.drawText("Hello OpenGL renderer!", 500, 230, mScaledPaint);
mScaledPaint.setTextScaleX(1.0f);
+ canvas.drawText("Hello OpenGL renderer!", 500, 230, mScaledPaint);
+ mScaledPaint.setTextScaleX(2.0f);
canvas.drawText("Hello OpenGL renderer!", 500, 260, mScaledPaint);
canvas.save();
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java
index a0b1d78..e795f02 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java
@@ -38,6 +38,8 @@
setupList(R.id.list1);
setupList(R.id.list2);
setupList(R.id.list3);
+
+ findViewById(R.id.list1).setAlpha(0.7f);
}
private void setupList(int listId) {
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 166dbc3..8d194925 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -80,6 +80,7 @@
private final Object mProjectKey;
private final DisplayMetrics mMetrics;
private final RenderResources mRenderResources;
+ private final ApplicationInfo mApplicationInfo;
private final Map<Object, Map<String, String>> mDefaultPropMaps =
new IdentityHashMap<Object, Map<String,String>>();
@@ -112,10 +113,12 @@
* value is the resource value.
* @param styleInheritanceMap
* @param projectCallback
+ * @param targetSdkVersion the targetSdkVersion of the application.
*/
public BridgeContext(Object projectKey, DisplayMetrics metrics,
RenderResources renderResources,
- IProjectCallback projectCallback) {
+ IProjectCallback projectCallback,
+ int targetSdkVersion) {
mProjectKey = projectKey;
mMetrics = metrics;
mProjectCallback = projectCallback;
@@ -124,6 +127,9 @@
mFragments.mCurState = Fragment.CREATED;
mFragments.mActivity = this;
+
+ mApplicationInfo = new ApplicationInfo();
+ mApplicationInfo.targetSdkVersion = targetSdkVersion;
}
/**
@@ -836,7 +842,7 @@
@Override
public ApplicationInfo getApplicationInfo() {
- return new ApplicationInfo();
+ return mApplicationInfo;
}
@Override
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index e5951f6..63d52e9 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -67,8 +67,10 @@
import android.view.View.MeasureSpec;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
+import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabWidget;
+import android.widget.TabHost.TabSpec;
import java.awt.Color;
import java.awt.Graphics2D;
@@ -170,7 +172,7 @@
// build the context
mContext = new BridgeContext(mParams.getProjectKey(), metrics, resources,
- mParams.getProjectCallback());
+ mParams.getProjectCallback(), mParams.getTargetSdkVersion());
setUp();
@@ -918,7 +920,7 @@
/**
* Returns the top screen offset. This depends on whether the current theme defines the user
* of the title and status bars.
- * @param resolver The {@link ResourceResolver}
+ * @param resolver The {@link RenderResources}
* @param metrics The display metrics
* @return the pixel height offset
*/
@@ -1047,28 +1049,36 @@
// now process the content of the framelayout and dynamically create tabs for it.
final int count = content.getChildCount();
- if (count == 0) {
- throw new PostInflateException(
- "The FrameLayout for the TabHost has no content. Rendering failed.\n");
- }
-
// this must be called before addTab() so that the TabHost searches its TabWidget
// and FrameLayout.
tabHost.setup();
- // for each child of the framelayout, add a new TabSpec
- for (int i = 0 ; i < count ; i++) {
- View child = content.getChildAt(i);
- String tabSpec = String.format("tab_spec%d", i+1);
- int id = child.getId();
- String[] resource = projectCallback.resolveResourceValue(id);
- String name;
- if (resource != null) {
- name = resource[0]; // 0 is resource name, 1 is resource type.
- } else {
- name = String.format("Tab %d", i+1); // default name if id is unresolved.
+ if (count == 0) {
+ // Create a dummy child to get a single tab
+ TabSpec spec = tabHost.newTabSpec("tag").setIndicator("Tab Label",
+ tabHost.getResources().getDrawable(android.R.drawable.ic_menu_info_details))
+ .setContent(new TabHost.TabContentFactory() {
+ public View createTabContent(String tag) {
+ return new LinearLayout(mContext);
+ }
+ });
+ tabHost.addTab(spec);
+ return;
+ } else {
+ // for each child of the framelayout, add a new TabSpec
+ for (int i = 0 ; i < count ; i++) {
+ View child = content.getChildAt(i);
+ String tabSpec = String.format("tab_spec%d", i+1);
+ int id = child.getId();
+ String[] resource = projectCallback.resolveResourceValue(id);
+ String name;
+ if (resource != null) {
+ name = resource[0]; // 0 is resource name, 1 is resource type.
+ } else {
+ name = String.format("Tab %d", i+1); // default name if id is unresolved.
+ }
+ tabHost.addTab(tabHost.newTabSpec(tabSpec).setIndicator(name).setContent(id));
}
- tabHost.addTab(tabHost.newTabSpec(tabSpec).setIndicator(name).setContent(id));
}
}
diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java
index 3af6e78..dc66989 100644
--- a/voip/java/com/android/server/sip/SipService.java
+++ b/voip/java/com/android/server/sip/SipService.java
@@ -105,7 +105,7 @@
if (SipManager.isApiSupported(context)) {
ServiceManager.addService("sip", new SipService(context));
context.sendBroadcast(new Intent(SipManager.ACTION_SIP_SERVICE_UP));
- if (DEBUG) Log.i(TAG, "SIP service started");
+ if (DEBUG) Log.d(TAG, "SIP service started");
}
}
@@ -113,10 +113,6 @@
if (DEBUG) Log.d(TAG, " service started!");
mContext = context;
mConnectivityReceiver = new ConnectivityReceiver();
- context.registerReceiver(mConnectivityReceiver,
- new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
- context.registerReceiver(mWifiStateReceiver,
- new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
mMyWakeLock = new SipWakeLock((PowerManager)
context.getSystemService(Context.POWER_SERVICE));
@@ -124,7 +120,7 @@
mWifiOnly = SipManager.isSipWifiOnly(context);
}
- BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
+ private BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
@@ -147,6 +143,20 @@
}
};
+ private void registerReceivers() {
+ mContext.registerReceiver(mConnectivityReceiver,
+ new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
+ mContext.registerReceiver(mWifiStateReceiver,
+ new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
+ if (DEBUG) Log.d(TAG, " +++ register receivers");
+ }
+
+ private void unregisterReceivers() {
+ mContext.unregisterReceiver(mConnectivityReceiver);
+ mContext.unregisterReceiver(mWifiStateReceiver);
+ if (DEBUG) Log.d(TAG, " --- unregister receivers");
+ }
+
private MyExecutor getExecutor() {
// create mExecutor lazily
if (mExecutor == null) mExecutor = new MyExecutor();
@@ -166,12 +176,14 @@
return profiles.toArray(new SipProfile[profiles.size()]);
}
- public void open(SipProfile localProfile) {
+ public synchronized void open(SipProfile localProfile) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.USE_SIP, null);
localProfile.setCallingUid(Binder.getCallingUid());
try {
+ boolean addingFirstProfile = mSipGroups.isEmpty();
createGroup(localProfile);
+ if (addingFirstProfile && !mSipGroups.isEmpty()) registerReceivers();
} catch (SipException e) {
Log.e(TAG, "openToMakeCalls()", e);
// TODO: how to send the exception back
@@ -192,8 +204,10 @@
if (DEBUG) Log.d(TAG, "open3: " + localProfile.getUriString() + ": "
+ incomingCallPendingIntent + ": " + listener);
try {
+ boolean addingFirstProfile = mSipGroups.isEmpty();
SipSessionGroupExt group = createGroup(localProfile,
incomingCallPendingIntent, listener);
+ if (addingFirstProfile && !mSipGroups.isEmpty()) registerReceivers();
if (localProfile.getAutoRegistration()) {
group.openToReceiveCalls();
if (mWifiEnabled) grabWifiLock();
@@ -235,6 +249,7 @@
releaseWifiLock();
mMyWakeLock.reset(); // in case there's leak
}
+ if (mSipGroups.isEmpty()) unregisterReceivers();
}
public synchronized boolean isOpened(String localProfileUri) {
@@ -1055,7 +1070,10 @@
// we want to skip the interim ones) but deliver bad news
// immediately
if (connected) {
- if (mTask != null) mTask.cancel();
+ if (mTask != null) {
+ mTask.cancel();
+ mMyWakeLock.release(mTask);
+ }
mTask = new MyTimerTask(type, connected);
mTimer.schedule(mTask, 2 * 1000L);
// hold wakup lock so that we can finish changes before the
@@ -1096,6 +1114,7 @@
if (mTask != this) {
Log.w(TAG, " unexpected task: " + mNetworkType
+ (mConnected ? " CONNECTED" : "DISCONNECTED"));
+ mMyWakeLock.release(this);
return;
}
mTask = null;