• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app;
18 
19 import android.annotation.SystemApi;
20 import android.os.Build;
21 import android.os.Bundle;
22 
23 /**
24  * Helper class for building an options Bundle that can be used with
25  * {@link android.content.Context#sendBroadcast(android.content.Intent)
26  * Context.sendBroadcast(Intent)} and related methods.
27  * {@hide}
28  */
29 @SystemApi
30 public class BroadcastOptions {
31     private long mTemporaryAppWhitelistDuration;
32     private int mMinManifestReceiverApiLevel = 0;
33     private int mMaxManifestReceiverApiLevel = Build.VERSION_CODES.CUR_DEVELOPMENT;
34 
35     /**
36      * How long to temporarily put an app on the power whitelist when executing this broadcast
37      * to it.
38      */
39     static final String KEY_TEMPORARY_APP_WHITELIST_DURATION
40             = "android:broadcast.temporaryAppWhitelistDuration";
41 
42     /**
43      * Corresponds to {@link #setMinManifestReceiverApiLevel}.
44      */
45     static final String KEY_MIN_MANIFEST_RECEIVER_API_LEVEL
46             = "android:broadcast.minManifestReceiverApiLevel";
47 
48     /**
49      * Corresponds to {@link #setMaxManifestReceiverApiLevel}.
50      */
51     static final String KEY_MAX_MANIFEST_RECEIVER_API_LEVEL
52             = "android:broadcast.maxManifestReceiverApiLevel";
53 
makeBasic()54     public static BroadcastOptions makeBasic() {
55         BroadcastOptions opts = new BroadcastOptions();
56         return opts;
57     }
58 
BroadcastOptions()59     private BroadcastOptions() {
60     }
61 
62     /** @hide */
BroadcastOptions(Bundle opts)63     public BroadcastOptions(Bundle opts) {
64         mTemporaryAppWhitelistDuration = opts.getLong(KEY_TEMPORARY_APP_WHITELIST_DURATION);
65         mMinManifestReceiverApiLevel = opts.getInt(KEY_MIN_MANIFEST_RECEIVER_API_LEVEL, 0);
66         mMaxManifestReceiverApiLevel = opts.getInt(KEY_MAX_MANIFEST_RECEIVER_API_LEVEL,
67                 Build.VERSION_CODES.CUR_DEVELOPMENT);
68     }
69 
70     /**
71      * Set a duration for which the system should temporary place an application on the
72      * power whitelist when this broadcast is being delivered to it.
73      * @param duration The duration in milliseconds; 0 means to not place on whitelist.
74      */
setTemporaryAppWhitelistDuration(long duration)75     public void setTemporaryAppWhitelistDuration(long duration) {
76         mTemporaryAppWhitelistDuration = duration;
77     }
78 
79     /**
80      * Return {@link #setTemporaryAppWhitelistDuration}.
81      * @hide
82      */
getTemporaryAppWhitelistDuration()83     public long getTemporaryAppWhitelistDuration() {
84         return mTemporaryAppWhitelistDuration;
85     }
86 
87     /**
88      * Set the minimum target API level of receivers of the broadcast.  If an application
89      * is targeting an API level less than this, the broadcast will not be delivered to
90      * them.  This only applies to receivers declared in the app's AndroidManifest.xml.
91      * @hide
92      */
setMinManifestReceiverApiLevel(int apiLevel)93     public void setMinManifestReceiverApiLevel(int apiLevel) {
94         mMinManifestReceiverApiLevel = apiLevel;
95     }
96 
97     /**
98      * Return {@link #setMinManifestReceiverApiLevel}.
99      * @hide
100      */
getMinManifestReceiverApiLevel()101     public int getMinManifestReceiverApiLevel() {
102         return mMinManifestReceiverApiLevel;
103     }
104 
105     /**
106      * Set the maximum target API level of receivers of the broadcast.  If an application
107      * is targeting an API level greater than this, the broadcast will not be delivered to
108      * them.  This only applies to receivers declared in the app's AndroidManifest.xml.
109      * @hide
110      */
setMaxManifestReceiverApiLevel(int apiLevel)111     public void setMaxManifestReceiverApiLevel(int apiLevel) {
112         mMaxManifestReceiverApiLevel = apiLevel;
113     }
114 
115     /**
116      * Return {@link #setMaxManifestReceiverApiLevel}.
117      * @hide
118      */
getMaxManifestReceiverApiLevel()119     public int getMaxManifestReceiverApiLevel() {
120         return mMaxManifestReceiverApiLevel;
121     }
122 
123     /**
124      * Returns the created options as a Bundle, which can be passed to
125      * {@link android.content.Context#sendBroadcast(android.content.Intent)
126      * Context.sendBroadcast(Intent)} and related methods.
127      * Note that the returned Bundle is still owned by the BroadcastOptions
128      * object; you must not modify it, but can supply it to the sendBroadcast
129      * methods that take an options Bundle.
130      */
toBundle()131     public Bundle toBundle() {
132         Bundle b = new Bundle();
133         if (mTemporaryAppWhitelistDuration > 0) {
134             b.putLong(KEY_TEMPORARY_APP_WHITELIST_DURATION, mTemporaryAppWhitelistDuration);
135         }
136         if (mMinManifestReceiverApiLevel != 0) {
137             b.putInt(KEY_MIN_MANIFEST_RECEIVER_API_LEVEL, mMinManifestReceiverApiLevel);
138         }
139         if (mMaxManifestReceiverApiLevel != Build.VERSION_CODES.CUR_DEVELOPMENT) {
140             b.putInt(KEY_MAX_MANIFEST_RECEIVER_API_LEVEL, mMaxManifestReceiverApiLevel);
141         }
142         return b.isEmpty() ? null : b;
143     }
144 }
145