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;
48df2e92a535e19c00edd37318d974dab992ccc2c1Amith Yamasaniimport java.util.List;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface to global information about an application environment.  This is
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an abstract class whose implementation is provided by
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Android system.  It
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allows access to application-specific resources and classes, as well as
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * up-calls for application-level operations such as launching activities,
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcasting and receiving intents, etc.
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Context {
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: the default mode, where the created file can only
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be accessed by the calling application (or all applications sharing the
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * same user ID).
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_PRIVATE = 0x0000;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
681506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * @deprecated Creating world-readable files is very dangerous, and likely
691506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * to cause security holes in applications.  It is strongly discouraged;
701506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * instead, applications should use more formal mechanism for interactions
711506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
721506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * {@link android.app.Service}.  There are no guarantees that this
731506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * access mode will remain on a file, such as when it goes through a
741506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * backup and restore.
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have read access
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
80556b09e184b891d9542092962ed248616810e054Dianne Hackborn    @Deprecated
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_READABLE = 0x0001;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
831506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * @deprecated Creating world-writable files is very dangerous, and likely
841506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * to cause security holes in applications.  It is strongly discouraged;
851506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * instead, applications should use more formal mechanism for interactions
861506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
871506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * {@link android.app.Service}.  There are no guarantees that this
881506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * access mode will remain on a file, such as when it goes through a
891506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * backup and restore.
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have write access
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
95556b09e184b891d9542092962ed248616810e054Dianne Hackborn    @Deprecated
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_WRITEABLE = 0x0002;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: for use with {@link #openFileOutput}, if the file
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * already exists then write data to the end of the existing file
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instead of erasing it.
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_APPEND = 0x8000;
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1064e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * SharedPreference loading flag: when set, the file on disk will
1074e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * be checked for modification even if the shared preferences
1084e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * instance is already loaded in this process.  This behavior is
1094e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * sometimes desired in cases where the application has multiple
1104e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, all writing to the same SharedPreferences file.
1114e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * Generally there are better forms of communication between
1124e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, though.
1134e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
1144e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * <p>This was the legacy (but undocumented) behavior in and
1154e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * before Gingerbread (Android 2.3) and this flag is implied when
1164e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * targetting such releases.  For applications targetting SDK
1174e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * versions <em>greater than</em> Android 2.3, this flag must be
1184e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * explicitly set if desired.
1194e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
1204e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #getSharedPreferences
1214e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     */
1224e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    public static final int MODE_MULTI_PROCESS = 0x0004;
1234e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick
1244e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    /**
12547847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * Database open flag: when set, the database is opened with write-ahead
12647847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * logging enabled by default.
12747847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *
12847847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #openOrCreateDatabase(String, int, CursorFactory)
12947847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #openOrCreateDatabase(String, int, CursorFactory, DatabaseErrorHandler)
13047847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see SQLiteDatabase#enableWriteAheadLogging
13147847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     */
13247847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown    public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008;
13347847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown
13447847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown    /**
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: automatically create the service as long
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as the binding exists.  Note that while this will create the service,
1374b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * its {@link android.app.Service#onStartCommand}
1384b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * method will still only be called due to an
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * explicit call to {@link #startService}.  Even without that, though,
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this still provides you with access to the service object while the
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service is created.
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
143c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * <p>Note that prior to {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH},
144c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * not supplying this flag would also impact how important the system
145c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * consider's the target service's process to be.  When set, the only way
146c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * for it to be raised was by binding from a service in which case it will
147c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * only be important when that activity is in the foreground.  Now to
148c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * achieve this behavior you must explicitly supply the new flag
149c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * {@link #BIND_ADJUST_WITH_ACTIVITY}.  For compatibility, old applications
150c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * that don't specify {@link #BIND_AUTO_CREATE} will automatically have
151c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the flags {@link #BIND_WAIVE_PRIORITY} and
152c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * {@link #BIND_ADJUST_WITH_ACTIVITY} set for them in order to achieve
153c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the same result.
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_AUTO_CREATE = 0x0001;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: include debugging help for mismatched
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls to unbind.  When this flag is set, the callstack of the following
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #unbindService} call is retained, to be printed if a later
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * incorrect unbind call is made.  Note that doing this requires retaining
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information about the binding that was made for the lifetime of the app,
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resulting in a leak -- this should only be used for debugging.
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_DEBUG_UNBIND = 0x0002;
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16709c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    /**
16809c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * Flag for {@link #bindService}: don't allow this binding to raise
16909c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * the target service's process to the foreground scheduling priority.
170130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * It will still be raised to at least the same memory priority
17109c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * as the client (so that its process will not be killable in any
17209c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * situation where the client is not killable), but for CPU scheduling
17309c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * purposes it may be left in the background.  This only has an impact
17409c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * in the situation where the binding client is a foreground process
17509c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * and the target service is in a background process.
17609c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     */
17709c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    public static final int BIND_NOT_FOREGROUND = 0x0004;
17809c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn
179130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn    /**
180c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: indicates that the client application
181c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * binding to this service considers the service to be more important than
182c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the app itself.  When set, the platform will try to have the out of
183b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * memory killer kill the app before it kills the service it is bound to, though
184c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * this is not guaranteed to be the case.
185c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
186c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_ABOVE_CLIENT = 0x0008;
187c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
188c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
189130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * Flag for {@link #bindService}: allow the process hosting the bound
190130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * service to go through its normal memory management.  It will be
191130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * treated more like a running service, allowing the system to
192130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * (temporarily) expunge the process if low on memory or for some other
193c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * whim it may have, and being more aggressive about making it a candidate
194c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * to be killed (and restarted) if running for a long time.
195c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
196c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010;
197c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
198c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
199c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: don't impact the scheduling or
200c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * memory management priority of the target service's hosting process.
201c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Allows the service's process to be managed on the background LRU list
202c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * just like a regular application process in the background.
203c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
204c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_WAIVE_PRIORITY = 0x0020;
205c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
206c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
207c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: this service is very important to
208c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the client, so should be brought to the foreground process level
209c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * when the client is.  Normally a process can only be raised to the
210c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * visibility level by a client, even if that client is in the foreground.
211c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
212c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_IMPORTANT = 0x0040;
213c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
214c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
215c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: If binding from an activity, allow the
216c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * target service's process importance to be raised based on whether the
217c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * activity is visible to the user, regardless whether another flag is
218c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * used to reduce the amount that the client process's overall importance
219c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * is used to impact it.
220130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     */
2212c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080;
2222c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn
2232c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    /**
224b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * @hide An idea that is not yet implemented.
225b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * Flag for {@link #bindService}: If binding from an activity, consider
226b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * this service to be visible like the binding activity is.  That is,
227b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * it will be treated as something more important to keep around than
228b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * invisible background activities.  This will impact the number of
229b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * recent activities the user can switch between without having them
230b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * restart.  There is no guarantee this will be respected, as the system
231b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * tries to balance such requests from one app vs. the importantance of
232b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     * keeping other apps around.
233b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn     */
234b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn    public static final int BIND_VISIBLE = 0x0100;
235b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn
236b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn    /**
2372c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * Flag for {@link #bindService}: Don't consider the bound service to be
2382c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * visible, even if the caller is visible.
2392c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * @hide
2402c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     */
2412c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    public static final int BIND_NOT_VISIBLE = 0x40000000;
242130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return an AssetManager instance for your application's package. */
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract AssetManager getAssets();
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a Resources instance for your application's package. */
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources getResources();
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return PackageManager instance to find global package information. */
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract PackageManager getPackageManager();
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a ContentResolver instance for your application's package. */
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ContentResolver getContentResolver();
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Looper for the main thread of the current process.  This is
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the thread used to dispatch calls to application components (activities,
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * services, etc).
259f9e989d5f09e72f5c9a59d713521f37d3fdd93ddJeff Brown     * <p>
260f9e989d5f09e72f5c9a59d713521f37d3fdd93ddJeff Brown     * By definition, this method returns the same result as would be obtained
261f9e989d5f09e72f5c9a59d713521f37d3fdd93ddJeff Brown     * by calling {@link Looper#getMainLooper() Looper.getMainLooper()}.
262f9e989d5f09e72f5c9a59d713521f37d3fdd93ddJeff Brown     * </p>
263f9e989d5f09e72f5c9a59d713521f37d3fdd93ddJeff Brown     *
264f9e989d5f09e72f5c9a59d713521f37d3fdd93ddJeff Brown     * @return The main looper.
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Looper getMainLooper();
2674b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the context of the single, global Application object of the
270e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * current process.  This generally should only be used if you need a
271e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Context whose lifecycle is separate from the current context, that is
272e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * tied to the lifetime of the process rather than the current component.
2734b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
274e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Consider for example how this interacts with
27536af79434fb62c26238132eaeda2ec5e732f3c2fBrad Fitzpatrick     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)}:
276e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
277e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from an Activity context, the receiver is being registered
278e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * within that activity.  This means that you are expected to unregister
279e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * before the activity is done being destroyed; in fact if you do not do
280e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * so, the framework will clean up your leaked registration as it removes
281e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the activity and log an error.  Thus, if you use the Activity context
282e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * to register a receiver that is static (global to the process, not
283e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * associated with an Activity instance) then that registration will be
284e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * removed on you at whatever point the activity you used is destroyed.
285e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from the Context returned here, the receiver is being
286e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * registered with the global state associated with your application.  Thus
287e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * it will never be unregistered for you.  This is necessary if the receiver
288e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * is associated with static data, not a particular component.  However
289e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * using the ApplicationContext elsewhere can easily lead to serious leaks
290e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * if you forget to unregister, unbind, etc.
291e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context getApplicationContext();
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
296c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Add a new {@link ComponentCallbacks} to the base application of the
297c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Context, which will be called at the same times as the ComponentCallbacks
298c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * methods of activities and other components are called.  Note that you
299c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * <em>must</em> be sure to use {@link #unregisterComponentCallbacks} when
300c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * appropriate in the future; this will not be removed for you.
301905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     *
302905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     * @param callback The interface to call.  This can be either a
303905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
304c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
305c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public void registerComponentCallbacks(ComponentCallbacks callback) {
306c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn        getApplicationContext().registerComponentCallbacks(callback);
307c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    }
308c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
309c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
310c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Remove a {@link ComponentCallbacks} objec that was previously registered
311c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * with {@link #registerComponentCallbacks(ComponentCallbacks)}.
312c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
313c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public void unregisterComponentCallbacks(ComponentCallbacks callback) {
314c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn        getApplicationContext().unregisterComponentCallbacks(callback);
315c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    }
316c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
317c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized, styled CharSequence from the application's package's
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the CharSequence text
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final CharSequence getText(int resId) {
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getText(resId);
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized string from the application's package's
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the string
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId) {
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId);
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized formatted string from the application's package's
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table, substituting the format arguments as defined in
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link java.util.Formatter} and {@link java.lang.String#format}.
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the format string
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param formatArgs The format arguments that will be used for substitution.
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId, Object... formatArgs) {
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId, formatArgs);
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the base theme for this context.  Note that this should be called
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * before any views are instantiated in the Context (for example before
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calling {@link android.app.Activity#setContentView} or
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater#inflate}).
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resid The style resource describing the theme.
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setTheme(int resid);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
360247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    /** @hide Needed for some internal implementation...  not public because
361247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn     * you can't assume this actually means anything. */
362247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    public int getThemeResId() {
363247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn        return 0;
364247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    }
365247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Theme object associated with this Context.
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources.Theme getTheme();
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int[])}
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int[])
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] attrs) {
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(attrs);
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int, int[])
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int resid, int[] attrs) throws Resources.NotFoundException {
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(resid, attrs);
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs) {
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            set, attrs, defStyleAttr, defStyleRes);
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a class loader you can use to retrieve classes in this package.
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ClassLoader getClassLoader();
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return the name of this application's package. */
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageName();
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
428d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn    /** @hide Return the name of the base context this context is derived from. */
429d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn    public abstract String getBasePackageName();
430d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn
4315c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    /** Return the full application info for this context's package. */
4325c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    public abstract ApplicationInfo getApplicationInfo();
4334b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4353214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
4363214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains the application's
4373214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary resources.
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the resources.
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageResourcePath();
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4473214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
4483214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains application's
4493214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary code and assets.
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the code and assets.
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageCodePath();
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
45923ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * {@hide}
46023ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * Return the full path to the shared prefs file for the given prefs group name.
46123ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     *
46223ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * <p>Note: this is not generally useful for applications, since they should
46323ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * not be directly accessing the file system.
46423ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     */
46523ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    public abstract File getSharedPrefsFile(String name);
46623ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato
46723ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    /**
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve and hold the contents of the preferences file 'name', returning
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a SharedPreferences through which you can retrieve and modify its
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values.  Only one instance of the SharedPreferences object is returned
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to any callers for the same name, meaning they will see each other's
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * edits as soon as they are made.
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Desired preferences file. If a preferences file by this name
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * does not exist, it will be created when you retrieve an
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE}
4794e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * and {@link #MODE_WORLD_WRITEABLE} to control permissions.  The bit
4804e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * {@link #MODE_MULTI_PROCESS} can also be used if multiple processes
4814e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * are mutating the same SharedPreferences file.  {@link #MODE_MULTI_PROCESS}
4824e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * is always on in apps targetting Gingerbread (Android 2.3) and below, and
4834e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * off by default in later versions.
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the single SharedPreferences instance that can be used
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         to retrieve and modify the preference values.
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
4914e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #MODE_MULTI_PROCESS
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SharedPreferences getSharedPreferences(String name,
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode);
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for reading.
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileInputStream Resulting input stream.
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileInputStream#FileInputStream(String)
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileInputStream openFileInput(String name)
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5141506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * Open a private file associated with this Context's application package
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for writing.  Creates the file if it doesn't already exist.
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5171506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * @param name The name of the file to open; can not contain path
5181506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     *             separators.
51992091fa9636403728fe94cc83400495a8612c2d3Nick Kralevich     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
5201506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * default operation, {@link #MODE_APPEND} to append to an existing file,
5211506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
5221506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * permissions.
5231506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     *
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileOutputStream Resulting output stream.
5251506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     *
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_APPEND
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileOutputStream#FileOutputStream(String)
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileOutputStream openFileOutput(String name, int mode)
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete the given private file associated with this Context's
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to delete; can not contain path
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the file was successfully deleted; else
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false.
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.File#delete()
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteFile(String name);
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a file created with
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openFileOutput} is stored.
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file for which you would like to get
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given file.
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFilesDir
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFileStreamPath(String name);
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path to the directory on the filesystem where
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * files created with {@link #openFileOutput} are stored.
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application files.
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFilesDir();
5814b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
583e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
584e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
585acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * Environment.getExternalStorageDirectory()}) where the application can
586e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place persistent files it owns.  These files are private to the
587e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * applications, and not typically visible to the user as media.
5884b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
589e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getFilesDir()} in that these
590e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
591e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
5924b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
593e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
594e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
595e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
596e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
597e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
598e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
599e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
6004b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
6018c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>On devices with multiple users (as described by {@link UserManager}),
6028c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * each user has their own isolated external storage. Applications only
6038c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * have access to the external storage for the user they're running as.</p>
6048c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
605e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a file in
606e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage:</p>
6074b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
608e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
609e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_file}
610e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
611acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * <p>If you supply a non-null <var>type</var> to this function, the returned
612e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * file will be a path to a sub-directory of the given type.  Though these files
613e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are not automatically scanned by the media scanner, you can explicitly
614e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * add them to the media database with
615e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[],
616b7c8c76180dc1abbf55c734ab121a7a2469060f6Ray Chen     *      OnScanCompletedListener) MediaScannerConnection.scanFile}.
617e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Note that this is not the same as
618e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
619e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, which provides
620e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories of media shared by all applications.  The
621e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories returned here are
622acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * owned by the application, and their contents will be removed when the
623e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * application is uninstalled.  Unlike
624e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
625e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, the directory
626e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * returned here will be automatically created for you.
6274b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
628e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a picture in
629e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage and add it to the media database:</p>
6304b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
631e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
632e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_picture}
6334b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
6348c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>Writing to this path requires the
6358c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission.</p>
6368c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
637e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @param type The type of files directory to return.  May be null for
638e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the root of the files directory or one of
639e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the following Environment constants for a subdirectory:
640e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MUSIC},
641e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PODCASTS},
642e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_RINGTONES},
643e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_ALARMS},
644e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
645e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PICTURES}, or
646e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MOVIES}.
6474b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
648e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application files
649e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
650e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
651e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
652e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
653e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getFilesDir
654acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * @see android.os.Environment#getExternalStoragePublicDirectory
655e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
656e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalFilesDir(String type);
6574b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
658e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
659805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * Return the directory where this application's OBB files (if there
660805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * are any) can be found.  Note if the application does not have any OBB
661805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * files, this directory may not exist.
6628c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
6638c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>On devices with multiple users (as described by {@link UserManager}),
6648c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * multiple users may share the same OBB storage location. Applications
6658c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * should ensure that multiple instances running under different users
6668c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * don't interfere with each other.</p>
667805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     */
668805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    public abstract File getObbDir();
669805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn
670805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    /**
6714b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Returns the absolute path to the application specific cache directory
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the filesystem. These files will be ones that get deleted first when the
673e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * device runs low on storage.
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * There is no guarantee when these files will be deleted.
6754b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
676e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <strong>Note: you should not <em>rely</em> on the system deleting these
677e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files for you; you should always have a reasonable maximum, such as 1 MB,
678e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * for the amount of space you consume with cache files, and prune those
679e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files when exceeding that space.</strong>
6804b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application cache files.
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getCacheDir();
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
690e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
691e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
692e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStorageDirectory()} where the application can
693e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place cache files it owns.
6944b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
695e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getCacheDir()} in that these
696e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
697e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
6984b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
699e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
700556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * <li>The platform does not always monitor the space available in external
701556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * storage, and thus may not automatically delete these files.  Currently
702556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * the only time files here will be deleted by the platform is when running
703556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * on {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} or later and
704556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * {@link android.os.Environment#isExternalStorageEmulated()
705556b09e184b891d9542092962ed248616810e054Dianne Hackborn     * Environment.isExternalStorageEmulated()} returns true.  Note that you should
706e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * be managing the maximum space you will use for these anyway, just like
707e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * with {@link #getCacheDir()}.
708e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
709e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
710e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
711e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
712e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
713e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
714e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
7158c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>On devices with multiple users (as described by {@link UserManager}),
7168c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * each user has their own isolated external storage. Applications only
7178c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * have access to the external storage for the user they're running as.</p>
7188c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
7198c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * <p>Writing to this path requires the
7208c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission.</p>
7218c16579994a58c5763788b4f6be864e8a8219575Jeff Sharkey     *
722e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application cache files
723e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
724e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
725e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
726e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
727e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getCacheDir
728e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
729e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalCacheDir();
7304b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
731e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private files associated with
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private files.
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] fileList();
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve, creating if needed, a new directory in which the application
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can place its own custom data files.  You can use the returned File
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * object to create and access files in this directory.  Note that files
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * created through a File object will only be accessible by your own
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application; you can only set the mode of the entire directory, not
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of individual files.
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Name of the directory to retrieve.  This is a directory
7521506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * that is created as part of your application data.
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
7541506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * default operation, {@link #MODE_WORLD_READABLE} and
7551506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * {@link #MODE_WORLD_WRITEABLE} to control permissions.
7561506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     *
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a File object for the requested directory.  The directory
7581506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * will have been created if it does not already exist.
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput(String, int)
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDir(String name, int mode);
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a new private SQLiteDatabase associated with this Context's
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.  Create the database file if it doesn't exist.
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the database.
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     default operation, {@link #MODE_WORLD_READABLE}
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
77247847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param factory An optional factory class that is called to instantiate a
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     cursor when query is called.
7751506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     *
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The contents of a newly created database with the given name.
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
7781506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     *
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
78247847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SQLiteDatabase openOrCreateDatabase(String name,
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode, CursorFactory factory);
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
78974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * Open a new private SQLiteDatabase associated with this Context's
79074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * application package.  Creates the database file if it doesn't exist.
79174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
79274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
79374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * used to handle corruption when sqlite reports database corruption.</p>
79474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
79574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param name The name (unique in the application package) of the database.
79674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
79774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     default operation, {@link #MODE_WORLD_READABLE}
79874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
79947847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
80074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param factory An optional factory class that is called to instantiate a
80174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     cursor when query is called.
80274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
8031506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
80474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @return The contents of a newly created database with the given name.
80574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
8061506921e8e7897be8297365dcaf15f4c6d6eb472Nick Kralevich     *
80774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_PRIVATE
80874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_READABLE
80974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_WRITEABLE
81047847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
81174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #deleteDatabase
81274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     */
81374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    public abstract SQLiteDatabase openOrCreateDatabase(String name,
81474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori            int mode, CursorFactory factory, DatabaseErrorHandler errorHandler);
81574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori
81674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    /**
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete an existing private SQLiteDatabase associated with this Context's
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             database.
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the database was successfully deleted; else false.
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteDatabase(String name);
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a database created with
8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openOrCreateDatabase} is stored.
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the database for which you would like to get
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given database.
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDatabasePath(String name);
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private databases associated with
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private databases.
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] databaseList();
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8544c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDrawable
8558cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.get()} instead.
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8574a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable getWallpaper();
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8614c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#peekDrawable
8628cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.peek()} instead.
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8644a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable peekWallpaper();
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8688cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth()
8698cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumWidth()} instead.
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8714a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumWidth();
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8758cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight()
8768cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumHeight()} instead.
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8784a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumHeight();
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8824c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap)
8838cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
8849530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8859530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8874a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(Bitmap bitmap) throws IOException;
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8914c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream)
8928cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
8939530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8949530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8964a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(InputStream data) throws IOException;
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9008cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#clear
9018cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.clear()} instead.
9029530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
9039530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9054a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void clearWallpaper() throws IOException;
9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
909a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startActivity(Intent, Bundle)} with no options
910a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * specified.
911a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
912a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intent The description of the activity to start.
913a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
914a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @throws ActivityNotFoundException
915a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
916a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivity(Intent, Bundle)}
917a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see PackageManager#resolveActivity
918a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
919a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivity(Intent intent);
920a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
921a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
9228832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #startActivity(Intent)} that allows you to specify the
9238832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the activity will be started for.  This is not available to applications
9248832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
9258832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS_FULL permission.
9268264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @param intent The description of the activity to start.
92779af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user The UserHandle of the user to start this activity for.
9288264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @throws ActivityNotFoundException
9298264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @hide
9308264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     */
93179af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public void startActivityAsUser(Intent intent, UserHandle user) {
9328264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
9338264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    }
9348264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani
9358264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    /**
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Launch a new activity.  You will not receive any information about when
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the activity exits.
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if this method is being called from outside of an
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Activity} Context, then the Intent must include
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * without being started from an existing Activity, there is no existing
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * task in which to place the new activity and thus it needs to be placed
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in its own separate task.
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This method throws {@link ActivityNotFoundException}
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if there was no Activity found to run the given Intent.
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The description of the activity to start.
950a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
9517a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * May be null if there are no options.  See {@link android.app.ActivityOptions}
9527a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * for how to build the Bundle supplied here; there are no supported definitions
9537a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * for building it manually.
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws ActivityNotFoundException
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
95760dd520d37a6d3163747eb9a4266d0a08b207c98Scott Main     * @see #startActivity(Intent)
9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#resolveActivity
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
960a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivity(Intent intent, Bundle options);
961a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
962a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
9638832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #startActivity(Intent, Bundle)} that allows you to specify the
9648832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the activity will be started for.  This is not available to applications
9658832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
9668832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS_FULL permission.
967258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @param intent The description of the activity to start.
968258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @param options Additional options for how the Activity should be started.
969258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * May be null if there are no options.  See {@link android.app.ActivityOptions}
970258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * for how to build the Bundle supplied here; there are no supported definitions
971258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * for building it manually.
97279af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user The UserHandle of the user to start this activity for.
973258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @throws ActivityNotFoundException
974258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @hide
975258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     */
97679af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public void startActivityAsUser(Intent intent, Bundle options, UserHandle userId) {
977258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
978258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    }
979258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
980258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /**
981a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startActivities(Intent[], Bundle)} with no options
982a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * specified.
983a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
984a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intents An array of Intents to be started.
985a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
986a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @throws ActivityNotFoundException
987a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
988a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivities(Intent[], Bundle)}
989a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see PackageManager#resolveActivity
990a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
991a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivities(Intent[] intents);
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
994621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Launch multiple new activities.  This is generally the same as calling
995621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * {@link #startActivity(Intent)} for the first Intent in the array,
996621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * that activity during its creation calling {@link #startActivity(Intent)}
997621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * for the second entry, etc.  Note that unlike that approach, generally
998621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * none of the activities except the last in the array will be created
999621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * at this point, but rather will be created when the user first visits
1000621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * them (due to pressing back from the activity on top).
1001621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
1002621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * <p>This method throws {@link ActivityNotFoundException}
1003621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * if there was no Activity found for <em>any</em> given Intent.  In this
1004621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * case the state of the activity stack is undefined (some Intents in the
1005621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * list may be on it, some not), so you probably want to avoid such situations.
1006621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
1007621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param intents An array of Intents to be started.
1008a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
10097a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * See {@link android.content.Context#startActivity(Intent, Bundle)
10107a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * Context.startActivity(Intent, Bundle)} for more details.
1011621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
1012621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @throws ActivityNotFoundException
1013621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
1014a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivities(Intent[])}
1015621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @see PackageManager#resolveActivity
1016621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
1017a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivities(Intent[] intents, Bundle options);
1018a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
1019a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
1020ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @hide
1021ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * Launch multiple new activities.  This is generally the same as calling
1022ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * {@link #startActivity(Intent)} for the first Intent in the array,
1023ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * that activity during its creation calling {@link #startActivity(Intent)}
1024ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * for the second entry, etc.  Note that unlike that approach, generally
1025ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * none of the activities except the last in the array will be created
1026ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * at this point, but rather will be created when the user first visits
1027ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * them (due to pressing back from the activity on top).
1028ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1029ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * <p>This method throws {@link ActivityNotFoundException}
1030ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * if there was no Activity found for <em>any</em> given Intent.  In this
1031ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * case the state of the activity stack is undefined (some Intents in the
1032ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * list may be on it, some not), so you probably want to avoid such situations.
1033ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1034ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @param intents An array of Intents to be started.
1035ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @param options Additional options for how the Activity should be started.
1036ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @param userHandle The user for whom to launch the activities
1037ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * See {@link android.content.Context#startActivity(Intent, Bundle)
1038ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * Context.startActivity(Intent, Bundle)} for more details.
1039ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1040ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @throws ActivityNotFoundException
1041ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     *
1042ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @see {@link #startActivities(Intent[])}
1043ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     * @see PackageManager#resolveActivity
1044ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani     */
1045ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani    public void startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) {
1046ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
1047ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani    }
1048ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani
1049ea7e91514ee1968d15713e82a5cca745e2c46a05Amith Yamasani    /**
1050a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)}
1051a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * with no options specified.
1052a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
1053a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intent The IntentSender to launch.
1054a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param fillInIntent If non-null, this will be provided as the
1055a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * intent parameter to {@link IntentSender#sendIntent}.
1056a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param flagsMask Intent flags in the original IntentSender that you
1057a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * would like to change.
1058a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param flagsValues Desired values for any bits set in
1059a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * <var>flagsMask</var>
1060a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param extraFlags Always set to 0.
1061a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
1062a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startActivity(Intent)
1063a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startIntentSender(IntentSender, Intent, int, int, int, Bundle)
1064a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
1065a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startIntentSender(IntentSender intent,
1066a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
1067a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            throws IntentSender.SendIntentException;
1068621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
1069621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
1070a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender
1071fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * to start.  If the IntentSender is for an activity, that activity will be started
1072ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn     * as if you had called the regular {@link #startActivity(Intent)}
1073fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * here; otherwise, its associated action will be executed (such as
1074fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * sending a broadcast) as if you had called
1075fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * {@link IntentSender#sendIntent IntentSender.sendIntent} on it.
10764b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
1077fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param intent The IntentSender to launch.
1078fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param fillInIntent If non-null, this will be provided as the
1079fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * intent parameter to {@link IntentSender#sendIntent}.
1080fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsMask Intent flags in the original IntentSender that you
1081fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * would like to change.
1082fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsValues Desired values for any bits set in
1083fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * <var>flagsMask</var>
1084fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param extraFlags Always set to 0.
1085a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
10867a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * See {@link android.content.Context#startActivity(Intent, Bundle)
10877a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * Context.startActivity(Intent, Bundle)} for more details.  If options
10887a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * have also been supplied by the IntentSender, options given here will
10897a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * override any that conflict with those given by the IntentSender.
1090a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
1091a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startActivity(Intent, Bundle)
1092a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startIntentSender(IntentSender, Intent, int, int, int)
1093fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     */
1094fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    public abstract void startIntentSender(IntentSender intent,
1095a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
1096a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Bundle options) throws IntentSender.SendIntentException;
1097fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn
1098fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    /**
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers.  This
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent);
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, allowing
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an optional required permission to be enforced.  This
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
113426b71be600a44341a34079a007ce1492a6f26c1fBrad Fitzpatrick     * @param receiverPermission (optional) String naming a permission that
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent,
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1148f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     * Like {@link #sendBroadcast(Intent, String)}, but also allows specification
1149f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     * of an assocated app op as per {@link android.app.AppOpsManager}.
1150f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     * @hide
1151f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     */
1152f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn    public abstract void sendBroadcast(Intent intent,
1153f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn            String receiverPermission, int appOp);
1154f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn
1155f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn    /**
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, delivering
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * them one at a time to allow more preferred receivers to consume the
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast before it is delivered to less preferred receivers.  This
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission (optional) String naming a permissions that
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Version of {@link #sendBroadcast(Intent)} that allows you to
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receive data back from the broadcast.  This is accomplished by
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supplying your own BroadcastReceiver when calling, which will be
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * treated as a final receiver at the end of the broadcast -- its
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver#onReceive} method will be called with
1184efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be serialized in the same way as calling
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Like {@link #sendBroadcast(Intent)}, this method is
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * asynchronous; it will return before
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resultReceiver.onReceive() is called.
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission String naming a permissions that
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resultReceiver Your own BroadcastReceiver to treat as the final
12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                       receiver of the broadcast.
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler A custom Handler with which to schedule the
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  resultReceiver callback; if null it will be
12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  scheduled in the Context's main thread.
12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialCode An initial value for the result code.  Often
12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    Activity.RESULT_OK.
12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialData An initial value for the result data.  Often
12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    null.
12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialExtras An initial value for the result extras.  Often
12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                      null.
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast(Intent)
1215efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.Activity#RESULT_OK
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission, BroadcastReceiver resultReceiver,
12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Handler scheduler, int initialCode, String initialData,
12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bundle initialExtras);
12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1226f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     * Like {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler,
1227f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     * int, String, android.os.Bundle)}, but also allows specification
1228f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     * of an assocated app op as per {@link android.app.AppOpsManager}.
1229f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     * @hide
1230f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn     */
1231f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn    public abstract void sendOrderedBroadcast(Intent intent,
1232f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn            String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
1233f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn            Handler scheduler, int initialCode, String initialData,
1234f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn            Bundle initialExtras);
1235f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn
1236f51f61269aacdfcf737b2c32b6b216c48ab61e65Dianne Hackborn    /**
12378832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #sendBroadcast(Intent)} that allows you to specify the
12388832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
12398832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
12408832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
12417d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param intent The intent to broadcast
124279af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user UserHandle to send the intent to.
12437d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @see #sendBroadcast(Intent)
12447d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     */
124579af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user);
12467d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
12477d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /**
12488832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the
12498832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
12508832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
12518832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
12525ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12535ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
12545ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               Intent will receive the broadcast.
12555ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
12565ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param receiverPermission (optional) String naming a permission that
12575ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               a receiver must hold in order to receive your broadcast.
12585ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               If null, no permission is required.
12595ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12605ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendBroadcast(Intent, String)
12615ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
12625ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user,
12635ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            String receiverPermission);
12645ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
12655ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
12668832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of
12678832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)}
12688832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that allows you to specify the
12698832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
12708832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
12718832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
12727d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
12737d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
12747d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
12757d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
12767d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *               Intent will receive the broadcast.
127779af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user UserHandle to send the intent to.
12785ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param receiverPermission String naming a permissions that
12795ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               a receiver must hold in order to receive your broadcast.
12805ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               If null, no permission is required.
12817d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
12827d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                       receiver of the broadcast.
12837d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param scheduler A custom Handler with which to schedule the
12847d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                  resultReceiver callback; if null it will be
12857d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                  scheduled in the Context's main thread.
12867d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialCode An initial value for the result code.  Often
12877d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                    Activity.RESULT_OK.
12887d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialData An initial value for the result data.  Often
12897d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                    null.
12907d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
12917d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                      null.
12927d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
12937d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
12947d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     */
129579af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
12965ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
12977d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            int initialCode, String initialData, Bundle initialExtras);
12987d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
12997d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /**
13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent you are sending stays around after the broadcast is complete,
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that others can quickly retrieve that data through the return
13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * all other ways, this behaves the same as
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendBroadcast(Intent)}.
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent will receive the broadcast, and the Intent will be held to
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be re-broadcast to future receivers.
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
1316efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendStickyBroadcast(Intent intent);
13194b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1320efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    /**
1321efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * Version of {@link #sendStickyBroadcast} that allows you to
1322efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * receive data back from the broadcast.  This is accomplished by
1323efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * supplying your own BroadcastReceiver when calling, which will be
1324efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * treated as a final receiver at the end of the broadcast -- its
1325efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link BroadcastReceiver#onReceive} method will be called with
1326efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
1327efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * be serialized in the same way as calling
1328efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link #sendOrderedBroadcast(Intent, String)}.
1329efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1330efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>Like {@link #sendBroadcast(Intent)}, this method is
1331efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * asynchronous; it will return before
1332efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * resultReceiver.onReceive() is called.  Note that the sticky data
1333efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * stored is only the data you initially supply to the broadcast, not
1334efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result of any changes made by the receivers.
1335efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1336efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1337efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1338efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
1339efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *               Intent will receive the broadcast.
1340efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
1341efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                       receiver of the broadcast.
1342efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param scheduler A custom Handler with which to schedule the
1343efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  resultReceiver callback; if null it will be
1344efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  scheduled in the Context's main thread.
1345efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialCode An initial value for the result code.  Often
1346efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    Activity.RESULT_OK.
1347efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialData An initial value for the result data.  Often
1348efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    null.
1349efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
1350efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                      null.
1351efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1352efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent)
1353efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent, String)
1354efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendOrderedBroadcast(Intent, String)
1355efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyBroadcast(Intent)
1356efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.content.BroadcastReceiver
1357efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #registerReceiver
1358efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.app.Activity#RESULT_OK
1359efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     */
1360efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    public abstract void sendStickyOrderedBroadcast(Intent intent,
1361efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            BroadcastReceiver resultReceiver,
1362efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Handler scheduler, int initialCode, String initialData,
1363efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Bundle initialExtras);
1364efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove the data previously sent with {@link #sendStickyBroadcast},
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that it is as if the sticky broadcast had never happened.
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent that was previously broadcast.
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void removeStickyBroadcast(Intent intent);
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13808832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #sendStickyBroadcast(Intent)} that allows you to specify the
13818832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
13828832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
13838832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
13845ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13855ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
13865ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * Intent will receive the broadcast, and the Intent will be held to
13875ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * be re-broadcast to future receivers.
13885ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
13895ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13905ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendBroadcast(Intent)
13915ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
13925ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendStickyBroadcastAsUser(Intent intent, UserHandle user);
13935ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
13945ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
13958832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of
13968832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)}
13978832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that allows you to specify the
13988832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
13998832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
14008832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
14015ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14025ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
14035ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14045ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
14055ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               Intent will receive the broadcast.
14065ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
14075ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
14085ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                       receiver of the broadcast.
14095ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param scheduler A custom Handler with which to schedule the
14105ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                  resultReceiver callback; if null it will be
14115ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                  scheduled in the Context's main thread.
14125ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialCode An initial value for the result code.  Often
14135ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                    Activity.RESULT_OK.
14145ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialData An initial value for the result data.  Often
14155ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                    null.
14165ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
14175ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                      null.
14185ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14195ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
14205ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
14215ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendStickyOrderedBroadcastAsUser(Intent intent,
14225ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            UserHandle user, BroadcastReceiver resultReceiver,
14235ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            Handler scheduler, int initialCode, String initialData,
14245ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            Bundle initialExtras);
14255ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
14265ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
14278832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * Version of {@link #removeStickyBroadcast(Intent)} that allows you to specify the
14288832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * user the broadcast will be sent to.  This is not available to applications
14298832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * that are not pre-installed on the system image.  Using it requires holding
14308832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn     * the INTERACT_ACROSS_USERS permission.
14315ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14325ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
14335ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission in order to use this API.  If you do not hold that
14345ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission, {@link SecurityException} will be thrown.
14355ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14365ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent that was previously broadcast.
14375ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to remove the sticky broadcast from.
14385ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
14395ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendStickyBroadcastAsUser
14405ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
14415ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void removeStickyBroadcastAsUser(Intent intent, UserHandle user);
14425ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
14435ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
1444a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * Register a BroadcastReceiver to be run in the main activity thread.  The
14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>receiver</var> will be called with any broadcast Intent that
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>, in the main application thread.
14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system may broadcast Intents that are "sticky" -- these stay
14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around after the broadcast as finished, to be sent to any later
14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registrations. If your IntentFilter matches one of these sticky
14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intents, that Intent will be returned by this function
14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <strong>and</strong> sent to your <var>receiver</var> as if it had just
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been broadcast.
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>There may be multiple sticky Intents that match <var>filter</var>,
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in which case each of these will be sent to <var>receiver</var>.  In
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this case, only one of these can be returned directly by the function;
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which of these that is returned is arbitrarily decided by the system.
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>If you know the Intent your are registering for is sticky, you can
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supply null for your <var>receiver</var>.  In this case, no receiver is
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registered -- the function simply returns the sticky Intent that
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>.  In the case of multiple matches, the same
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * rules as described above apply.
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14686c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
14696c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * registered with this method will correctly respect the
14706c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
14716c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * Prior to that, it would be ignored and delivered to all matching registered
14726c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * receivers.  Be careful if using this for security.</p>
14736c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     *
1474a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * <p class="note">Note: this method <em>cannot be called from a
1475a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver
1476a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * that is declared in an application's manifest.  It is okay, however, to call
1477a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * this method from another BroadcastReceiver that has itself been registered
1478a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * at run time with {@link #registerReceiver}, since the lifetime of such a
1479a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * registered BroadcastReceiver is tied to the object that registered it.</p>
14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
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     *
14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            IntentFilter filter);
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Register to receive intent broadcasts, to run in the context of
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>scheduler</var>.  See
14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information.  This allows you to enforce permissions on who can
14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast intents to your receiver, or have the receiver run in
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a different thread than the main application thread.
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15046c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
15056c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * registered with this method will correctly respect the
15066c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
15076c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * Prior to that, it would be ignored and delivered to all matching registered
15086c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * receivers.  Be careful if using this for security.</p>
15096c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     *
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param broadcastPermission String naming a permissions that a
15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      broadcaster must hold in order to send an Intent to you.  If null,
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      no permission is required.
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler Handler identifying the thread that will receive
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      the Intent.  If null, the main thread of the process will be used.
15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter)
15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
152620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            IntentFilter filter, String broadcastPermission, Handler scheduler);
152720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn
152820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn    /**
152920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @hide
153020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * Same as {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
153120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * but for a specific user.  This receiver will receiver broadcasts that
153220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * are sent to the requested user.  It
153320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}
153420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * permission.
153520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
153620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param receiver The BroadcastReceiver to handle the broadcast.
153720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param user UserHandle to send the intent to.
153820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param filter Selects the Intent broadcasts to be received.
153920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param broadcastPermission String naming a permissions that a
154020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      broadcaster must hold in order to send an Intent to you.  If null,
154120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      no permission is required.
154220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param scheduler Handler identifying the thread that will receive
154320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      the Intent.  If null, the main thread of the process will be used.
154420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
154520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @return The first sticky intent found that matches <var>filter</var>,
154620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *         or null if there are none.
154720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
154820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler
154920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #sendBroadcast
155020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #unregisterReceiver
155120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     */
155220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn    public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver,
155320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            UserHandle user, IntentFilter filter, String broadcastPermission,
155420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            Handler scheduler);
15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Unregister a previously registered BroadcastReceiver.  <em>All</em>
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * filters that have been registered for this BroadcastReceiver will be
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed.
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to unregister.
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unregisterReceiver(BroadcastReceiver receiver);
15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be started.  The Intent
15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can either contain the complete class name of a specific service
15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation to start, or an abstract definition through the
15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * action and other fields of the kind of service to start.  If this service
15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is not already running, it will be instantiated and started (creating a
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process for it if needed); if it is running then it remains running.
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Every call to this method will result in a corresponding call to
15764b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * the target service's {@link android.app.Service#onStartCommand} method,
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the <var>intent</var> given here.  This provides a convenient way
15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to submit jobs to a service without having to bind and call on to its
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * interface.
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Using startService() overrides the default service lifetime that is
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * managed by {@link #bindService}: it requires the service to remain
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running until {@link #stopService} is called, regardless of whether
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * any clients are connected to it.  Note that calls to startService()
15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not nesting: no matter how many times you call startService(),
15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a single call to {@link #stopService} will stop it.
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system attempts to keep running services around as much as
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * possible.  The only time they should be stopped is if the current
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground application is using so many resources that the service needs
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be killed.  If any errors happen in the service's process, it will
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * automatically be restarted.
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to start the given service.
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to be started.  The Intent may
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.  Additional values
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      may be included in the Intent extras to supply arguments along with
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      this specific start call.
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If the service is being started or is already running, the
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ComponentName} of the actual service that was started is
16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned; else if the service does not exist null is returned.
16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #stopService
16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ComponentName startService(Intent service);
16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be stopped.  If the service is
16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not running, nothing happens.  Otherwise it is stopped.  Note that calls
16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to startService() are not counted -- this stops the service no matter
16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * how many times it was started.
16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if a stopped service still has {@link ServiceConnection}
16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be destroyed until all of these bindings are removed.  See
16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link android.app.Service} documentation for more details on a
16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service's lifecycle.
16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to stop the given service.
16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Description of the service to be stopped.  The Intent may
16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If there is a service matching the given Intent that is already
16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running, then it is stopped and true is returned; else false is returned.
16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean stopService(Intent service);
16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16457767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     * @hide like {@link #startService(Intent)} but for a specific user.
16467767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     */
16477767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public abstract ComponentName startServiceAsUser(Intent service, UserHandle user);
16487767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
16497767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    /**
16507767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     * @hide like {@link #stopService(Intent)} but for a specific user.
16517767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     */
16527767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public abstract boolean stopServiceAsUser(Intent service, UserHandle user);
16537767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
16547767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    /**
16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Connect to an application service, creating it if needed.  This defines
16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a dependency between your application and the service.  The given
1657f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * <var>conn</var> will receive the service object when it is created and be
16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * told if it dies and restarts.  The service will be considered required
16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the system only for as long as the calling context exists.  For
16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * example, if this Context is an Activity that is stopped, the service will
16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be required to continue running until the Activity is resumed.
16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to bind to the given service.
16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1666f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * <p class="note">Note: this method <em>can not be called from a
16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver} component</em>.  A pattern you can use to
1668f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * communicate from a BroadcastReceiver to a Service is to call
16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #startService} with the arguments containing the command to be
16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sent, with the service calling its
16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Service#stopSelf(int)} method when done executing
16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that command.  See the API demo App/Service/Service Start Arguments
16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Controller for an illustration of this.  It is okay, however, to use
1674f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * this method from a BroadcastReceiver that has been registered with
16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is tied to another object (the one that registered it).</p>
16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to connect to.  The Intent may
16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name, or a logical
16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn Receives information as the service is started and stopped.
168379b3317b775810bac088b0998c48eb6506e2578cChristopher Tate     *      This must be a valid ServiceConnection object; it must not be null.
16844b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @param flags Operation options for the binding.  May be 0,
1685c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND},
1686c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_NOT_FOREGROUND}, {@link #BIND_ABOVE_CLIENT},
1687c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_ALLOW_OOM_MANAGEMENT}, or
1688c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_WAIVE_PRIORITY}.
16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If you have successfully bound to the service, true is returned;
16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false is returned if the connection is not made so you will not
16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         receive the service object.
16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unbindService
16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #BIND_AUTO_CREATE
16984b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_DEBUG_UNBIND
16994b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_NOT_FOREGROUND
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean bindService(Intent service, ServiceConnection conn,
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags);
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17057d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * Same as {@link #bindService(Intent, ServiceConnection, int)}, but with an explicit userHandle
170637ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     * argument for use by system server and other multi-user aware code.
170737ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     * @hide
170837ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     */
170927b89e6658a0d233a53f5d7ca20dc57fec82d955Amith Yamasani    public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags, UserHandle user) {
171037ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
171137ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani    }
171237ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani
171337ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani    /**
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Disconnect from an application service.  You will no longer receive
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls as the service is restarted, and the service is now allowed to
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * stop at any time.
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn The connection interface previously supplied to
171979b3317b775810bac088b0998c48eb6506e2578cChristopher Tate     *             bindService().  This parameter must not be null.
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unbindService(ServiceConnection conn);
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Start executing an {@link android.app.Instrumentation} class.  The given
17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instrumentation component will be run by killing its target application
17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (if currently running), starting the target process, instantiating the
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation component, and then letting it drive the application.
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function is not synchronous -- it returns as soon as the
17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation has started and while it is running.
17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Instrumentation is normally only allowed to run against a package
17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is either unsigned or signed with a signature that the
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the instrumentation package is also signed with (ensuring the target
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * trusts the instrumentation).
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param className Name of the Instrumentation component to be run.
17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param profileFile Optional path to write profiling data as the
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation runs, or null for no profiling.
17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param arguments Additional optional arguments to pass to the
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation, or null.
17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true if the instrumentation was successfully started,
17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * else false if it could not be found.
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean startInstrumentation(ComponentName className,
17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String profileFile, Bundle arguments);
17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the handle to a system-level service by name. The class of the
17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned object varies by the requested name. Currently available names
17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are:
17554b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dl>
17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WINDOW_SERVICE} ("window")
17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> The top-level window manager in which you can place custom
17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  windows.  The returned object is a {@link android.view.WindowManager}.
17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  in this context.
17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.ActivityManager} for interacting with the
17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  global activity state of the system.
17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #POWER_SERVICE} ("power")
17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.PowerManager} for controlling power
17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  management.
17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ALARM_SERVICE} ("alarm")
17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  time of your choosing.
17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.NotificationManager} for informing the user
17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   of background events.
17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LOCATION_SERVICE} ("location")
17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.location.LocationManager} for controlling location
17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   (e.g., GPS) updates.
17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #SEARCH_SERVICE} ("search")
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.SearchManager} for handling search.
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  hardware.
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  handling management of network connections.
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WIFI_SERVICE} ("wifi")
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi connectivity.
17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for management of input methods.
179453332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dt> {@link #UI_MODE_SERVICE} ("uimode")
179553332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dd> An {@link android.app.UiModeManager} for controlling UI modes.
17967083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * <dt> {@link #DOWNLOAD_SERVICE} ("download")
1797d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * </dl>
17994b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note:  System services obtained via this API may be closely associated with
18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the Context in which they are obtained from.  In general, do not share the
18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service objects between various different contexts (Activities, Applications,
18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Services, Providers, etc.)
18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the desired service.
18064b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The service or null if the name does not exist.
18084b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WINDOW_SERVICE
18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LAYOUT_INFLATER_SERVICE
18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ACTIVITY_SERVICE
18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #POWER_SERVICE
18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.PowerManager
18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ALARM_SERVICE
18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #NOTIFICATION_SERVICE
18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #KEYGUARD_SERVICE
18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LOCATION_SERVICE
18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SEARCH_SERVICE
18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SENSOR_SERVICE
18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
1829c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #STORAGE_SERVICE
1830b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #VIBRATOR_SERVICE
18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #CONNECTIVITY_SERVICE
18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WIFI_SERVICE
18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #AUDIO_SERVICE
18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
1839b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see #MEDIA_ROUTER_SERVICE
1840b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see android.media.MediaRouter
18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #TELEPHONY_SERVICE
18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #INPUT_METHOD_SERVICE
18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.inputmethod.InputMethodManager
184553332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #UI_MODE_SERVICE
184653332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see android.app.UiModeManager
18477083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * @see #DOWNLOAD_SERVICE
1848d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * @see android.app.DownloadManager
18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Object getSystemService(String name);
18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.PowerManager} for controlling power management,
18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * including "wake locks," which let you keep the device on while
18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * you're running long tasks.
18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String POWER_SERVICE = "power";
18594b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.WindowManager} for accessing the system's window
18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * manager.
18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WINDOW_SERVICE = "window";
18694b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater} for inflating layout resources in this
18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * context.
18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
18794b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
1882603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * {@link android.accounts.AccountManager} for receiving intents at a
1883603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * time of your choosing.
1884603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     *
1885603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see #getSystemService
1886603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see android.accounts.AccountManager
1887603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     */
1888603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public static final String ACCOUNT_SERVICE = "account";
18894b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1890603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    /**
1891603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * Use with {@link #getSystemService} to retrieve a
18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.ActivityManager} for interacting with the global
18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * system state.
18949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ACTIVITY_SERVICE = "activity";
18994b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.AlarmManager} for receiving intents at a
19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * time of your choosing.
19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ALARM_SERVICE = "alarm";
19094b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for informing the user of
19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * background events.
19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String NOTIFICATION_SERVICE = "notification";
19194b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
192275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * {@link android.view.accessibility.AccessibilityManager} for giving the user
192375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * feedback for UI events through the registered event listeners.
192475986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     *
192575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see #getSystemService
192675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see android.view.accessibility.AccessibilityManager
192775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     */
192875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    public static final String ACCESSIBILITY_SERVICE = "accessibility";
19294b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
193075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    /**
193175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * Use with {@link #getSystemService} to retrieve a
19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for controlling keyguard.
19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String KEYGUARD_SERVICE = "keyguard";
19384b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.location.LocationManager} for controlling location
19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * updates.
19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LOCATION_SERVICE = "location";
1948a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
1949a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    /**
1950a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * Use with {@link #getSystemService} to retrieve a
1951a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * {@link android.location.CountryDetector} for detecting the country that
1952a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * the user is in.
1953a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     *
1954a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * @hide
1955a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     */
1956a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    public static final String COUNTRY_DETECTOR = "country_detector";
1957a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.SearchManager} for handling searches.
19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SEARCH_SERVICE = "search";
19664b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.hardware.SensorManager} for accessing sensors.
19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SENSOR_SERVICE = "sensor";
19754b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1977c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
197802c8730c1bf19daf48bec8c6995df676a00a73b1Kenny Root     * android.os.storage.StorageManager} for accessing system storage
1979c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * functions.
1980c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     *
1981c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #getSystemService
1982b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
1983c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     */
1984c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    public static final String STORAGE_SERVICE = "storage";
1985c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat
1986c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    /**
19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * com.android.server.WallpaperService for accessing wallpapers.
19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WALLPAPER_SERVICE = "wallpaper";
19934b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Vibrator} for interacting with the vibration hardware.
19979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
20009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String VIBRATOR_SERVICE = "vibrator";
20029e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt
20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.StatusBarManager} for interacting with the status bar.
20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.StatusBarManager
20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String STATUS_BAR_SERVICE = "statusbar";
20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.ConnectivityManager} for handling management of
20169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * network connections.
20179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
20209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CONNECTIVITY_SERVICE = "connectivity";
20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
20258662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * android.os.IUpdateLock} for managing runtime sequences that
20268662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * must not be interrupted by headless OTA application or similar.
20278662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     *
20288662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @hide
20298662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @see #getSystemService
20308662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @see android.os.UpdateLock
20318662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     */
20328662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate    public static final String UPDATE_LOCK_SERVICE = "updatelock";
20338662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate
20348662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate    /**
20358662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * Use with {@link #getSystemService} to retrieve a {@link
2036d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * android.net.NetworkManagementService} for handling management of
2037d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * system network services
2038d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     *
2039d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @hide
2040d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see #getSystemService
2041d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see android.net.NetworkManagementService
2042d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     */
2043d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    public static final String NETWORKMANAGEMENT_SERVICE = "network_management";
2044d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat
2045eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    /** {@hide} */
204675279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    public static final String NETWORK_STATS_SERVICE = "netstats";
204775279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    /** {@hide} */
2048eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public static final String NETWORK_POLICY_SERVICE = "netpolicy";
2049eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
2050d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    /**
2051d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.wifi.WifiManager} for handling management of
20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi access.
20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WIFI_SERVICE = "wifi";
20594b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
20609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
206155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Use with {@link #getSystemService} to retrieve a {@link
206255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * android.net.wifi.p2p.WifiP2pManager} for handling management of
2063651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Wi-Fi peer-to-peer connections.
206455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
206555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #getSystemService
206655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see android.net.wifi.p2p.WifiP2pManager
206755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
206855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_SERVICE = "wifip2p";
206955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
207055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
20717d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * Use with {@link #getSystemService} to retrieve a {@link
207260309fc7bb95c9b3fc3e0ed60aa1eeb35bd13a68Irfan Sheriff     * android.net.nsd.NsdManager} for handling management of network service
20737d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * discovery
20747d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     *
20757d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * @see #getSystemService
207660309fc7bb95c9b3fc3e0ed60aa1eeb35bd13a68Irfan Sheriff     * @see android.net.nsd.NsdManager
20777d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     */
20787d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff    public static final String NSD_SERVICE = "servicediscovery";
20797d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff
20807d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff    /**
20819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
20829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.media.AudioManager} for handling management of volume,
20839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * ringer modes and audio routing.
20844b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
20859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
20879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String AUDIO_SERVICE = "audio";
20894b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
20909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
2092b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * {@link android.media.MediaRouter} for controlling and managing
2093b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * routing of media.
2094b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     *
2095b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see #getSystemService
2096b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see android.media.MediaRouter
2097b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     */
2098b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn    public static final String MEDIA_ROUTER_SERVICE = "media_router";
2099b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn
2100b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn    /**
2101b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * Use with {@link #getSystemService} to retrieve a
21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.telephony.TelephonyManager} for handling management the
21039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * telephony features of the device.
21044b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
21059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
21069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
21079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String TELEPHONY_SERVICE = "phone";
21099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
21129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.text.ClipboardManager} for accessing and modifying
21139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the contents of the global clipboard.
21144b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
21159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
21169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.text.ClipboardManager
21179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CLIPBOARD_SERVICE = "clipboard";
21199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21214b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
21229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.inputmethod.InputMethodManager} for accessing input
21239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * methods.
21249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String INPUT_METHOD_SERVICE = "input_method";
21289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
2131988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * {@link android.view.textservice.TextServicesManager} for accessing
2132988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * text services.
2133988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     *
2134988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @see #getSystemService
2135988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
2136988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
2137988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
2138988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
2139988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Use with {@link #getSystemService} to retrieve a
2140e38d58bf890c03eb034afd18c62c730c7d735f1cDan Egnor     * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets.
21419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
21439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
21449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2145c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public static final String APPWIDGET_SERVICE = "appwidget";
2146952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
21479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2148487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * Use with {@link #getSystemService} to retrieve an
21494528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tate     * {@link android.app.backup.IBackupManager IBackupManager} for communicating
2150487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * with the backup mechanism.
21517f2054392e9957d3ba8579ef08c29cfb27df564eDianne Hackborn     * @hide
21524b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2153487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * @see #getSystemService
2154487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     */
2155487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    public static final String BACKUP_SERVICE = "backup";
2156952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
2157952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    /**
2158952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * Use with {@link #getSystemService} to retrieve a
21591337b012f8e18c725b1ec17b456dc57a084d594dDan Egnor     * {@link android.os.DropBoxManager} instance for recording
2160952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * diagnostic logs.
2161952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * @see #getSystemService
2162952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     */
2163952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    public static final String DROPBOX_SERVICE = "dropbox";
2164952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
2165487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    /**
21664b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
216787bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn     * {@link android.app.admin.DevicePolicyManager} for working with global
2168d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * device policy management.
2169d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     *
2170d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * @see #getSystemService
2171d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     */
2172d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    public static final String DEVICE_POLICY_SERVICE = "device_policy";
2173d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn
2174d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    /**
217553332883543868fb83e111a07306368b7772b340Tobias Haamel     * Use with {@link #getSystemService} to retrieve a
217653332883543868fb83e111a07306368b7772b340Tobias Haamel     * {@link android.app.UiModeManager} for controlling UI modes.
217753332883543868fb83e111a07306368b7772b340Tobias Haamel     *
217853332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #getSystemService
217953332883543868fb83e111a07306368b7772b340Tobias Haamel     */
218053332883543868fb83e111a07306368b7772b340Tobias Haamel    public static final String UI_MODE_SERVICE = "uimode";
218153332883543868fb83e111a07306368b7772b340Tobias Haamel
218253332883543868fb83e111a07306368b7772b340Tobias Haamel    /**
2183a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * Use with {@link #getSystemService} to retrieve a
2184d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * {@link android.app.DownloadManager} for requesting HTTP downloads.
2185a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     *
2186a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * @see #getSystemService
2187a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     */
2188a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    public static final String DOWNLOAD_SERVICE = "download";
2189a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard
2190a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    /**
21912d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * Use with {@link #getSystemService} to retrieve a
219250b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * {@link android.nfc.NfcManager} for using NFC.
219350b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     *
219450b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * @see #getSystemService
219550b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     */
219650b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    public static final String NFC_SERVICE = "nfc";
219750b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly
219850b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    /**
219950b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * Use with {@link #getSystemService} to retrieve a
22001abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * {@link android.bluetooth.BluetoothAdapter} for using Bluetooth.
22011abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     *
22021abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * @see #getSystemService
22031abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     */
22041abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh    public static final String BLUETOOTH_SERVICE = "bluetooth";
22051abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh
22061abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh    /**
22071abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * Use with {@link #getSystemService} to retrieve a
22082d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * {@link android.net.sip.SipManager} for accessing the SIP related service.
22092d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     *
22102d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * @see #getSystemService
22112d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     */
22122d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /** @hide */
22132d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    public static final String SIP_SERVICE = "sip";
22142d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang
22152d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /**
2216e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Use with {@link #getSystemService} to retrieve a {@link
2217c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * android.hardware.usb.UsbManager} for access to USB devices (as a USB host)
2218e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * and for controlling this device's behavior as a USB device.
2219e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
2220e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @see #getSystemService
2221c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * @see android.harware.usb.UsbManager
2222e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
2223e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public static final String USB_SERVICE = "usb";
2224e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
2225e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
2226b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * Use with {@link #getSystemService} to retrieve a {@link
2227b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * android.hardware.SerialManager} for access to serial ports.
2228b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     *
2229b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @see #getSystemService
2230b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @see android.harware.SerialManager
2231b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     *
2232b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @hide
2233b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     */
2234b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood    public static final String SERIAL_SERVICE = "serial";
2235b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood
2236b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood    /**
22379df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * Use with {@link #getSystemService} to retrieve a
22389df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * {@link android.hardware.input.InputManager} for interacting with input devices.
22399df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     *
22409df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * @see #getSystemService
22419df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * @see android.hardware.input.InputManager
22429df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     */
22439df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown    public static final String INPUT_SERVICE = "input";
22449df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown
22459df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown    /**
224607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * Use with {@link #getSystemService} to retrieve a
2247fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * {@link android.hardware.display.DisplayManager} for interacting with display devices.
2248fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     *
2249fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * @see #getSystemService
2250fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * @see android.hardware.display.DisplayManager
2251fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     */
2252fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown    public static final String DISPLAY_SERVICE = "display";
2253fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown
2254fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown    /**
2255fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * Use with {@link #getSystemService} to retrieve a
225607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * {@link android.os.SchedulingPolicyService} for managing scheduling policy.
225707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     *
225807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @see #getSystemService
225907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @see android.os.SchedulingPolicyService
226007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     *
226107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @hide
226207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     */
226307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten    public static final String SCHEDULING_POLICY_SERVICE = "scheduling_policy";
226407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten
226507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten    /**
2266258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * Use with {@link #getSystemService} to retrieve a
2267258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * {@link android.os.UserManager} for managing users on devices that support multiple users.
2268258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     *
2269258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @see #getSystemService
2270258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @see android.os.UserManager
2271258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     */
2272258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    public static final String USER_SERVICE = "user";
2273258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
2274258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /**
2275a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     * Use with {@link #getSystemService} to retrieve a
2276a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     * {@link android.app.AppOpsManager} for tracking application operations
2277a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     * on the device.
2278a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     *
2279a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     * @see #getSystemService
2280a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     * @see android.app.AppOpsManager
2281a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     *
2282a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     * @hide
2283a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn     */
2284a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn    public static final String APP_OPS_SERVICE = "appops";
2285a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn
2286a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn    /**
22879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the given permission is allowed for a particular
22889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process and user ID running in the system.
22899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be > 0.
22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
22969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
22979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
22989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
23009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
23019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkPermission(String permission, int pid, int uid);
23039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC you are handling has been
23069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is basically the same as calling
23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkPermission(String, int, int)} with the pid and uid returned
23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by {@link android.os.Binder#getCallingPid} and
23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.Binder#getCallingUid}.  One important difference
23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is that if you are not currently processing an IPC, this function
23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.  This is done to protect against accidentally
23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to avoid this protection.
23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
23189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission
23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingPermission(String permission);
23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> have been
23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is the same as
23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingPermission}, except it grants your own permissions
23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfPermission(String permission);
23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the given permission is not allowed for a particular process
23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and user ID running in the system, throw a {@link SecurityException}.
23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission(String, int, int)
23569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforcePermission(
23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, int pid, int uid, String message);
23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC you are handling has not been
23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission, throw a {@link
23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforcePermission(String, int, int, String)} with the
23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid and uid returned by {@link android.os.Binder#getCallingPid}
23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and {@link android.os.Binder#getCallingUid}.  One important
23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * difference is that if you are not currently processing an IPC,
23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this function will always throw the SecurityException.  This is
23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * done to protect against accidentally leaking permissions; you
23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can use {@link #enforceCallingOrSelfPermission} to avoid this
23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * protection.
23729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission(String)
23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingPermission(
23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
23809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If neither you nor the calling process of an IPC you are
23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * handling has been granted a particular permission, throw a
23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link SecurityException}.  This is the same as {@link
23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingPermission}, except it grants your own
23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission(String)
23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfPermission(
23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Grant permission to access a specific Uri to another package, regardless
23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of whether that package has general permission to access the Uri's
24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * content provider.  This can be used to grant specific, temporary
24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions, typically in response to user interaction (such as the
24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user opening an attachment that you would like someone else to
24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * display).
24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * start an activity instead of this function directly.  If you use this
24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * function directly, you should be sure to call
24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #revokeUriPermission} when the target should no longer be allowed
24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to access it.
24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>To succeed, the content provider owning the Uri must have set the
24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * grantUriPermissions} attribute in its manifest or included the
24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestGrantUriPermission
24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;grant-uri-permissions&gt;} tag.
24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param toPackage The package you would like to allow to access the Uri.
24219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to grant access to.
24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #revokeUriPermission
24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void grantUriPermission(String toPackage, Uri uri,
24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int modeFlags);
24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove all permissions to access a particular content provider Uri
24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that were previously added with {@link #grantUriPermission}.  The given
24369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Uri will match all previously granted Uris that are the same or a
24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sub-path of the given Uri.  That is, revoking "content://foo/one" will
24389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * revoke both "content://foo/target" and "content://foo/target/sub", but not
24399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "content://foo".
24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to revoke access to.
24429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
24439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #grantUriPermission
24499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void revokeUriPermission(Uri uri, int modeFlags);
24519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether a particular process and user ID has been granted
24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This only checks for permissions
24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have been explicitly granted -- if the given process/uid has
24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * more general access to the URI's content provider then this check will
24579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * always fail.
24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
24619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed to access that uri, or
24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
24749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process and user ID has been
24779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI.  This is basically
24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the same as calling {@link #checkUriPermission(Uri, int, int,
24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * int)} with the pid and uid returned by {@link
24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
24959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
24979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> has been granted
25009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This is the same as
25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingUriPermission}, except it grants your own permissions
25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Check both a Uri and normal permission.  This allows you to perform
25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #checkPermission} and {@link #checkUriPermission} in one
25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
25299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri or holds one of the given permissions, or
25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, String readPermission,
25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String writePermission, int pid, int uid, int modeFlags);
25419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If a particular process and user ID has not been granted
25449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
25459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This only checks for permissions that have
25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been explicitly granted -- if the given process/uid has more
25479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * general access to the URI's content provider then this check
25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
25519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
25529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
25539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
25549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int pid, int uid, int modeFlags, String message);
25639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process and user ID has not been granted
25669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
25679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
25689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforceUriPermission(Uri, int, int, int, String)} with
25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the pid and uid returned by {@link
25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
25719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
25739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always throw a SecurityException.
25749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
25769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission(Uri, int)
25829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingUriPermission(
25849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
25859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC <em>or you</em> has not been
25889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI, throw {@link
25899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is the same as {@link
25909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingUriPermission}, except it grants your own
25919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
25934b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfUriPermission(Uri, int)
26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfUriPermission(
26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enforce both a Uri and normal permission.  This allows you to perform
26079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
26089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
26094b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
26169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
26179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
26189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
26209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
26219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
26229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
26239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, String, String, int, int, int)
26259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, String readPermission, String writePermission,
26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int pid, int uid, int modeFlags, String message);
26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: include the application
26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * code with the context.  This means loading code into the caller's
26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process, so that {@link #getClassLoader()} can be used to instantiate
26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application's classes.  Setting this flags imposes security
26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on what application context you can access; if the
26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * requested application can not be safely loaded into your process,
26379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * java.lang.SecurityException will be thrown.  If this flag is not set,
26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there will be no restrictions on the packages that can be loaded,
26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * but {@link #getClassLoader} will always return the default system
26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class loader.
26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
26439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: ignore any security
26469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on the Context being requested, allowing it to always
26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be loaded into a process even when it isn't safe to do so.  Use
26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with extreme care!
26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
26524b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
2653870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
2654870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Flag for use with {@link #createPackageContext}: a restricted context may
2655870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * disable specific features. For instance, a View associated with a restricted
2656870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * context would ignore particular XML attributes.
2657870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2658870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public static final int CONTEXT_RESTRICTED = 0x00000004;
26599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a new Context object for the given application name.  This
26629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Context is the same as what the named application gets when it is
26639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * launched, containing the same resources and class loader.  Each call to
26649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method returns a new instance of a Context object; Context objects
26659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not shared, however they share common state (Resources, ClassLoader,
26669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * etc) so the Context instance itself is fairly lightweight.
26679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
26699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application with the given package name.
26709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link java.lang.SecurityException} if the Context requested
26729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can not be loaded into the caller's process for security reasons (see
26739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #CONTEXT_INCLUDE_CODE} for more information}.
26749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName Name of the application's package.
26769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
26779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *              or {@link #CONTEXT_IGNORE_SECURITY}.
26789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A Context for the application.
26809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
26819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws java.lang.SecurityException
26829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws PackageManager.NameNotFoundException if there is no application with
26839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given package name
26849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context createPackageContext(String packageName,
26869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags) throws PackageManager.NameNotFoundException;
2687870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy
2688870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
26896d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * Similar to {@link #createPackageContext(String, int)}, but with a
26906d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * different {@link UserHandle}. For example, {@link #getContentResolver()}
26916d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * will open any {@link Uri} as the given user.
26926d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     *
26936d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     * @hide
26946d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey     */
26956d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey    public abstract Context createPackageContextAsUser(
26966d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey            String packageName, int flags, UserHandle user)
26976d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey            throws PackageManager.NameNotFoundException;
26986d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey
26996d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey    /**
2700a75a883fe9ea1790803148f0a561473073e3f264Jim Miller     * Get the userId associated with this context
2701a75a883fe9ea1790803148f0a561473073e3f264Jim Miller     * @return user id
2702a75a883fe9ea1790803148f0a561473073e3f264Jim Miller     *
2703a75a883fe9ea1790803148f0a561473073e3f264Jim Miller     * @hide
2704a75a883fe9ea1790803148f0a561473073e3f264Jim Miller     */
2705a75a883fe9ea1790803148f0a561473073e3f264Jim Miller    public abstract int getUserId();
2706a75a883fe9ea1790803148f0a561473073e3f264Jim Miller
2707a75a883fe9ea1790803148f0a561473073e3f264Jim Miller    /**
2708756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * Return a new Context object for the current Context but whose resources
2709756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * are adjusted to match the given Configuration.  Each call to this method
2710a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * returns a new instance of a Context object; Context objects are not
2711756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * shared, however common state (ClassLoader, other Resources for the
2712756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * same configuration) may be so the Context itself can be fairly lightweight.
2713756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     *
2714756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * @param overrideConfiguration A {@link Configuration} specifying what
2715756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * values to modify in the base Configuration of the original Context's
2716756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * resources.  If the base configuration changes (such as due to an
2717756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * orientation change), the resources of this context will also change except
2718756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * for those that have been explicitly overridden with a value here.
2719756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     *
2720a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @return A Context with the given configuration override.
2721756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     */
2722756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    public abstract Context createConfigurationContext(Configuration overrideConfiguration);
2723756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn
2724756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    /**
2725a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * Return a new Context object for the current Context but whose resources
2726a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * are adjusted to match the metrics of the given Display.  Each call to this method
2727a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * returns a new instance of a Context object; Context objects are not
2728a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * shared, however common state (ClassLoader, other Resources for the
2729a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * same configuration) may be so the Context itself can be fairly lightweight.
2730a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2731a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * The returned display Context provides a {@link WindowManager}
2732a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * (see {@link #getSystemService(String)}) that is configured to show windows
2733a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * on the given display.  The WindowManager's {@link WindowManager#getDefaultDisplay}
2734a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * method can be used to retrieve the Display from the returned Context.
2735a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2736a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @param display A {@link Display} object specifying the display
2737a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * for whose metrics the Context's resources should be tailored and upon which
2738a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * new windows should be shown.
2739a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2740a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @return A Context for the display.
2741a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     */
2742a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public abstract Context createDisplayContext(Display display);
2743a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown
2744a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    /**
274598365d7663cbd82979a5700faf0050220b01084dJeff Brown     * Gets the compatibility info holder for this context.  This information
274698365d7663cbd82979a5700faf0050220b01084dJeff Brown     * is provided on a per-application basis and is used to simulate lower density
274798365d7663cbd82979a5700faf0050220b01084dJeff Brown     * display metrics for legacy applications.
274898365d7663cbd82979a5700faf0050220b01084dJeff Brown     *
2749a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @param displayId The display id for which to get compatibility info.
275098365d7663cbd82979a5700faf0050220b01084dJeff Brown     * @return The compatibility info holder, or null if not required by the application.
275198365d7663cbd82979a5700faf0050220b01084dJeff Brown     * @hide
275298365d7663cbd82979a5700faf0050220b01084dJeff Brown     */
2753a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public abstract CompatibilityInfoHolder getCompatibilityInfo(int displayId);
275498365d7663cbd82979a5700faf0050220b01084dJeff Brown
275598365d7663cbd82979a5700faf0050220b01084dJeff Brown    /**
2756870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Indicates whether this Context is restricted.
27574b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2758870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @return True if this Context is restricted, false otherwise.
27594b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2760870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @see #CONTEXT_RESTRICTED
2761870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2762870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public boolean isRestricted() {
2763870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy        return false;
2764870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    }
27659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2766