diff options
-rw-r--r-- | api/current.xml | 69 | ||||
-rw-r--r-- | core/java/android/app/ApplicationContext.java | 32 | ||||
-rw-r--r-- | core/java/android/content/Context.java | 51 | ||||
-rw-r--r-- | core/java/android/content/ContextWrapper.java | 10 | ||||
-rw-r--r-- | test-runner/android/test/mock/MockContext.java | 7 | ||||
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java | 7 |
6 files changed, 174 insertions, 2 deletions
diff --git a/api/current.xml b/api/current.xml index 2f1cf7f..bd1c428 100644 --- a/api/current.xml +++ b/api/current.xml @@ -31714,6 +31714,29 @@ <parameter name="intent" type="android.content.Intent"> </parameter> </method> +<method name="sendStickyOrderedBroadcast" + return="void" + abstract="true" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="intent" type="android.content.Intent"> +</parameter> +<parameter name="resultReceiver" type="android.content.BroadcastReceiver"> +</parameter> +<parameter name="scheduler" type="android.os.Handler"> +</parameter> +<parameter name="initialCode" type="int"> +</parameter> +<parameter name="initialData" type="java.lang.String"> +</parameter> +<parameter name="initialExtras" type="android.os.Bundle"> +</parameter> +</method> <method name="setTheme" return="void" abstract="true" @@ -33050,6 +33073,29 @@ <parameter name="intent" type="android.content.Intent"> </parameter> </method> +<method name="sendStickyOrderedBroadcast" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="intent" type="android.content.Intent"> +</parameter> +<parameter name="resultReceiver" type="android.content.BroadcastReceiver"> +</parameter> +<parameter name="scheduler" type="android.os.Handler"> +</parameter> +<parameter name="initialCode" type="int"> +</parameter> +<parameter name="initialData" type="java.lang.String"> +</parameter> +<parameter name="initialExtras" type="android.os.Bundle"> +</parameter> +</method> <method name="setTheme" return="void" abstract="false" @@ -126706,6 +126752,29 @@ <parameter name="intent" type="android.content.Intent"> </parameter> </method> +<method name="sendStickyOrderedBroadcast" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="intent" type="android.content.Intent"> +</parameter> +<parameter name="resultReceiver" type="android.content.BroadcastReceiver"> +</parameter> +<parameter name="scheduler" type="android.os.Handler"> +</parameter> +<parameter name="initialCode" type="int"> +</parameter> +<parameter name="initialData" type="java.lang.String"> +</parameter> +<parameter name="initialExtras" type="android.os.Bundle"> +</parameter> +</method> <method name="setTheme" return="void" abstract="false" diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java index dc8d873..afafe64 100644 --- a/core/java/android/app/ApplicationContext.java +++ b/core/java/android/app/ApplicationContext.java @@ -659,6 +659,38 @@ class ApplicationContext extends Context { } @Override + public void sendStickyOrderedBroadcast(Intent intent, + BroadcastReceiver resultReceiver, + Handler scheduler, int initialCode, String initialData, + Bundle initialExtras) { + IIntentReceiver rd = null; + if (resultReceiver != null) { + if (mPackageInfo != null) { + if (scheduler == null) { + scheduler = mMainThread.getHandler(); + } + rd = mPackageInfo.getReceiverDispatcher( + resultReceiver, getOuterContext(), scheduler, + mMainThread.getInstrumentation(), false); + } else { + if (scheduler == null) { + scheduler = mMainThread.getHandler(); + } + rd = new ActivityThread.PackageInfo.ReceiverDispatcher( + resultReceiver, getOuterContext(), scheduler, null, false).getIIntentReceiver(); + } + } + String resolvedType = intent.resolveTypeIfNeeded(getContentResolver()); + try { + ActivityManagerNative.getDefault().broadcastIntent( + mMainThread.getApplicationThread(), intent, resolvedType, rd, + initialCode, initialData, initialExtras, null, + true, true); + } catch (RemoteException e) { + } + } + + @Override public void removeStickyBroadcast(Intent intent) { String resolvedType = intent.resolveTypeIfNeeded(getContentResolver()); if (resolvedType != null) { diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index a3c4f9a..fe4665e 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -657,8 +657,7 @@ public abstract class Context { * supplying your own BroadcastReceiver when calling, which will be * treated as a final receiver at the end of the broadcast -- its * {@link BroadcastReceiver#onReceive} method will be called with - * the result values collected from the other receivers. If you use - * an <var>resultReceiver</var> with this method, then the broadcast will + * the result values collected from the other receivers. The broadcast will * be serialized in the same way as calling * {@link #sendOrderedBroadcast(Intent, String)}. * @@ -689,6 +688,7 @@ public abstract class Context { * @see #sendBroadcast(Intent, String) * @see #sendOrderedBroadcast(Intent, String) * @see #sendStickyBroadcast(Intent) + * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) * @see android.content.BroadcastReceiver * @see #registerReceiver * @see android.app.Activity#RESULT_OK @@ -715,8 +715,55 @@ public abstract class Context { * be re-broadcast to future receivers. * * @see #sendBroadcast(Intent) + * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) */ public abstract void sendStickyBroadcast(Intent intent); + + /** + * Version of {@link #sendStickyBroadcast} that allows you to + * receive data back from the broadcast. This is accomplished by + * supplying your own BroadcastReceiver when calling, which will be + * treated as a final receiver at the end of the broadcast -- its + * {@link BroadcastReceiver#onReceive} method will be called with + * the result values collected from the other receivers. The broadcast will + * be serialized in the same way as calling + * {@link #sendOrderedBroadcast(Intent, String)}. + * + * <p>Like {@link #sendBroadcast(Intent)}, this method is + * asynchronous; it will return before + * resultReceiver.onReceive() is called. Note that the sticky data + * stored is only the data you initially supply to the broadcast, not + * the result of any changes made by the receivers. + * + * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. + * + * @param intent The Intent to broadcast; all receivers matching this + * Intent will receive the broadcast. + * @param resultReceiver Your own BroadcastReceiver to treat as the final + * receiver of the broadcast. + * @param scheduler A custom Handler with which to schedule the + * resultReceiver callback; if null it will be + * scheduled in the Context's main thread. + * @param initialCode An initial value for the result code. Often + * Activity.RESULT_OK. + * @param initialData An initial value for the result data. Often + * null. + * @param initialExtras An initial value for the result extras. Often + * null. + * + * @see #sendBroadcast(Intent) + * @see #sendBroadcast(Intent, String) + * @see #sendOrderedBroadcast(Intent, String) + * @see #sendStickyBroadcast(Intent) + * @see android.content.BroadcastReceiver + * @see #registerReceiver + * @see android.app.Activity#RESULT_OK + */ + public abstract void sendStickyOrderedBroadcast(Intent intent, + BroadcastReceiver resultReceiver, + Handler scheduler, int initialCode, String initialData, + Bundle initialExtras); + /** * Remove the data previously sent with {@link #sendStickyBroadcast}, diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index d580c47..1b34320 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -288,6 +288,16 @@ public class ContextWrapper extends Context { } @Override + public void sendStickyOrderedBroadcast( + Intent intent, BroadcastReceiver resultReceiver, + Handler scheduler, int initialCode, String initialData, + Bundle initialExtras) { + mBase.sendStickyOrderedBroadcast(intent, + resultReceiver, scheduler, initialCode, + initialData, initialExtras); + } + + @Override public void removeStickyBroadcast(Intent intent) { mBase.removeStickyBroadcast(intent); } diff --git a/test-runner/android/test/mock/MockContext.java b/test-runner/android/test/mock/MockContext.java index 5368526..57b22f8 100644 --- a/test-runner/android/test/mock/MockContext.java +++ b/test-runner/android/test/mock/MockContext.java @@ -264,6 +264,13 @@ public class MockContext extends Context { } @Override + public void sendStickyOrderedBroadcast(Intent intent, + BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, + Bundle initialExtras) { + throw new UnsupportedOperationException(); + } + + @Override public void removeStickyBroadcast(Intent intent) { throw new UnsupportedOperationException(); } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java index 4e7e925..1e9f573 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java @@ -1099,6 +1099,13 @@ public final class BridgeContext extends Context { } @Override + public void sendStickyOrderedBroadcast(Intent intent, + BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, + Bundle initialExtras) { + // TODO Auto-generated method stub + } + + @Override public void setTheme(int arg0) { // TODO Auto-generated method stub |