diff options
-rw-r--r-- | api/current.xml | 62 | ||||
-rw-r--r-- | core/java/android/app/ActivityThread.java | 2 | ||||
-rw-r--r-- | core/java/android/os/StrictMode.java | 44 |
3 files changed, 81 insertions, 27 deletions
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 @@ public final class ActivityThread { (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 @@ public final class StrictMode { * * @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 @@ public final class StrictMode { * * @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 & + * 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 @@ public final class StrictMode { 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 @@ public final class StrictMode { Log.e(TAG, "RemoteException trying to handle StrictMode violation", e); } finally { // Restore the policy. - setThreadBlockingPolicy(savedPolicy); + setThreadPolicy(savedPolicy); } } @@ -487,7 +519,7 @@ public final class StrictMode { 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(); |