Merge "Fix for an NPE in TextView." into gingerbread
diff --git a/api/current.xml b/api/current.xml
index bd87087..38756d3 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -129270,7 +129270,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<method name="getThreadBlockingPolicy"
+<method name="allowThreadDiskReads"
  return="int"
  abstract="false"
  native="false"
@@ -129281,7 +129281,29 @@
  visibility="public"
 >
 </method>
-<method name="setThreadBlockingPolicy"
+<method name="allowThreadDiskWrites"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getThreadPolicy"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setThreadPolicy"
  return="void"
  abstract="false"
  native="false"
@@ -258023,7 +258045,7 @@
 >
 <parameter name="numBits" type="int">
 </parameter>
-<parameter name="rnd" type="java.util.Random">
+<parameter name="random" type="java.util.Random">
 </parameter>
 </constructor>
 <constructor name="BigInteger"
@@ -258037,7 +258059,7 @@
 </parameter>
 <parameter name="certainty" type="int">
 </parameter>
-<parameter name="rnd" type="java.util.Random">
+<parameter name="unused" type="java.util.Random">
 </parameter>
 </constructor>
 <constructor name="BigInteger"
@@ -258047,7 +258069,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.lang.String">
+<parameter name="value" type="java.lang.String">
 </parameter>
 </constructor>
 <constructor name="BigInteger"
@@ -258057,7 +258079,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.lang.String">
+<parameter name="value" type="java.lang.String">
 </parameter>
 <parameter name="radix" type="int">
 </parameter>
@@ -258081,7 +258103,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="byte[]">
+<parameter name="value" type="byte[]">
 </parameter>
 </constructor>
 <method name="abs"
@@ -258105,7 +258127,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="and"
@@ -258118,7 +258140,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="andNot"
@@ -258131,7 +258153,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="bitCount"
@@ -258179,7 +258201,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="divide"
@@ -258253,7 +258275,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="getLowestSetBit"
@@ -258312,7 +258334,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="min"
@@ -258325,7 +258347,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="mod"
@@ -258379,7 +258401,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="negate"
@@ -258425,7 +258447,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="pow"
@@ -258453,7 +258475,7 @@
 >
 <parameter name="bitLength" type="int">
 </parameter>
-<parameter name="rnd" type="java.util.Random">
+<parameter name="unused" type="java.util.Random">
 </parameter>
 </method>
 <method name="remainder"
@@ -258529,7 +258551,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <method name="testBit"
@@ -258579,7 +258601,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="long">
+<parameter name="value" type="long">
 </parameter>
 </method>
 <method name="xor"
@@ -258592,7 +258614,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
 </parameter>
 </method>
 <field name="ONE"
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index c96d562..c07e3d3 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3106,7 +3106,7 @@
              (ApplicationInfo.FLAG_SYSTEM |
               ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0 &&
             !"user".equals(Build.TYPE)) {
-            StrictMode.setThreadBlockingPolicy(
+            StrictMode.setThreadPolicy(
                 StrictMode.DISALLOW_DISK_WRITE |
                 StrictMode.DISALLOW_DISK_READ |
                 StrictMode.DISALLOW_NETWORK |
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index ac12e10..7f7b02b 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -114,7 +114,7 @@
      *
      * @param policyMask a bitmask of DISALLOW_* and PENALTY_* values.
      */
-    public static void setThreadBlockingPolicy(final int policyMask) {
+    public static void setThreadPolicy(final int policyMask) {
         // In addition to the Java-level thread-local in Dalvik's
         // BlockGuard, we also need to keep a native thread-local in
         // Binder in order to propagate the value across Binder calls,
@@ -164,11 +164,43 @@
      *
      * @return the bitmask of all the DISALLOW_* and PENALTY_* bits currently enabled
      */
-    public static int getThreadBlockingPolicy() {
+    public static int getThreadPolicy() {
         return BlockGuard.getThreadPolicy().getPolicyMask();
     }
 
     /**
+     * Updates the current thread's policy mask to allow reading &amp;
+     * writing to disk.
+     *
+     * @return the old policy mask, to be passed to setThreadPolicy to
+     *         restore the policy.
+     */
+    public static int allowThreadDiskWrites() {
+        int oldPolicy = getThreadPolicy();
+        int newPolicy = oldPolicy & ~(DISALLOW_DISK_WRITE | DISALLOW_DISK_READ);
+        if (newPolicy != oldPolicy) {
+            setThreadPolicy(newPolicy);
+        }
+        return oldPolicy;
+    }
+
+    /**
+     * Updates the current thread's policy mask to allow reading from
+     * disk.
+     *
+     * @return the old policy mask, to be passed to setThreadPolicy to
+     *         restore the policy.
+     */
+    public static int allowThreadDiskReads() {
+        int oldPolicy = getThreadPolicy();
+        int newPolicy = oldPolicy & ~(DISALLOW_DISK_READ);
+        if (newPolicy != oldPolicy) {
+            setThreadPolicy(newPolicy);
+        }
+        return oldPolicy;
+    }
+
+    /**
      * Parses the BlockGuard policy mask out from the Exception's
      * getMessage() String value.  Kinda gross, but least
      * invasive.  :/
@@ -413,13 +445,13 @@
             if (violationMaskSubset != 0) {
                 int violationBit = parseViolationFromMessage(info.crashInfo.exceptionMessage);
                 violationMaskSubset |= violationBit;
-                final int savedPolicy = getThreadBlockingPolicy();
+                final int savedPolicy = getThreadPolicy();
                 try {
                     // First, remove any policy before we call into the Activity Manager,
                     // otherwise we'll infinite recurse as we try to log policy violations
                     // to disk, thus violating policy, thus requiring logging, etc...
                     // We restore the current policy below, in the finally block.
-                    setThreadBlockingPolicy(0);
+                    setThreadPolicy(0);
 
                     ActivityManagerNative.getDefault().handleApplicationStrictModeViolation(
                         RuntimeInit.getApplicationObject(),
@@ -429,7 +461,7 @@
                     Log.e(TAG, "RemoteException trying to handle StrictMode violation", e);
                 } finally {
                     // Restore the policy.
-                    setThreadBlockingPolicy(savedPolicy);
+                    setThreadPolicy(savedPolicy);
                 }
             }
 
@@ -487,7 +519,7 @@
         new LogStackTrace().printStackTrace(new PrintWriter(sw));
         String ourStack = sw.toString();
 
-        int policyMask = getThreadBlockingPolicy();
+        int policyMask = getThreadPolicy();
         boolean currentlyGathering = (policyMask & PENALTY_GATHER) != 0;
 
         int numViolations = p.readInt();
diff --git a/core/java/android/pim/vcard/VCardEntry.java b/core/java/android/pim/vcard/VCardEntry.java
index 7c7e9b8..97d3fbc 100644
--- a/core/java/android/pim/vcard/VCardEntry.java
+++ b/core/java/android/pim/vcard/VCardEntry.java
@@ -954,7 +954,7 @@
                 }
             }
             if (type < 0) {
-                type = Phone.TYPE_HOME;
+                type = Im.TYPE_HOME;
             }
             addIm(protocol, null, type, propValue, isPrimary);
         } else if (propName.equals(VCardConstants.PROPERTY_NOTE)) {
@@ -1195,12 +1195,14 @@
                 builder.withValue(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
                 builder.withValue(Im.TYPE, imData.type);
                 builder.withValue(Im.PROTOCOL, imData.protocol);
+                builder.withValue(Im.DATA, imData.data);
                 if (imData.protocol == Im.PROTOCOL_CUSTOM) {
                     builder.withValue(Im.CUSTOM_PROTOCOL, imData.customProtocol);
                 }
                 if (imData.isPrimary) {
                     builder.withValue(Data.IS_PRIMARY, 1);
                 }
+                operationList.add(builder.build());
             }
         }
 
diff --git a/core/tests/coretests/src/android/pim/vcard/VCardTestsBase.java b/core/tests/coretests/src/android/pim/vcard/VCardTestsBase.java
index 0857e0c..416e872 100644
--- a/core/tests/coretests/src/android/pim/vcard/VCardTestsBase.java
+++ b/core/tests/coretests/src/android/pim/vcard/VCardTestsBase.java
@@ -110,7 +110,7 @@
  * BaseClass for vCard unit tests with utility classes.
  * Please do not add each unit test here.
  */
-/* package */ class VCardTestsBase extends AndroidTestCase {
+public class VCardTestsBase extends AndroidTestCase {
     public static final int V21 = VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8;
     public static final int V30 = VCardConfig.VCARD_TYPE_V30_GENERIC_UTF8;
 
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 041c13b..c751f3d 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -889,7 +889,6 @@
         }
 
         Intent intent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
         intent.putExtra(ConnectivityManager.EXTRA_NETWORK_INFO, info);
         if (info.isFailover()) {
             intent.putExtra(ConnectivityManager.EXTRA_IS_FAILOVER, true);
@@ -1005,7 +1004,6 @@
 
     private void sendConnectedBroadcast(NetworkInfo info) {
         Intent intent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
         intent.putExtra(ConnectivityManager.EXTRA_NETWORK_INFO, info);
         if (info.isFailover()) {
             intent.putExtra(ConnectivityManager.EXTRA_IS_FAILOVER, true);
@@ -1043,7 +1041,6 @@
         }
 
         Intent intent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
         intent.putExtra(ConnectivityManager.EXTRA_NETWORK_INFO, info);
         if (getActiveNetworkInfo() == null) {
             intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true);