19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
195c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackbornimport android.content.pm.ApplicationInfo;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.PackageManager;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.AssetManager;
22756220bd1912535840388a6743830d2e59ad4964Dianne Hackbornimport android.content.res.Configuration;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray;
2574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Noriimport android.database.DatabaseErrorHandler;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase.CursorFactory;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable;
30ac695c608ba620e2362f57126d7be453cf5b7e1bAdam Powellimport android.media.MediaScannerConnection.OnScanCompletedListener;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper;
3579af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackbornimport android.os.UserHandle;
368c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkeyimport android.os.UserManager;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
3898365d7663cbd82979a5700faf0050220b01084dJeff Brownimport android.view.CompatibilityInfoHolder;
39a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.Display;
40a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.WindowManager;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileInputStream;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileNotFoundException;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileOutputStream;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface to global information about an application environment.  This is
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an abstract class whose implementation is provided by
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Android system.  It
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allows access to application-specific resources and classes, as well as
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * up-calls for application-level operations such as launching activities,
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcasting and receiving intents, etc.
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Context {
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: the default mode, where the created file can only
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be accessed by the calling application (or all applications sharing the
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * same user ID).
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_PRIVATE = 0x0000;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
67556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * @deprecated Creating world-readable files is very dangerous, and likely
68556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * to cause security holes in applications.  It is strongly discouraged;
69556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * instead, applications should use more formal mechanism for interactions
70556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
71556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * {@link android.app.Service}.  There are no guarantees that this
72556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * access mode will remain on a file, such as when it goes through a
73556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * backup and restore.
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have read access
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
79556b09e184b891d9542092962ed248616810e054Dianne Hackborn    @Deprecated
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_READABLE = 0x0001;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
82556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * @deprecated Creating world-writable files is very dangerous, and likely
83556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * to cause security holes in applications.  It is strongly discouraged;
84556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * instead, applications should use more formal mechanism for interactions
85556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
86556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * {@link android.app.Service}.  There are no guarantees that this
87556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * access mode will remain on a file, such as when it goes through a
88556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * backup and restore.
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have write access
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
94556b09e184b891d9542092962ed248616810e054Dianne Hackborn    @Deprecated
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_WRITEABLE = 0x0002;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: for use with {@link #openFileOutput}, if the file
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * already exists then write data to the end of the existing file
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instead of erasing it.
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_APPEND = 0x8000;
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1054e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * SharedPreference loading flag: when set, the file on disk will
1064e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * be checked for modification even if the shared preferences
1074e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * instance is already loaded in this process.  This behavior is
1084e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * sometimes desired in cases where the application has multiple
1094e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, all writing to the same SharedPreferences file.
1104e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * Generally there are better forms of communication between
1114e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, though.
1124e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
1134e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * <p>This was the legacy (but undocumented) behavior in and
1144e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * before Gingerbread (Android 2.3) and this flag is implied when
1154e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * targetting such releases.  For applications targetting SDK
1164e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * versions <em>greater than</em> Android 2.3, this flag must be
1174e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * explicitly set if desired.
1184e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
1194e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #getSharedPreferences
1204e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     */
1214e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    public static final int MODE_MULTI_PROCESS = 0x0004;
1224e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick
1234e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    /**
12447847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * Database open flag: when set, the database is opened with write-ahead
12547847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * logging enabled by default.
12647847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *
12747847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #openOrCreateDatabase(String, int, CursorFactory)
12847847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #openOrCreateDatabase(String, int, CursorFactory, DatabaseErrorHandler)
12947847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see SQLiteDatabase#enableWriteAheadLogging
13047847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     */
13147847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown    public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008;
13247847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown
13347847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown    /**
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: automatically create the service as long
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as the binding exists.  Note that while this will create the service,
1364b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * its {@link android.app.Service#onStartCommand}
1374b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * method will still only be called due to an
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * explicit call to {@link #startService}.  Even without that, though,
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this still provides you with access to the service object while the
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service is created.
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
142c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * <p>Note that prior to {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH},
143c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * not supplying this flag would also impact how important the system
144c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * consider's the target service's process to be.  When set, the only way
145c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * for it to be raised was by binding from a service in which case it will
146c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * only be important when that activity is in the foreground.  Now to
147c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * achieve this behavior you must explicitly supply the new flag
148c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * {@link #BIND_ADJUST_WITH_ACTIVITY}.  For compatibility, old applications
149c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * that don't specify {@link #BIND_AUTO_CREATE} will automatically have
150c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the flags {@link #BIND_WAIVE_PRIORITY} and
151c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * {@link #BIND_ADJUST_WITH_ACTIVITY} set for them in order to achieve
152c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the same result.
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_AUTO_CREATE = 0x0001;
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: include debugging help for mismatched
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls to unbind.  When this flag is set, the callstack of the following
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #unbindService} call is retained, to be printed if a later
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * incorrect unbind call is made.  Note that doing this requires retaining
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information about the binding that was made for the lifetime of the app,
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resulting in a leak -- this should only be used for debugging.
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_DEBUG_UNBIND = 0x0002;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16609c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    /**
16709c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * Flag for {@link #bindService}: don't allow this binding to raise
16809c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * the target service's process to the foreground scheduling priority.
169130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * It will still be raised to at least the same memory priority
17009c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * as the client (so that its process will not be killable in any
17109c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * situation where the client is not killable), but for CPU scheduling
17209c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * purposes it may be left in the background.  This only has an impact
17309c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * in the situation where the binding client is a foreground process
17409c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * and the target service is in a background process.
17509c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     */
17609c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    public static final int BIND_NOT_FOREGROUND = 0x0004;
17709c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn
178130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn    /**
179c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: indicates that the client application
180c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * binding to this service considers the service to be more important than
181c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the app itself.  When set, the platform will try to have the out of
182b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * memory killer kill the app before it kills the service it is bound to, though
183c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * this is not guaranteed to be the case.
184c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
185c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_ABOVE_CLIENT = 0x0008;
186c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
187c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
188130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * Flag for {@link #bindService}: allow the process hosting the bound
189130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * service to go through its normal memory management.  It will be
190130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * treated more like a running service, allowing the system to
191130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * (temporarily) expunge the process if low on memory or for some other
192c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * whim it may have, and being more aggressive about making it a candidate
193c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * to be killed (and restarted) if running for a long time.
194c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
195c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010;
196c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
197c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
198c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: don't impact the scheduling or
199c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * memory management priority of the target service's hosting process.
200c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Allows the service's process to be managed on the background LRU list
201c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * just like a regular application process in the background.
202c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
203c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_WAIVE_PRIORITY = 0x0020;
204c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
205c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
206c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: this service is very important to
207c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the client, so should be brought to the foreground process level
208c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * when the client is.  Normally a process can only be raised to the
209c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * visibility level by a client, even if that client is in the foreground.
210c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
211c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_IMPORTANT = 0x0040;
212c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
213c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
214c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: If binding from an activity, allow the
215c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * target service's process importance to be raised based on whether the
216c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * activity is visible to the user, regardless whether another flag is
217c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * used to reduce the amount that the client process's overall importance
218c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * is used to impact it.
219130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     */
2202c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080;
2212c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn
2222c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    /**
223b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * @hide An idea that is not yet implemented.
224b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * Flag for {@link #bindService}: If binding from an activity, consider
225b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * this service to be visible like the binding activity is.  That is,
226b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * it will be treated as something more important to keep around than
227b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * invisible background activities.  This will impact the number of
228b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * recent activities the user can switch between without having them
229b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * restart.  There is no guarantee this will be respected, as the system
230b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * tries to balance such requests from one app vs. the importantance of
231b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * keeping other apps around.
232b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     */
233b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn    public static final int BIND_VISIBLE = 0x0100;
234b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn
235b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn    /**
2362c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * Flag for {@link #bindService}: Don't consider the bound service to be
2372c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * visible, even if the caller is visible.
2382c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * @hide
2392c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     */
2402c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    public static final int BIND_NOT_VISIBLE = 0x40000000;
241130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return an AssetManager instance for your application's package. */
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract AssetManager getAssets();
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a Resources instance for your application's package. */
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources getResources();
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return PackageManager instance to find global package information. */
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract PackageManager getPackageManager();
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a ContentResolver instance for your application's package. */
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ContentResolver getContentResolver();
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Looper for the main thread of the current process.  This is
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the thread used to dispatch calls to application components (activities,
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * services, etc).
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Looper getMainLooper();
2604b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the context of the single, global Application object of the
263e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * current process.  This generally should only be used if you need a
264e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Context whose lifecycle is separate from the current context, that is
265e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * tied to the lifetime of the process rather than the current component.
2664b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
267e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Consider for example how this interacts with
26836af79434fb62c26238132eaeda2ec5e732f3c2fBrad Fitzpatrick     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)}:
269e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
270e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from an Activity context, the receiver is being registered
271e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * within that activity.  This means that you are expected to unregister
272e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * before the activity is done being destroyed; in fact if you do not do
273e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * so, the framework will clean up your leaked registration as it removes
274e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the activity and log an error.  Thus, if you use the Activity context
275e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * to register a receiver that is static (global to the process, not
276e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * associated with an Activity instance) then that registration will be
277e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * removed on you at whatever point the activity you used is destroyed.
278e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from the Context returned here, the receiver is being
279e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * registered with the global state associated with your application.  Thus
280e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * it will never be unregistered for you.  This is necessary if the receiver
281e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * is associated with static data, not a particular component.  However
282e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * using the ApplicationContext elsewhere can easily lead to serious leaks
283e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * if you forget to unregister, unbind, etc.
284e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context getApplicationContext();
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
289c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Add a new {@link ComponentCallbacks} to the base application of the
290c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Context, which will be called at the same times as the ComponentCallbacks
291c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * methods of activities and other components are called.  Note that you
292c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * <em>must</em> be sure to use {@link #unregisterComponentCallbacks} when
293c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * appropriate in the future; this will not be removed for you.
294905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     *
295905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     * @param callback The interface to call.  This can be either a
296905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
297c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
298c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public void registerComponentCallbacks(ComponentCallbacks callback) {
299c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn        getApplicationContext().registerComponentCallbacks(callback);
300c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    }
301c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
302c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
303c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Remove a {@link ComponentCallbacks} objec that was previously registered
304c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * with {@link #registerComponentCallbacks(ComponentCallbacks)}.
305c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
306c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public void unregisterComponentCallbacks(ComponentCallbacks callback) {
307c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn        getApplicationContext().unregisterComponentCallbacks(callback);
308c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    }
309c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
310c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized, styled CharSequence from the application's package's
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the CharSequence text
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final CharSequence getText(int resId) {
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getText(resId);
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized string from the application's package's
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the string
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId) {
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId);
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized formatted string from the application's package's
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table, substituting the format arguments as defined in
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link java.util.Formatter} and {@link java.lang.String#format}.
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the format string
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param formatArgs The format arguments that will be used for substitution.
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId, Object... formatArgs) {
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId, formatArgs);
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the base theme for this context.  Note that this should be called
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * before any views are instantiated in the Context (for example before
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calling {@link android.app.Activity#setContentView} or
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater#inflate}).
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resid The style resource describing the theme.
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setTheme(int resid);
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
353247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    /** @hide Needed for some internal implementation...  not public because
354247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn     * you can't assume this actually means anything. */
355247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    public int getThemeResId() {
356247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn        return 0;
357247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    }
358247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Theme object associated with this Context.
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources.Theme getTheme();
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int[])}
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int[])
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] attrs) {
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(attrs);
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int, int[])
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int resid, int[] attrs) throws Resources.NotFoundException {
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(resid, attrs);
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs) {
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            set, attrs, defStyleAttr, defStyleRes);
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a class loader you can use to retrieve classes in this package.
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ClassLoader getClassLoader();
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return the name of this application's package. */
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageName();
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4215c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    /** Return the full application info for this context's package. */
4225c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    public abstract ApplicationInfo getApplicationInfo();
4234b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4253214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
4263214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains the application's
4273214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary resources.
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the resources.
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageResourcePath();
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4373214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
4383214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains application's
4393214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary code and assets.
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the code and assets.
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageCodePath();
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
44923ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * {@hide}
45023ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * Return the full path to the shared prefs file for the given prefs group name.
45123ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     *
45223ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * <p>Note: this is not generally useful for applications, since they should
45323ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * not be directly accessing the file system.
45423ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     */
45523ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    public abstract File getSharedPrefsFile(String name);
45623ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato
45723ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    /**
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve and hold the contents of the preferences file 'name', returning
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a SharedPreferences through which you can retrieve and modify its
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values.  Only one instance of the SharedPreferences object is returned
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to any callers for the same name, meaning they will see each other's
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * edits as soon as they are made.
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Desired preferences file. If a preferences file by this name
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * does not exist, it will be created when you retrieve an
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE}
4694e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * and {@link #MODE_WORLD_WRITEABLE} to control permissions.  The bit
4704e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * {@link #MODE_MULTI_PROCESS} can also be used if multiple processes
4714e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * are mutating the same SharedPreferences file.  {@link #MODE_MULTI_PROCESS}
4724e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * is always on in apps targetting Gingerbread (Android 2.3) and below, and
4734e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * off by default in later versions.
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the single SharedPreferences instance that can be used
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         to retrieve and modify the preference values.
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
4814e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #MODE_MULTI_PROCESS
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SharedPreferences getSharedPreferences(String name,
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode);
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for reading.
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileInputStream Resulting input stream.
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileInputStream#FileInputStream(String)
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileInputStream openFileInput(String name)
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for writing.  Creates the file if it doesn't already exist.
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_APPEND} to append to an existing file,
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions.
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileOutputStream Resulting output stream.
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_APPEND
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileOutputStream#FileOutputStream(String)
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileOutputStream openFileOutput(String name, int mode)
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete the given private file associated with this Context's
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to delete; can not contain path
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the file was successfully deleted; else
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false.
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.File#delete()
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteFile(String name);
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a file created with
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openFileOutput} is stored.
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file for which you would like to get
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given file.
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFilesDir
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFileStreamPath(String name);
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path to the directory on the filesystem where
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * files created with {@link #openFileOutput} are stored.
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application files.
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFilesDir();
5714b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
573e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
574e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
575acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * Environment.getExternalStorageDirectory()}) where the application can
576e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place persistent files it owns.  These files are private to the
577e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * applications, and not typically visible to the user as media.
5784b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
579e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getFilesDir()} in that these
580e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
581e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
5824b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
583e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
584e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
585e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
586e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
587e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
588e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
589e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
5904b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
5918c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>On devices with multiple users (as described by {@link UserManager}),
5928c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * each user has their own isolated external storage. Applications only
5938c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * have access to the external storage for the user they're running as.</p>
5948c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
595e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a file in
596e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage:</p>
5974b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
598e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
599e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_file}
600e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
601acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * <p>If you supply a non-null <var>type</var> to this function, the returned
602e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * file will be a path to a sub-directory of the given type.  Though these files
603e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are not automatically scanned by the media scanner, you can explicitly
604e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * add them to the media database with
605e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[],
606b7c8c76180dc1abbf55c734ab121a7a2469060f6Ray Chen     *      OnScanCompletedListener) MediaScannerConnection.scanFile}.
607e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Note that this is not the same as
608e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
609e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, which provides
610e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories of media shared by all applications.  The
611e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories returned here are
612acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * owned by the application, and their contents will be removed when the
613e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * application is uninstalled.  Unlike
614e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
615e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, the directory
616e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * returned here will be automatically created for you.
6174b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
618e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a picture in
619e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage and add it to the media database:</p>
6204b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
621e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
622e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_picture}
6234b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
6248c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>Writing to this path requires the
6258c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission.</p>
6268c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
627e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @param type The type of files directory to return.  May be null for
628e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the root of the files directory or one of
629e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the following Environment constants for a subdirectory:
630e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MUSIC},
631e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PODCASTS},
632e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_RINGTONES},
633e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_ALARMS},
634e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
635e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PICTURES}, or
636e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MOVIES}.
6374b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
638e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application files
639e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
640e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
641e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
642e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
643e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getFilesDir
644acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * @see android.os.Environment#getExternalStoragePublicDirectory
645e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
646e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalFilesDir(String type);
6474b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
648e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
649805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * Return the directory where this application's OBB files (if there
650805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * are any) can be found.  Note if the application does not have any OBB
651805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * files, this directory may not exist.
6528c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
6538c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>On devices with multiple users (as described by {@link UserManager}),
6548c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * multiple users may share the same OBB storage location. Applications
6558c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * should ensure that multiple instances running under different users
6568c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * don't interfere with each other.</p>
657805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     */
658805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    public abstract File getObbDir();
659805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn
660805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    /**
6614b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Returns the absolute path to the application specific cache directory
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the filesystem. These files will be ones that get deleted first when the
663e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * device runs low on storage.
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * There is no guarantee when these files will be deleted.
6654b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
666e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <strong>Note: you should not <em>rely</em> on the system deleting these
667e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files for you; you should always have a reasonable maximum, such as 1 MB,
668e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * for the amount of space you consume with cache files, and prune those
669e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files when exceeding that space.</strong>
6704b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application cache files.
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getCacheDir();
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
680e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
681e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
682e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStorageDirectory()} where the application can
683e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place cache files it owns.
6844b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
685e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getCacheDir()} in that these
686e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
687e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
6884b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
689e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
690556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * <li>The platform does not always monitor the space available in external
691556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * storage, and thus may not automatically delete these files.  Currently
692556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * the only time files here will be deleted by the platform is when running
693556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * on {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} or later and
694556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * {@link android.os.Environment#isExternalStorageEmulated()
695556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * Environment.isExternalStorageEmulated()} returns true.  Note that you should
696e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * be managing the maximum space you will use for these anyway, just like
697e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * with {@link #getCacheDir()}.
698e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
699e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
700e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
701e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
702e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
703e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
704e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
7058c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>On devices with multiple users (as described by {@link UserManager}),
7068c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * each user has their own isolated external storage. Applications only
7078c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * have access to the external storage for the user they're running as.</p>
7088c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
7098c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>Writing to this path requires the
7108c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission.</p>
7118c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
712e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application cache files
713e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
714e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
715e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
716e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
717e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getCacheDir
718e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
719e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalCacheDir();
7204b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
721e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private files associated with
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private files.
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] fileList();
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve, creating if needed, a new directory in which the application
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can place its own custom data files.  You can use the returned File
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * object to create and access files in this directory.  Note that files
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * created through a File object will only be accessible by your own
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application; you can only set the mode of the entire directory, not
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of individual files.
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Name of the directory to retrieve.  This is a directory
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is created as part of your application data.
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE} and
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_WRITEABLE} to control permissions.
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a File object for the requested directory.  The directory
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will have been created if it does not already exist.
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput(String, int)
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDir(String name, int mode);
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a new private SQLiteDatabase associated with this Context's
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.  Create the database file if it doesn't exist.
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the database.
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     default operation, {@link #MODE_WORLD_READABLE}
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
76247847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param factory An optional factory class that is called to instantiate a
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     cursor when query is called.
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The contents of a newly created database with the given name.
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
77247847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SQLiteDatabase openOrCreateDatabase(String name,
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode, CursorFactory factory);
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
77974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * Open a new private SQLiteDatabase associated with this Context's
78074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * application package.  Creates the database file if it doesn't exist.
78174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
78274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
78374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * used to handle corruption when sqlite reports database corruption.</p>
78474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
78574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param name The name (unique in the application package) of the database.
78674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
78774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     default operation, {@link #MODE_WORLD_READABLE}
78874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
78947847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
79074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param factory An optional factory class that is called to instantiate a
79174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     cursor when query is called.
79274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
79303acd51bae7d3fe746d21aa89f5b6de539d92bc8Vasu Nori     * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
79474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @return The contents of a newly created database with the given name.
79574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
79674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
79774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_PRIVATE
79874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_READABLE
79974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_WRITEABLE
80047847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
80174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #deleteDatabase
80274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     */
80374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    public abstract SQLiteDatabase openOrCreateDatabase(String name,
80474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori            int mode, CursorFactory factory, DatabaseErrorHandler errorHandler);
80574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori
80674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    /**
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete an existing private SQLiteDatabase associated with this Context's
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             database.
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the database was successfully deleted; else false.
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteDatabase(String name);
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a database created with
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openOrCreateDatabase} is stored.
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the database for which you would like to get
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given database.
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDatabasePath(String name);
8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private databases associated with
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private databases.
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] databaseList();
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8444c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDrawable
8458cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.get()} instead.
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8474a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable getWallpaper();
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8514c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#peekDrawable
8528cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.peek()} instead.
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8544a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable peekWallpaper();
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8588cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth()
8598cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumWidth()} instead.
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8614a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumWidth();
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8658cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight()
8668cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumHeight()} instead.
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8684a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumHeight();
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8724c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap)
8738cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
8749530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8759530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8774a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(Bitmap bitmap) throws IOException;
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8814c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream)
8828cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
8839530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8849530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8864a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(InputStream data) throws IOException;
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8908cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#clear
8918cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.clear()} instead.
8929530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8939530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8954a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void clearWallpaper() throws IOException;
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
899a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startActivity(Intent, Bundle)} with no options
900a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * specified.
901a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
902a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intent The description of the activity to start.
903a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
904a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @throws ActivityNotFoundException
905a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
906a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivity(Intent, Bundle)}
907a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see PackageManager#resolveActivity
908a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
909a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivity(Intent intent);
910a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
911a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
9128832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #startActivity(Intent)} that allows you to specify the
9138832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the activity will be started for.  This is not available to applications
9148832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
9158832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS_FULL permission.
9168264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @param intent The description of the activity to start.
91779af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user The UserHandle of the user to start this activity for.
9188264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @throws ActivityNotFoundException
9198264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @hide
9208264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     */
92179af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public void startActivityAsUser(Intent intent, UserHandle user) {
9228264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
9238264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    }
9248264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani
9258264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    /**
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Launch a new activity.  You will not receive any information about when
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the activity exits.
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if this method is being called from outside of an
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Activity} Context, then the Intent must include
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * without being started from an existing Activity, there is no existing
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * task in which to place the new activity and thus it needs to be placed
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in its own separate task.
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This method throws {@link ActivityNotFoundException}
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if there was no Activity found to run the given Intent.
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The description of the activity to start.
940a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
9417a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * May be null if there are no options.  See {@link android.app.ActivityOptions}
9427a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * for how to build the Bundle supplied here; there are no supported definitions
9437a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * for building it manually.
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws ActivityNotFoundException
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
94760dd520d37a6d3163747eb9a4266d0a08b207c98Scott Main     * @see #startActivity(Intent)
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#resolveActivity
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
950a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivity(Intent intent, Bundle options);
951a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
952a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
9538832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #startActivity(Intent, Bundle)} that allows you to specify the
9548832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the activity will be started for.  This is not available to applications
9558832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
9568832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS_FULL permission.
957258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @param intent The description of the activity to start.
958258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @param options Additional options for how the Activity should be started.
959258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * May be null if there are no options.  See {@link android.app.ActivityOptions}
960258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * for how to build the Bundle supplied here; there are no supported definitions
961258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * for building it manually.
96279af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user The UserHandle of the user to start this activity for.
963258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @throws ActivityNotFoundException
964258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @hide
965258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     */
96679af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public void startActivityAsUser(Intent intent, Bundle options, UserHandle userId) {
967258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
968258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    }
969258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
970258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /**
971a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startActivities(Intent[], Bundle)} with no options
972a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * specified.
973a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
974a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intents An array of Intents to be started.
975a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
976a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @throws ActivityNotFoundException
977a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
978a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivities(Intent[], Bundle)}
979a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see PackageManager#resolveActivity
980a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
981a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivities(Intent[] intents);
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
984621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Launch multiple new activities.  This is generally the same as calling
985621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * {@link #startActivity(Intent)} for the first Intent in the array,
986621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * that activity during its creation calling {@link #startActivity(Intent)}
987621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * for the second entry, etc.  Note that unlike that approach, generally
988621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * none of the activities except the last in the array will be created
989621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * at this point, but rather will be created when the user first visits
990621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * them (due to pressing back from the activity on top).
991621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
992621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * <p>This method throws {@link ActivityNotFoundException}
993621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * if there was no Activity found for <em>any</em> given Intent.  In this
994621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * case the state of the activity stack is undefined (some Intents in the
995621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * list may be on it, some not), so you probably want to avoid such situations.
996621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
997621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param intents An array of Intents to be started.
998a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
9997a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * See {@link android.content.Context#startActivity(Intent, Bundle)
10007a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * Context.startActivity(Intent, Bundle)} for more details.
1001621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
1002621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @throws ActivityNotFoundException
1003621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
1004a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivities(Intent[])}
1005621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @see PackageManager#resolveActivity
1006621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
1007a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivities(Intent[] intents, Bundle options);
1008a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
1009a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
1010ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @hide
1011ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * Launch multiple new activities.  This is generally the same as calling
1012ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * {@link #startActivity(Intent)} for the first Intent in the array,
1013ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * that activity during its creation calling {@link #startActivity(Intent)}
1014ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * for the second entry, etc.  Note that unlike that approach, generally
1015ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * none of the activities except the last in the array will be created
1016ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * at this point, but rather will be created when the user first visits
1017ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * them (due to pressing back from the activity on top).
1018ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1019ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * <p>This method throws {@link ActivityNotFoundException}
1020ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * if there was no Activity found for <em>any</em> given Intent.  In this
1021ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * case the state of the activity stack is undefined (some Intents in the
1022ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * list may be on it, some not), so you probably want to avoid such situations.
1023ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1024ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @param intents An array of Intents to be started.
1025ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @param options Additional options for how the Activity should be started.
1026ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @param userHandle The user for whom to launch the activities
1027ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * See {@link android.content.Context#startActivity(Intent, Bundle)
1028ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * Context.startActivity(Intent, Bundle)} for more details.
1029ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1030ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @throws ActivityNotFoundException
1031ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1032ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @see {@link #startActivities(Intent[])}
1033ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @see PackageManager#resolveActivity
1034ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     */
1035ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani    public void startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) {
1036ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
1037ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani    }
1038ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani
1039ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani    /**
1040a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)}
1041a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * with no options specified.
1042a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
1043a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intent The IntentSender to launch.
1044a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param fillInIntent If non-null, this will be provided as the
1045a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * intent parameter to {@link IntentSender#sendIntent}.
1046a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param flagsMask Intent flags in the original IntentSender that you
1047a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * would like to change.
1048a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param flagsValues Desired values for any bits set in
1049a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * <var>flagsMask</var>
1050a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param extraFlags Always set to 0.
1051a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
1052a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startActivity(Intent)
1053a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startIntentSender(IntentSender, Intent, int, int, int, Bundle)
1054a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
1055a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startIntentSender(IntentSender intent,
1056a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
1057a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            throws IntentSender.SendIntentException;
1058621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
1059621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
1060a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender
1061fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * to start.  If the IntentSender is for an activity, that activity will be started
1062ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn     * as if you had called the regular {@link #startActivity(Intent)}
1063fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * here; otherwise, its associated action will be executed (such as
1064fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * sending a broadcast) as if you had called
1065fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * {@link IntentSender#sendIntent IntentSender.sendIntent} on it.
10664b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
1067fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param intent The IntentSender to launch.
1068fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param fillInIntent If non-null, this will be provided as the
1069fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * intent parameter to {@link IntentSender#sendIntent}.
1070fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsMask Intent flags in the original IntentSender that you
1071fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * would like to change.
1072fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsValues Desired values for any bits set in
1073fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * <var>flagsMask</var>
1074fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param extraFlags Always set to 0.
1075a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
10767a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * See {@link android.content.Context#startActivity(Intent, Bundle)
10777a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * Context.startActivity(Intent, Bundle)} for more details.  If options
10787a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * have also been supplied by the IntentSender, options given here will
10797a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * override any that conflict with those given by the IntentSender.
1080a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
1081a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startActivity(Intent, Bundle)
1082a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startIntentSender(IntentSender, Intent, int, int, int)
1083fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     */
1084fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    public abstract void startIntentSender(IntentSender intent,
1085a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
1086a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Bundle options) throws IntentSender.SendIntentException;
1087fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn
1088fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    /**
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers.  This
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent);
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, allowing
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an optional required permission to be enforced.  This
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
112426b71be600a44341a34079a007ce1492a6f26c1fBrad Fitzpatrick     * @param receiverPermission (optional) String naming a permission that
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent,
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, delivering
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * them one at a time to allow more preferred receivers to consume the
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast before it is delivered to less preferred receivers.  This
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission (optional) String naming a permissions that
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Version of {@link #sendBroadcast(Intent)} that allows you to
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receive data back from the broadcast.  This is accomplished by
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supplying your own BroadcastReceiver when calling, which will be
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * treated as a final receiver at the end of the broadcast -- its
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver#onReceive} method will be called with
1166efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be serialized in the same way as calling
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Like {@link #sendBroadcast(Intent)}, this method is
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * asynchronous; it will return before
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resultReceiver.onReceive() is called.
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission String naming a permissions that
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resultReceiver Your own BroadcastReceiver to treat as the final
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                       receiver of the broadcast.
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler A custom Handler with which to schedule the
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  resultReceiver callback; if null it will be
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  scheduled in the Context's main thread.
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialCode An initial value for the result code.  Often
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    Activity.RESULT_OK.
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialData An initial value for the result data.  Often
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    null.
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialExtras An initial value for the result extras.  Often
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                      null.
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast(Intent)
1197efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.Activity#RESULT_OK
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission, BroadcastReceiver resultReceiver,
12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Handler scheduler, int initialCode, String initialData,
12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bundle initialExtras);
12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12088832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #sendBroadcast(Intent)} that allows you to specify the
12098832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
12108832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
12118832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
12127d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param intent The intent to broadcast
121379af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user UserHandle to send the intent to.
12147d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @see #sendBroadcast(Intent)
12157d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     */
121679af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user);
12177d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
12187d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /**
12198832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the
12208832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
12218832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
12228832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
12235ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12245ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
12255ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               Intent will receive the broadcast.
12265ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
12275ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param receiverPermission (optional) String naming a permission that
12285ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               a receiver must hold in order to receive your broadcast.
12295ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               If null, no permission is required.
12305ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12315ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendBroadcast(Intent, String)
12325ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
12335ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user,
12345ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            String receiverPermission);
12355ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
12365ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
12378832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of
12388832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)}
12398832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that allows you to specify the
12408832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
12418832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
12428832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
12437d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
12447d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
12457d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
12467d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
12477d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *               Intent will receive the broadcast.
124879af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user UserHandle to send the intent to.
12495ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param receiverPermission String naming a permissions that
12505ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               a receiver must hold in order to receive your broadcast.
12515ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               If null, no permission is required.
12527d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
12537d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                       receiver of the broadcast.
12547d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param scheduler A custom Handler with which to schedule the
12557d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                  resultReceiver callback; if null it will be
12567d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                  scheduled in the Context's main thread.
12577d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialCode An initial value for the result code.  Often
12587d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                    Activity.RESULT_OK.
12597d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialData An initial value for the result data.  Often
12607d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                    null.
12617d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
12627d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                      null.
12637d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
12647d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
12657d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     */
126679af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
12675ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
12687d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            int initialCode, String initialData, Bundle initialExtras);
12697d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
12707d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /**
12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent you are sending stays around after the broadcast is complete,
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that others can quickly retrieve that data through the return
12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * all other ways, this behaves the same as
12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendBroadcast(Intent)}.
12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent will receive the broadcast, and the Intent will be held to
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be re-broadcast to future receivers.
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
1287efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendStickyBroadcast(Intent intent);
12904b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1291efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    /**
1292efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * Version of {@link #sendStickyBroadcast} that allows you to
1293efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * receive data back from the broadcast.  This is accomplished by
1294efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * supplying your own BroadcastReceiver when calling, which will be
1295efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * treated as a final receiver at the end of the broadcast -- its
1296efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link BroadcastReceiver#onReceive} method will be called with
1297efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
1298efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * be serialized in the same way as calling
1299efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link #sendOrderedBroadcast(Intent, String)}.
1300efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1301efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>Like {@link #sendBroadcast(Intent)}, this method is
1302efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * asynchronous; it will return before
1303efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * resultReceiver.onReceive() is called.  Note that the sticky data
1304efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * stored is only the data you initially supply to the broadcast, not
1305efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result of any changes made by the receivers.
1306efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1307efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1308efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1309efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
1310efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *               Intent will receive the broadcast.
1311efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
1312efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                       receiver of the broadcast.
1313efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param scheduler A custom Handler with which to schedule the
1314efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  resultReceiver callback; if null it will be
1315efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  scheduled in the Context's main thread.
1316efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialCode An initial value for the result code.  Often
1317efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    Activity.RESULT_OK.
1318efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialData An initial value for the result data.  Often
1319efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    null.
1320efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
1321efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                      null.
1322efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1323efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent)
1324efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent, String)
1325efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendOrderedBroadcast(Intent, String)
1326efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyBroadcast(Intent)
1327efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.content.BroadcastReceiver
1328efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #registerReceiver
1329efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.app.Activity#RESULT_OK
1330efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     */
1331efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    public abstract void sendStickyOrderedBroadcast(Intent intent,
1332efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            BroadcastReceiver resultReceiver,
1333efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Handler scheduler, int initialCode, String initialData,
1334efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Bundle initialExtras);
1335efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove the data previously sent with {@link #sendStickyBroadcast},
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that it is as if the sticky broadcast had never happened.
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent that was previously broadcast.
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void removeStickyBroadcast(Intent intent);
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13518832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #sendStickyBroadcast(Intent)} that allows you to specify the
13528832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
13538832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
13548832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
13555ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13565ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
13575ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * Intent will receive the broadcast, and the Intent will be held to
13585ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * be re-broadcast to future receivers.
13595ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
13605ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13615ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendBroadcast(Intent)
13625ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
13635ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendStickyBroadcastAsUser(Intent intent, UserHandle user);
13645ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
13655ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
13668832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of
13678832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)}
13688832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that allows you to specify the
13698832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
13708832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
13718832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
13725ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13735ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
13745ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13755ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
13765ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               Intent will receive the broadcast.
13775ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
13785ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
13795ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                       receiver of the broadcast.
13805ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param scheduler A custom Handler with which to schedule the
13815ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                  resultReceiver callback; if null it will be
13825ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                  scheduled in the Context's main thread.
13835ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialCode An initial value for the result code.  Often
13845ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                    Activity.RESULT_OK.
13855ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialData An initial value for the result data.  Often
13865ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                    null.
13875ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
13885ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                      null.
13895ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13905ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
13915ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
13925ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendStickyOrderedBroadcastAsUser(Intent intent,
13935ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            UserHandle user, BroadcastReceiver resultReceiver,
13945ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            Handler scheduler, int initialCode, String initialData,
13955ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            Bundle initialExtras);
13965ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
13975ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
13988832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #removeStickyBroadcast(Intent)} that allows you to specify the
13998832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
14008832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
14018832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
14025ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14035ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
14045ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission in order to use this API.  If you do not hold that
14055ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission, {@link SecurityException} will be thrown.
14065ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14075ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent that was previously broadcast.
14085ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to remove the sticky broadcast from.
14095ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14105ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendStickyBroadcastAsUser
14115ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
14125ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void removeStickyBroadcastAsUser(Intent intent, UserHandle user);
14135ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
14145ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
1415a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * Register a BroadcastReceiver to be run in the main activity thread.  The
14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>receiver</var> will be called with any broadcast Intent that
14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>, in the main application thread.
14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system may broadcast Intents that are "sticky" -- these stay
14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around after the broadcast as finished, to be sent to any later
14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registrations. If your IntentFilter matches one of these sticky
14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intents, that Intent will be returned by this function
14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <strong>and</strong> sent to your <var>receiver</var> as if it had just
14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been broadcast.
14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>There may be multiple sticky Intents that match <var>filter</var>,
14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in which case each of these will be sent to <var>receiver</var>.  In
14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this case, only one of these can be returned directly by the function;
14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which of these that is returned is arbitrarily decided by the system.
14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>If you know the Intent your are registering for is sticky, you can
14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supply null for your <var>receiver</var>.  In this case, no receiver is
14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registered -- the function simply returns the sticky Intent that
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>.  In the case of multiple matches, the same
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * rules as described above apply.
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14396c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
14406c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * registered with this method will correctly respect the
14416c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
14426c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * Prior to that, it would be ignored and delivered to all matching registered
14436c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * receivers.  Be careful if using this for security.</p>
14446c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     *
1445a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * <p class="note">Note: this method <em>cannot be called from a
1446a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver
1447a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * that is declared in an application's manifest.  It is okay, however, to call
1448a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * this method from another BroadcastReceiver that has itself been registered
1449a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * at run time with {@link #registerReceiver}, since the lifetime of such a
1450a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * registered BroadcastReceiver is tied to the object that registered it.</p>
14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            IntentFilter filter);
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Register to receive intent broadcasts, to run in the context of
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>scheduler</var>.  See
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information.  This allows you to enforce permissions on who can
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast intents to your receiver, or have the receiver run in
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a different thread than the main application thread.
14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14756c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
14766c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * registered with this method will correctly respect the
14776c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
14786c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * Prior to that, it would be ignored and delivered to all matching registered
14796c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * receivers.  Be careful if using this for security.</p>
14806c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     *
14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param broadcastPermission String naming a permissions that a
14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      broadcaster must hold in order to send an Intent to you.  If null,
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      no permission is required.
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler Handler identifying the thread that will receive
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      the Intent.  If null, the main thread of the process will be used.
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter)
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
149720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            IntentFilter filter, String broadcastPermission, Handler scheduler);
149820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn
149920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn    /**
150020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @hide
150120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * Same as {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
150220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * but for a specific user.  This receiver will receiver broadcasts that
150320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * are sent to the requested user.  It
150420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}
150520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * permission.
150620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
150720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param receiver The BroadcastReceiver to handle the broadcast.
150820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param user UserHandle to send the intent to.
150920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param filter Selects the Intent broadcasts to be received.
151020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param broadcastPermission String naming a permissions that a
151120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      broadcaster must hold in order to send an Intent to you.  If null,
151220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      no permission is required.
151320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param scheduler Handler identifying the thread that will receive
151420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      the Intent.  If null, the main thread of the process will be used.
151520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
151620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @return The first sticky intent found that matches <var>filter</var>,
151720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *         or null if there are none.
151820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
151920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler
152020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #sendBroadcast
152120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #unregisterReceiver
152220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     */
152320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn    public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver,
152420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            UserHandle user, IntentFilter filter, String broadcastPermission,
152520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            Handler scheduler);
15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Unregister a previously registered BroadcastReceiver.  <em>All</em>
15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * filters that have been registered for this BroadcastReceiver will be
15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed.
15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to unregister.
15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unregisterReceiver(BroadcastReceiver receiver);
15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be started.  The Intent
15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can either contain the complete class name of a specific service
15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation to start, or an abstract definition through the
15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * action and other fields of the kind of service to start.  If this service
15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is not already running, it will be instantiated and started (creating a
15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process for it if needed); if it is running then it remains running.
15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Every call to this method will result in a corresponding call to
15474b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * the target service's {@link android.app.Service#onStartCommand} method,
15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the <var>intent</var> given here.  This provides a convenient way
15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to submit jobs to a service without having to bind and call on to its
15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * interface.
15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Using startService() overrides the default service lifetime that is
15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * managed by {@link #bindService}: it requires the service to remain
15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running until {@link #stopService} is called, regardless of whether
15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * any clients are connected to it.  Note that calls to startService()
15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not nesting: no matter how many times you call startService(),
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a single call to {@link #stopService} will stop it.
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system attempts to keep running services around as much as
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * possible.  The only time they should be stopped is if the current
15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground application is using so many resources that the service needs
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be killed.  If any errors happen in the service's process, it will
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * automatically be restarted.
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to start the given service.
15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to be started.  The Intent may
15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.  Additional values
15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      may be included in the Intent extras to supply arguments along with
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      this specific start call.
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If the service is being started or is already running, the
15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ComponentName} of the actual service that was started is
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned; else if the service does not exist null is returned.
15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #stopService
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ComponentName startService(Intent service);
15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be stopped.  If the service is
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not running, nothing happens.  Otherwise it is stopped.  Note that calls
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to startService() are not counted -- this stops the service no matter
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * how many times it was started.
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if a stopped service still has {@link ServiceConnection}
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be destroyed until all of these bindings are removed.  See
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link android.app.Service} documentation for more details on a
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service's lifecycle.
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to stop the given service.
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Description of the service to be stopped.  The Intent may
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If there is a service matching the given Intent that is already
16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running, then it is stopped and true is returned; else false is returned.
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean stopService(Intent service);
16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16167767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     * @hide like {@link #startService(Intent)} but for a specific user.
16177767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     */
16187767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public abstract ComponentName startServiceAsUser(Intent service, UserHandle user);
16197767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
16207767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    /**
16217767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     * @hide like {@link #stopService(Intent)} but for a specific user.
16227767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     */
16237767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public abstract boolean stopServiceAsUser(Intent service, UserHandle user);
16247767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
16257767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    /**
16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Connect to an application service, creating it if needed.  This defines
16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a dependency between your application and the service.  The given
1628f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * <var>conn</var> will receive the service object when it is created and be
16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * told if it dies and restarts.  The service will be considered required
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the system only for as long as the calling context exists.  For
16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * example, if this Context is an Activity that is stopped, the service will
16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be required to continue running until the Activity is resumed.
16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to bind to the given service.
16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1637f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * <p class="note">Note: this method <em>can not be called from a
16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver} component</em>.  A pattern you can use to
1639f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * communicate from a BroadcastReceiver to a Service is to call
16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #startService} with the arguments containing the command to be
16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sent, with the service calling its
16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Service#stopSelf(int)} method when done executing
16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that command.  See the API demo App/Service/Service Start Arguments
16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Controller for an illustration of this.  It is okay, however, to use
1645f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * this method from a BroadcastReceiver that has been registered with
16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is tied to another object (the one that registered it).</p>
16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to connect to.  The Intent may
16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name, or a logical
16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn Receives information as the service is started and stopped.
165479b3317b775810bac088b0998c48eb6506e2578cChristopher Tate     *      This must be a valid ServiceConnection object; it must not be null.
16554b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @param flags Operation options for the binding.  May be 0,
1656c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND},
1657c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_NOT_FOREGROUND}, {@link #BIND_ABOVE_CLIENT},
1658c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_ALLOW_OOM_MANAGEMENT}, or
1659c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_WAIVE_PRIORITY}.
16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If you have successfully bound to the service, true is returned;
16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false is returned if the connection is not made so you will not
16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         receive the service object.
16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unbindService
16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #BIND_AUTO_CREATE
16694b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_DEBUG_UNBIND
16704b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_NOT_FOREGROUND
16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean bindService(Intent service, ServiceConnection conn,
16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags);
16749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16767d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * Same as {@link #bindService(Intent, ServiceConnection, int)}, but with an explicit userHandle
167737ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     * argument for use by system server and other multi-user aware code.
167837ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     * @hide
167937ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     */
16807d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    public boolean bindService(Intent service, ServiceConnection conn, int flags, int userHandle) {
168137ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
168237ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani    }
168337ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani
168437ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani    /**
16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Disconnect from an application service.  You will no longer receive
16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls as the service is restarted, and the service is now allowed to
16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * stop at any time.
16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn The connection interface previously supplied to
169079b3317b775810bac088b0998c48eb6506e2578cChristopher Tate     *             bindService().  This parameter must not be null.
16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unbindService(ServiceConnection conn);
16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Start executing an {@link android.app.Instrumentation} class.  The given
16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instrumentation component will be run by killing its target application
16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (if currently running), starting the target process, instantiating the
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation component, and then letting it drive the application.
17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function is not synchronous -- it returns as soon as the
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation has started and while it is running.
17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Instrumentation is normally only allowed to run against a package
17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is either unsigned or signed with a signature that the
17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the instrumentation package is also signed with (ensuring the target
17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * trusts the instrumentation).
17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param className Name of the Instrumentation component to be run.
17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param profileFile Optional path to write profiling data as the
17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation runs, or null for no profiling.
17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param arguments Additional optional arguments to pass to the
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation, or null.
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true if the instrumentation was successfully started,
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * else false if it could not be found.
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean startInstrumentation(ComponentName className,
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String profileFile, Bundle arguments);
17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the handle to a system-level service by name. The class of the
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned object varies by the requested name. Currently available names
17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are:
17264b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dl>
17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WINDOW_SERVICE} ("window")
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> The top-level window manager in which you can place custom
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  windows.  The returned object is a {@link android.view.WindowManager}.
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  in this context.
17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.ActivityManager} for interacting with the
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  global activity state of the system.
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #POWER_SERVICE} ("power")
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.PowerManager} for controlling power
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  management.
17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ALARM_SERVICE} ("alarm")
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  time of your choosing.
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.NotificationManager} for informing the user
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   of background events.
17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LOCATION_SERVICE} ("location")
17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.location.LocationManager} for controlling location
17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   (e.g., GPS) updates.
17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #SEARCH_SERVICE} ("search")
17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.SearchManager} for handling search.
17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  hardware.
17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  handling management of network connections.
17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WIFI_SERVICE} ("wifi")
17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi connectivity.
17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for management of input methods.
176553332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dt> {@link #UI_MODE_SERVICE} ("uimode")
176653332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dd> An {@link android.app.UiModeManager} for controlling UI modes.
17677083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * <dt> {@link #DOWNLOAD_SERVICE} ("download")
1768d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * </dl>
17704b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note:  System services obtained via this API may be closely associated with
17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the Context in which they are obtained from.  In general, do not share the
17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service objects between various different contexts (Activities, Applications,
17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Services, Providers, etc.)
17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the desired service.
17774b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The service or null if the name does not exist.
17794b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WINDOW_SERVICE
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LAYOUT_INFLATER_SERVICE
17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ACTIVITY_SERVICE
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #POWER_SERVICE
17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.PowerManager
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ALARM_SERVICE
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #NOTIFICATION_SERVICE
17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #KEYGUARD_SERVICE
17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LOCATION_SERVICE
17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SEARCH_SERVICE
17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SENSOR_SERVICE
17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
1800c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #STORAGE_SERVICE
1801b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #VIBRATOR_SERVICE
18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #CONNECTIVITY_SERVICE
18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WIFI_SERVICE
18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #AUDIO_SERVICE
18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
1810b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see #MEDIA_ROUTER_SERVICE
1811b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see android.media.MediaRouter
18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #TELEPHONY_SERVICE
18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #INPUT_METHOD_SERVICE
18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.inputmethod.InputMethodManager
181653332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #UI_MODE_SERVICE
181753332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see android.app.UiModeManager
18187083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * @see #DOWNLOAD_SERVICE
1819d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * @see android.app.DownloadManager
18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Object getSystemService(String name);
18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.PowerManager} for controlling power management,
18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * including "wake locks," which let you keep the device on while
18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * you're running long tasks.
18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String POWER_SERVICE = "power";
18304b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.WindowManager} for accessing the system's window
18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * manager.
18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WINDOW_SERVICE = "window";
18404b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater} for inflating layout resources in this
18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * context.
18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
18504b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
1853603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * {@link android.accounts.AccountManager} for receiving intents at a
1854603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * time of your choosing.
1855603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     *
1856603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see #getSystemService
1857603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see android.accounts.AccountManager
1858603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     */
1859603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public static final String ACCOUNT_SERVICE = "account";
18604b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1861603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    /**
1862603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * Use with {@link #getSystemService} to retrieve a
18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.ActivityManager} for interacting with the global
18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * system state.
18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ACTIVITY_SERVICE = "activity";
18704b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.AlarmManager} for receiving intents at a
18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * time of your choosing.
18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ALARM_SERVICE = "alarm";
18804b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for informing the user of
18849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * background events.
18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String NOTIFICATION_SERVICE = "notification";
18904b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
189375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * {@link android.view.accessibility.AccessibilityManager} for giving the user
189475986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * feedback for UI events through the registered event listeners.
189575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     *
189675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see #getSystemService
189775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see android.view.accessibility.AccessibilityManager
189875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     */
189975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    public static final String ACCESSIBILITY_SERVICE = "accessibility";
19004b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
190175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    /**
190275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * Use with {@link #getSystemService} to retrieve a
19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for controlling keyguard.
19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String KEYGUARD_SERVICE = "keyguard";
19094b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.location.LocationManager} for controlling location
19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * updates.
19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LOCATION_SERVICE = "location";
1919a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
1920a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    /**
1921a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * Use with {@link #getSystemService} to retrieve a
1922a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * {@link android.location.CountryDetector} for detecting the country that
1923a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * the user is in.
1924a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     *
1925a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * @hide
1926a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     */
1927a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    public static final String COUNTRY_DETECTOR = "country_detector";
1928a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
19299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.SearchManager} for handling searches.
19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SEARCH_SERVICE = "search";
19374b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.hardware.SensorManager} for accessing sensors.
19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SENSOR_SERVICE = "sensor";
19464b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1948c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
194902c8730c1bf19daf48bec8c6995df676a00a73b1Kenny Root     * android.os.storage.StorageManager} for accessing system storage
1950c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * functions.
1951c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     *
1952c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #getSystemService
1953b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
1954c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     */
1955c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    public static final String STORAGE_SERVICE = "storage";
1956c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat
1957c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    /**
19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * com.android.server.WallpaperService for accessing wallpapers.
19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WALLPAPER_SERVICE = "wallpaper";
19644b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Vibrator} for interacting with the vibration hardware.
19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String VIBRATOR_SERVICE = "vibrator";
19739e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt
19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.StatusBarManager} for interacting with the status bar.
19779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.StatusBarManager
19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String STATUS_BAR_SERVICE = "statusbar";
19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.ConnectivityManager} for handling management of
19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * network connections.
19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CONNECTIVITY_SERVICE = "connectivity";
19939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19969e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * android.net.ThrottleManager} for handling management of
19979e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * throttling.
19989e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     *
19999e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @hide
20009e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @see #getSystemService
20019e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @see android.net.ThrottleManager
20029e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     */
20039e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt    public static final String THROTTLE_SERVICE = "throttle";
20049e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt
20059e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt    /**
20069e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * Use with {@link #getSystemService} to retrieve a {@link
20078662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * android.os.IUpdateLock} for managing runtime sequences that
20088662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * must not be interrupted by headless OTA application or similar.
20098662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     *
20108662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @hide
20118662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @see #getSystemService
20128662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @see android.os.UpdateLock
20138662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     */
20148662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate    public static final String UPDATE_LOCK_SERVICE = "updatelock";
20158662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate
20168662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate    /**
20178662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * Use with {@link #getSystemService} to retrieve a {@link
2018d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * android.net.NetworkManagementService} for handling management of
2019d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * system network services
2020d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     *
2021d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @hide
2022d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see #getSystemService
2023d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see android.net.NetworkManagementService
2024d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     */
2025d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    public static final String NETWORKMANAGEMENT_SERVICE = "network_management";
2026d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat
2027eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    /** {@hide} */
202875279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    public static final String NETWORK_STATS_SERVICE = "netstats";
202975279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    /** {@hide} */
2030eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public static final String NETWORK_POLICY_SERVICE = "netpolicy";
2031eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
2032d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    /**
2033d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
20349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.wifi.WifiManager} for handling management of
20359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi access.
20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
20399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WIFI_SERVICE = "wifi";
20414b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
204355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Use with {@link #getSystemService} to retrieve a {@link
204455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * android.net.wifi.p2p.WifiP2pManager} for handling management of
2045651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Wi-Fi peer-to-peer connections.
204655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
204755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #getSystemService
204855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see android.net.wifi.p2p.WifiP2pManager
204955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
205055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_SERVICE = "wifip2p";
205155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
205255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
20537d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * Use with {@link #getSystemService} to retrieve a {@link
205460309fc7bb95c9b3fc3e0ed60aa1eeb35bd13a68Irfan Sheriff     * android.net.nsd.NsdManager} for handling management of network service
20557d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * discovery
20567d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     *
20577d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * @see #getSystemService
205860309fc7bb95c9b3fc3e0ed60aa1eeb35bd13a68Irfan Sheriff     * @see android.net.nsd.NsdManager
20597d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     */
20607d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff    public static final String NSD_SERVICE = "servicediscovery";
20617d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff
20627d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff    /**
20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.media.AudioManager} for handling management of volume,
20659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * ringer modes and audio routing.
20664b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
20679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
20699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String AUDIO_SERVICE = "audio";
20714b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
2074b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * {@link android.media.MediaRouter} for controlling and managing
2075b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * routing of media.
2076b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     *
2077b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see #getSystemService
2078b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see android.media.MediaRouter
2079b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     */
2080b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn    public static final String MEDIA_ROUTER_SERVICE = "media_router";
2081b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn
2082b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn    /**
2083b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * Use with {@link #getSystemService} to retrieve a
20849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.telephony.TelephonyManager} for handling management the
20859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * telephony features of the device.
20864b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
20879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
20899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String TELEPHONY_SERVICE = "phone";
20919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
20949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.text.ClipboardManager} for accessing and modifying
20959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the contents of the global clipboard.
20964b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
20979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.text.ClipboardManager
20999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CLIPBOARD_SERVICE = "clipboard";
21019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21034b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
21049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.inputmethod.InputMethodManager} for accessing input
21059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * methods.
21069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
21089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String INPUT_METHOD_SERVICE = "input_method";
21109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
2113988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * {@link android.view.textservice.TextServicesManager} for accessing
2114988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * text services.
2115988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     *
2116988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @see #getSystemService
2117988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
2118988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
2119988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
2120988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
2121988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Use with {@link #getSystemService} to retrieve a
2122e38d58bf890c03eb034afd18c62c730c7d735f1cDan Egnor     * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets.
21239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2127c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public static final String APPWIDGET_SERVICE = "appwidget";
2128952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
21299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2130487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * Use with {@link #getSystemService} to retrieve an
21314528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tate     * {@link android.app.backup.IBackupManager IBackupManager} for communicating
2132487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * with the backup mechanism.
21337f2054392e9957d3ba8579ef08c29cfb27df564eDianne Hackborn     * @hide
21344b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2135487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * @see #getSystemService
2136487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     */
2137487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    public static final String BACKUP_SERVICE = "backup";
2138952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
2139952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    /**
2140952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * Use with {@link #getSystemService} to retrieve a
21411337b012f8e18c725b1ec17b456dc57a084d594dDan Egnor     * {@link android.os.DropBoxManager} instance for recording
2142952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * diagnostic logs.
2143952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * @see #getSystemService
2144952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     */
2145952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    public static final String DROPBOX_SERVICE = "dropbox";
2146952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
2147487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    /**
21484b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
214987bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn     * {@link android.app.admin.DevicePolicyManager} for working with global
2150d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * device policy management.
2151d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     *
2152d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * @see #getSystemService
2153d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     */
2154d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    public static final String DEVICE_POLICY_SERVICE = "device_policy";
2155d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn
2156d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    /**
215753332883543868fb83e111a07306368b7772b340Tobias Haamel     * Use with {@link #getSystemService} to retrieve a
215853332883543868fb83e111a07306368b7772b340Tobias Haamel     * {@link android.app.UiModeManager} for controlling UI modes.
215953332883543868fb83e111a07306368b7772b340Tobias Haamel     *
216053332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #getSystemService
216153332883543868fb83e111a07306368b7772b340Tobias Haamel     */
216253332883543868fb83e111a07306368b7772b340Tobias Haamel    public static final String UI_MODE_SERVICE = "uimode";
216353332883543868fb83e111a07306368b7772b340Tobias Haamel
216453332883543868fb83e111a07306368b7772b340Tobias Haamel    /**
2165a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * Use with {@link #getSystemService} to retrieve a
2166d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * {@link android.app.DownloadManager} for requesting HTTP downloads.
2167a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     *
2168a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * @see #getSystemService
2169a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     */
2170a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    public static final String DOWNLOAD_SERVICE = "download";
2171a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard
2172a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    /**
21732d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * Use with {@link #getSystemService} to retrieve a
217450b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * {@link android.nfc.NfcManager} for using NFC.
217550b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     *
217650b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * @see #getSystemService
217750b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     */
217850b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    public static final String NFC_SERVICE = "nfc";
217950b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly
218050b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    /**
218150b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * Use with {@link #getSystemService} to retrieve a
21821abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * {@link android.bluetooth.BluetoothAdapter} for using Bluetooth.
21831abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     *
21841abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * @see #getSystemService
21851abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * @hide
21861abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     */
21871abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh    public static final String BLUETOOTH_SERVICE = "bluetooth";
21881abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh
21891abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh    /**
21901abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * Use with {@link #getSystemService} to retrieve a
21912d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * {@link android.net.sip.SipManager} for accessing the SIP related service.
21922d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     *
21932d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * @see #getSystemService
21942d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     */
21952d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /** @hide */
21962d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    public static final String SIP_SERVICE = "sip";
21972d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang
21982d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /**
2199e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Use with {@link #getSystemService} to retrieve a {@link
2200c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * android.hardware.usb.UsbManager} for access to USB devices (as a USB host)
2201e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * and for controlling this device's behavior as a USB device.
2202e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
2203e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @see #getSystemService
2204c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * @see android.harware.usb.UsbManager
2205e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
2206e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public static final String USB_SERVICE = "usb";
2207e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
2208e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
2209b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * Use with {@link #getSystemService} to retrieve a {@link
2210b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * android.hardware.SerialManager} for access to serial ports.
2211b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     *
2212b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @see #getSystemService
2213b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @see android.harware.SerialManager
2214b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     *
2215b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @hide
2216b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     */
2217b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood    public static final String SERIAL_SERVICE = "serial";
2218b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood
2219b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood    /**
22209df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * Use with {@link #getSystemService} to retrieve a
22219df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * {@link android.hardware.input.InputManager} for interacting with input devices.
22229df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     *
22239df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * @see #getSystemService
22249df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * @see android.hardware.input.InputManager
22259df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     */
22269df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown    public static final String INPUT_SERVICE = "input";
22279df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown
22289df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown    /**
222907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * Use with {@link #getSystemService} to retrieve a
2230fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * {@link android.hardware.display.DisplayManager} for interacting with display devices.
2231fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     *
2232fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * @see #getSystemService
2233fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * @see android.hardware.display.DisplayManager
2234fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     */
2235fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown    public static final String DISPLAY_SERVICE = "display";
2236fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown
2237fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown    /**
2238fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * Use with {@link #getSystemService} to retrieve a
223907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * {@link android.os.SchedulingPolicyService} for managing scheduling policy.
224007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     *
224107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @see #getSystemService
224207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @see android.os.SchedulingPolicyService
224307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     *
224407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @hide
224507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     */
224607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten    public static final String SCHEDULING_POLICY_SERVICE = "scheduling_policy";
224707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten
224807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten    /**
2249258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * Use with {@link #getSystemService} to retrieve a
2250258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * {@link android.os.UserManager} for managing users on devices that support multiple users.
2251258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     *
2252258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @see #getSystemService
2253258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @see android.os.UserManager
2254258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     */
2255258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    public static final String USER_SERVICE = "user";
2256258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
2257258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /**
22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the given permission is allowed for a particular
22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process and user ID running in the system.
22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be > 0.
22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkPermission(String permission, int pid, int uid);
22749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC you are handling has been
22779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is basically the same as calling
22789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkPermission(String, int, int)} with the pid and uid returned
22799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by {@link android.os.Binder#getCallingPid} and
22809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.Binder#getCallingUid}.  One important difference
22819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is that if you are not currently processing an IPC, this function
22829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.  This is done to protect against accidentally
22839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
22849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to avoid this protection.
22859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
22899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission
22959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingPermission(String permission);
22979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> have been
23009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is the same as
23019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingPermission}, except it grants your own permissions
23029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
23039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfPermission(String permission);
23159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the given permission is not allowed for a particular process
23189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and user ID running in the system, throw a {@link SecurityException}.
23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission(String, int, int)
23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforcePermission(
23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, int pid, int uid, String message);
23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC you are handling has not been
23339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission, throw a {@link
23349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforcePermission(String, int, int, String)} with the
23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid and uid returned by {@link android.os.Binder#getCallingPid}
23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and {@link android.os.Binder#getCallingUid}.  One important
23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * difference is that if you are not currently processing an IPC,
23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this function will always throw the SecurityException.  This is
23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * done to protect against accidentally leaking permissions; you
23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can use {@link #enforceCallingOrSelfPermission} to avoid this
23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * protection.
23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
23469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission(String)
23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingPermission(
23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If neither you nor the calling process of an IPC you are
23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * handling has been granted a particular permission, throw a
23559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link SecurityException}.  This is the same as {@link
23569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingPermission}, except it grants your own
23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission(String)
23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfPermission(
23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Grant permission to access a specific Uri to another package, regardless
23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of whether that package has general permission to access the Uri's
23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * content provider.  This can be used to grant specific, temporary
23729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions, typically in response to user interaction (such as the
23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user opening an attachment that you would like someone else to
23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * display).
23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
23809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * start an activity instead of this function directly.  If you use this
23819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * function directly, you should be sure to call
23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #revokeUriPermission} when the target should no longer be allowed
23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to access it.
23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>To succeed, the content provider owning the Uri must have set the
23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * grantUriPermissions} attribute in its manifest or included the
23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestGrantUriPermission
23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;grant-uri-permissions&gt;} tag.
23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param toPackage The package you would like to allow to access the Uri.
23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to grant access to.
23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #revokeUriPermission
24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void grantUriPermission(String toPackage, Uri uri,
24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int modeFlags);
24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove all permissions to access a particular content provider Uri
24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that were previously added with {@link #grantUriPermission}.  The given
24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Uri will match all previously granted Uris that are the same or a
24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sub-path of the given Uri.  That is, revoking "content://foo/one" will
24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * revoke both "content://foo/target" and "content://foo/target/sub", but not
24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "content://foo".
24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to revoke access to.
24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #grantUriPermission
24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void revokeUriPermission(Uri uri, int modeFlags);
24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether a particular process and user ID has been granted
24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This only checks for permissions
24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have been explicitly granted -- if the given process/uid has
24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * more general access to the URI's content provider then this check will
24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * always fail.
24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
24349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
24399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed to access that uri, or
24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
24419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
24439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process and user ID has been
24489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI.  This is basically
24499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the same as calling {@link #checkUriPermission(Uri, int, int,
24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * int)} with the pid and uid returned by {@link
24519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
24649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> has been granted
24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This is the same as
24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingUriPermission}, except it grants your own permissions
24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
24749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Check both a Uri and normal permission.  This allows you to perform
24909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #checkPermission} and {@link #checkUriPermission} in one
24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
24949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
24959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
24969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
24979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
24989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
24999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
25009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri or holds one of the given permissions, or
25089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, String readPermission,
25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String writePermission, int pid, int uid, int modeFlags);
25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If a particular process and user ID has not been granted
25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This only checks for permissions that have
25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been explicitly granted -- if the given process/uid has more
25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * general access to the URI's content provider then this check
25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int pid, int uid, int modeFlags, String message);
25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process and user ID has not been granted
25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforceUriPermission(Uri, int, int, int, String)} with
25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the pid and uid returned by {@link
25419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
25429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
25439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
25449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always throw a SecurityException.
25459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
25479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission(Uri, int)
25539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingUriPermission(
25559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
25569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC <em>or you</em> has not been
25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI, throw {@link
25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is the same as {@link
25619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingUriPermission}, except it grants your own
25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
25639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
25644b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
25669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfUriPermission(Uri, int)
25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfUriPermission(
25749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
25759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enforce both a Uri and normal permission.  This allows you to perform
25789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
25799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
25804b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
25819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
25829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
25839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
25849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
25859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
25879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
25889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
25899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
25909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, String, String, int, int, int)
25969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
25989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, String readPermission, String writePermission,
25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int pid, int uid, int modeFlags, String message);
26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: include the application
26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * code with the context.  This means loading code into the caller's
26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process, so that {@link #getClassLoader()} can be used to instantiate
26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application's classes.  Setting this flags imposes security
26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on what application context you can access; if the
26079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * requested application can not be safely loaded into your process,
26089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * java.lang.SecurityException will be thrown.  If this flag is not set,
26099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there will be no restrictions on the packages that can be loaded,
26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * but {@link #getClassLoader} will always return the default system
26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class loader.
26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: ignore any security
26179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on the Context being requested, allowing it to always
26189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be loaded into a process even when it isn't safe to do so.  Use
26209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with extreme care!
26219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
26234b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
2624870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
2625870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Flag for use with {@link #createPackageContext}: a restricted context may
2626870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * disable specific features. For instance, a View associated with a restricted
2627870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * context would ignore particular XML attributes.
2628870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2629870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public static final int CONTEXT_RESTRICTED = 0x00000004;
26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a new Context object for the given application name.  This
26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Context is the same as what the named application gets when it is
26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * launched, containing the same resources and class loader.  Each call to
26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method returns a new instance of a Context object; Context objects
26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not shared, however they share common state (Resources, ClassLoader,
26379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * etc) so the Context instance itself is fairly lightweight.
26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application with the given package name.
26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link java.lang.SecurityException} if the Context requested
26439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can not be loaded into the caller's process for security reasons (see
26449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #CONTEXT_INCLUDE_CODE} for more information}.
26459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName Name of the application's package.
26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *              or {@link #CONTEXT_IGNORE_SECURITY}.
26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A Context for the application.
26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws java.lang.SecurityException
26539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws PackageManager.NameNotFoundException if there is no application with
26549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given package name
26559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context createPackageContext(String packageName,
26579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags) throws PackageManager.NameNotFoundException;
2658870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy
2659870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
26606d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * Similar to {@link #createPackageContext(String, int)}, but with a
26616d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * different {@link UserHandle}. For example, {@link #getContentResolver()}
26626d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * will open any {@link Uri} as the given user.
26636d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     *
26646d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * @hide
26656d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     */
26666d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey    public abstract Context createPackageContextAsUser(
26676d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey            String packageName, int flags, UserHandle user)
26686d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey            throws PackageManager.NameNotFoundException;
26696d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey
26706d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey    /**
2671756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * Return a new Context object for the current Context but whose resources
2672756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * are adjusted to match the given Configuration.  Each call to this method
2673a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * returns a new instance of a Context object; Context objects are not
2674756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * shared, however common state (ClassLoader, other Resources for the
2675756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * same configuration) may be so the Context itself can be fairly lightweight.
2676756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     *
2677756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * @param overrideConfiguration A {@link Configuration} specifying what
2678756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * values to modify in the base Configuration of the original Context's
2679756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * resources.  If the base configuration changes (such as due to an
2680756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * orientation change), the resources of this context will also change except
2681756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * for those that have been explicitly overridden with a value here.
2682756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     *
2683a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @return A Context with the given configuration override.
2684756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     */
2685756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    public abstract Context createConfigurationContext(Configuration overrideConfiguration);
2686756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn
2687756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    /**
2688a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * Return a new Context object for the current Context but whose resources
2689a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * are adjusted to match the metrics of the given Display.  Each call to this method
2690a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * returns a new instance of a Context object; Context objects are not
2691a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * shared, however common state (ClassLoader, other Resources for the
2692a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * same configuration) may be so the Context itself can be fairly lightweight.
2693a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2694a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * The returned display Context provides a {@link WindowManager}
2695a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * (see {@link #getSystemService(String)}) that is configured to show windows
2696a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * on the given display.  The WindowManager's {@link WindowManager#getDefaultDisplay}
2697a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * method can be used to retrieve the Display from the returned Context.
2698a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2699a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @param display A {@link Display} object specifying the display
2700a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * for whose metrics the Context's resources should be tailored and upon which
2701a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * new windows should be shown.
2702a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2703a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @return A Context for the display.
2704a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     */
2705a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public abstract Context createDisplayContext(Display display);
2706a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown
2707a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    /**
270898365d7663cbd82979a5700faf0050220b01084dJeff Brown     * Gets the compatibility info holder for this context.  This information
270998365d7663cbd82979a5700faf0050220b01084dJeff Brown     * is provided on a per-application basis and is used to simulate lower density
271098365d7663cbd82979a5700faf0050220b01084dJeff Brown     * display metrics for legacy applications.
271198365d7663cbd82979a5700faf0050220b01084dJeff Brown     *
2712a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @param displayId The display id for which to get compatibility info.
271398365d7663cbd82979a5700faf0050220b01084dJeff Brown     * @return The compatibility info holder, or null if not required by the application.
271498365d7663cbd82979a5700faf0050220b01084dJeff Brown     * @hide
271598365d7663cbd82979a5700faf0050220b01084dJeff Brown     */
2716a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public abstract CompatibilityInfoHolder getCompatibilityInfo(int displayId);
271798365d7663cbd82979a5700faf0050220b01084dJeff Brown
271898365d7663cbd82979a5700faf0050220b01084dJeff Brown    /**
2719870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Indicates whether this Context is restricted.
27204b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2721870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @return True if this Context is restricted, false otherwise.
27224b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2723870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @see #CONTEXT_RESTRICTED
2724870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2725870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public boolean isRestricted() {
2726870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy        return false;
2727870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    }
27289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2729