ContextWrapper.java revision 20e809870d8ac1e5b848f2daf51b2272ef89bdfc
1/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.content;
18
19import android.app.Activity;
20import android.app.ActivityManagerNative;
21import android.app.LoadedApk;
22import android.content.pm.ApplicationInfo;
23import android.content.pm.PackageManager;
24import android.content.res.AssetManager;
25import android.content.res.Configuration;
26import android.content.res.Resources;
27import android.database.DatabaseErrorHandler;
28import android.database.sqlite.SQLiteDatabase;
29import android.database.sqlite.SQLiteDatabase.CursorFactory;
30import android.graphics.Bitmap;
31import android.graphics.drawable.Drawable;
32import android.net.Uri;
33import android.os.Bundle;
34import android.os.Handler;
35import android.os.Looper;
36import android.os.RemoteException;
37import android.os.UserHandle;
38import android.view.CompatibilityInfoHolder;
39import android.view.Display;
40
41import java.io.File;
42import java.io.FileInputStream;
43import java.io.FileNotFoundException;
44import java.io.FileOutputStream;
45import java.io.IOException;
46import java.io.InputStream;
47
48/**
49 * Proxying implementation of Context that simply delegates all of its calls to
50 * another Context.  Can be subclassed to modify behavior without changing
51 * the original Context.
52 */
53public class ContextWrapper extends Context {
54    Context mBase;
55
56    public ContextWrapper(Context base) {
57        mBase = base;
58    }
59
60    /**
61     * Set the base context for this ContextWrapper.  All calls will then be
62     * delegated to the base context.  Throws
63     * IllegalStateException if a base context has already been set.
64     *
65     * @param base The new base context for this wrapper.
66     */
67    protected void attachBaseContext(Context base) {
68        if (mBase != null) {
69            throw new IllegalStateException("Base context already set");
70        }
71        mBase = base;
72    }
73
74    /**
75     * @return the base context as set by the constructor or setBaseContext
76     */
77    public Context getBaseContext() {
78        return mBase;
79    }
80
81    @Override
82    public AssetManager getAssets() {
83        return mBase.getAssets();
84    }
85
86    @Override
87    public Resources getResources()
88    {
89        return mBase.getResources();
90    }
91
92    @Override
93    public PackageManager getPackageManager() {
94        return mBase.getPackageManager();
95    }
96
97    @Override
98    public ContentResolver getContentResolver() {
99        return mBase.getContentResolver();
100    }
101
102    @Override
103    public Looper getMainLooper() {
104        return mBase.getMainLooper();
105    }
106
107    @Override
108    public Context getApplicationContext() {
109        return mBase.getApplicationContext();
110    }
111
112    @Override
113    public void setTheme(int resid) {
114        mBase.setTheme(resid);
115    }
116
117    /** @hide */
118    @Override
119    public int getThemeResId() {
120        return mBase.getThemeResId();
121    }
122
123    @Override
124    public Resources.Theme getTheme() {
125        return mBase.getTheme();
126    }
127
128    @Override
129    public ClassLoader getClassLoader() {
130        return mBase.getClassLoader();
131    }
132
133    @Override
134    public String getPackageName() {
135        return mBase.getPackageName();
136    }
137
138    @Override
139    public ApplicationInfo getApplicationInfo() {
140        return mBase.getApplicationInfo();
141    }
142
143    @Override
144    public String getPackageResourcePath() {
145        return mBase.getPackageResourcePath();
146    }
147
148    @Override
149    public String getPackageCodePath() {
150        return mBase.getPackageCodePath();
151    }
152
153    /** @hide */
154    @Override
155    public File getSharedPrefsFile(String name) {
156        return mBase.getSharedPrefsFile(name);
157    }
158
159    @Override
160    public SharedPreferences getSharedPreferences(String name, int mode) {
161        return mBase.getSharedPreferences(name, mode);
162    }
163
164    @Override
165    public FileInputStream openFileInput(String name)
166        throws FileNotFoundException {
167        return mBase.openFileInput(name);
168    }
169
170    @Override
171    public FileOutputStream openFileOutput(String name, int mode)
172        throws FileNotFoundException {
173        return mBase.openFileOutput(name, mode);
174    }
175
176    @Override
177    public boolean deleteFile(String name) {
178        return mBase.deleteFile(name);
179    }
180
181    @Override
182    public File getFileStreamPath(String name) {
183        return mBase.getFileStreamPath(name);
184    }
185
186    @Override
187    public String[] fileList() {
188        return mBase.fileList();
189    }
190
191    @Override
192    public File getFilesDir() {
193        return mBase.getFilesDir();
194    }
195
196    @Override
197    public File getExternalFilesDir(String type) {
198        return mBase.getExternalFilesDir(type);
199    }
200
201    @Override
202    public File getObbDir() {
203        return mBase.getObbDir();
204    }
205
206    @Override
207    public File getCacheDir() {
208        return mBase.getCacheDir();
209    }
210
211    @Override
212    public File getExternalCacheDir() {
213        return mBase.getExternalCacheDir();
214    }
215
216    @Override
217    public File getDir(String name, int mode) {
218        return mBase.getDir(name, mode);
219    }
220
221    @Override
222    public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {
223        return mBase.openOrCreateDatabase(name, mode, factory);
224    }
225
226    @Override
227    public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
228            DatabaseErrorHandler errorHandler) {
229        return mBase.openOrCreateDatabase(name, mode, factory, errorHandler);
230    }
231
232    @Override
233    public boolean deleteDatabase(String name) {
234        return mBase.deleteDatabase(name);
235    }
236
237    @Override
238    public File getDatabasePath(String name) {
239        return mBase.getDatabasePath(name);
240    }
241
242    @Override
243    public String[] databaseList() {
244        return mBase.databaseList();
245    }
246
247    @Override
248    public Drawable getWallpaper() {
249        return mBase.getWallpaper();
250    }
251
252    @Override
253    public Drawable peekWallpaper() {
254        return mBase.peekWallpaper();
255    }
256
257    @Override
258    public int getWallpaperDesiredMinimumWidth() {
259        return mBase.getWallpaperDesiredMinimumWidth();
260    }
261
262    @Override
263    public int getWallpaperDesiredMinimumHeight() {
264        return mBase.getWallpaperDesiredMinimumHeight();
265    }
266
267    @Override
268    public void setWallpaper(Bitmap bitmap) throws IOException {
269        mBase.setWallpaper(bitmap);
270    }
271
272    @Override
273    public void setWallpaper(InputStream data) throws IOException {
274        mBase.setWallpaper(data);
275    }
276
277    @Override
278    public void clearWallpaper() throws IOException {
279        mBase.clearWallpaper();
280    }
281
282    @Override
283    public void startActivity(Intent intent) {
284        mBase.startActivity(intent);
285    }
286
287    /** @hide */
288    @Override
289    public void startActivityAsUser(Intent intent, UserHandle user) {
290        mBase.startActivityAsUser(intent, user);
291    }
292
293    @Override
294    public void startActivity(Intent intent, Bundle options) {
295        mBase.startActivity(intent, options);
296    }
297
298    /** @hide */
299    @Override
300    public void startActivityAsUser(Intent intent, Bundle options, UserHandle user) {
301        mBase.startActivityAsUser(intent, options, user);
302    }
303
304    @Override
305    public void startActivities(Intent[] intents) {
306        mBase.startActivities(intents);
307    }
308
309    @Override
310    public void startActivities(Intent[] intents, Bundle options) {
311        mBase.startActivities(intents, options);
312    }
313
314    @Override
315    public void startIntentSender(IntentSender intent,
316            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
317            throws IntentSender.SendIntentException {
318        mBase.startIntentSender(intent, fillInIntent, flagsMask,
319                flagsValues, extraFlags);
320    }
321
322    @Override
323    public void startIntentSender(IntentSender intent,
324            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
325            Bundle options) throws IntentSender.SendIntentException {
326        mBase.startIntentSender(intent, fillInIntent, flagsMask,
327                flagsValues, extraFlags, options);
328    }
329
330    @Override
331    public void sendBroadcast(Intent intent) {
332        mBase.sendBroadcast(intent);
333    }
334
335    @Override
336    public void sendBroadcast(Intent intent, String receiverPermission) {
337        mBase.sendBroadcast(intent, receiverPermission);
338    }
339
340    @Override
341    public void sendOrderedBroadcast(Intent intent,
342            String receiverPermission) {
343        mBase.sendOrderedBroadcast(intent, receiverPermission);
344    }
345
346    @Override
347    public void sendOrderedBroadcast(
348        Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
349        Handler scheduler, int initialCode, String initialData,
350        Bundle initialExtras) {
351        mBase.sendOrderedBroadcast(intent, receiverPermission,
352                resultReceiver, scheduler, initialCode,
353                initialData, initialExtras);
354    }
355
356    @Override
357    public void sendBroadcastAsUser(Intent intent, UserHandle user) {
358        mBase.sendBroadcastAsUser(intent, user);
359    }
360
361    @Override
362    public void sendBroadcastAsUser(Intent intent, UserHandle user,
363            String receiverPermission) {
364        mBase.sendBroadcastAsUser(intent, user, receiverPermission);
365    }
366
367    @Override
368    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
369            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
370            int initialCode, String initialData, Bundle initialExtras) {
371        mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver,
372                scheduler, initialCode, initialData, initialExtras);
373    }
374
375    @Override
376    public void sendStickyBroadcast(Intent intent) {
377        mBase.sendStickyBroadcast(intent);
378    }
379
380    @Override
381    public void sendStickyOrderedBroadcast(
382        Intent intent, BroadcastReceiver resultReceiver,
383        Handler scheduler, int initialCode, String initialData,
384        Bundle initialExtras) {
385        mBase.sendStickyOrderedBroadcast(intent,
386                resultReceiver, scheduler, initialCode,
387                initialData, initialExtras);
388    }
389
390    @Override
391    public void removeStickyBroadcast(Intent intent) {
392        mBase.removeStickyBroadcast(intent);
393    }
394
395    @Override
396    public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
397        mBase.sendStickyBroadcastAsUser(intent, user);
398    }
399
400    @Override
401    public void sendStickyOrderedBroadcastAsUser(Intent intent,
402            UserHandle user, BroadcastReceiver resultReceiver,
403            Handler scheduler, int initialCode, String initialData,
404            Bundle initialExtras) {
405        mBase.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver,
406                scheduler, initialCode, initialData, initialExtras);
407    }
408
409    @Override
410    public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
411        mBase.removeStickyBroadcastAsUser(intent, user);
412    }
413
414    @Override
415    public Intent registerReceiver(
416        BroadcastReceiver receiver, IntentFilter filter) {
417        return mBase.registerReceiver(receiver, filter);
418    }
419
420    @Override
421    public Intent registerReceiver(
422        BroadcastReceiver receiver, IntentFilter filter,
423        String broadcastPermission, Handler scheduler) {
424        return mBase.registerReceiver(receiver, filter, broadcastPermission,
425                scheduler);
426    }
427
428    /** @hide */
429    @Override
430    public Intent registerReceiverAsUser(
431        BroadcastReceiver receiver, UserHandle user, IntentFilter filter,
432        String broadcastPermission, Handler scheduler) {
433        return mBase.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
434                scheduler);
435    }
436
437    @Override
438    public void unregisterReceiver(BroadcastReceiver receiver) {
439        mBase.unregisterReceiver(receiver);
440    }
441
442    @Override
443    public ComponentName startService(Intent service) {
444        return mBase.startService(service);
445    }
446
447    @Override
448    public boolean stopService(Intent name) {
449        return mBase.stopService(name);
450    }
451
452    /** @hide */
453    @Override
454    public ComponentName startServiceAsUser(Intent service, UserHandle user) {
455        return mBase.startServiceAsUser(service, user);
456    }
457
458    /** @hide */
459    @Override
460    public boolean stopServiceAsUser(Intent name, UserHandle user) {
461        return mBase.stopServiceAsUser(name, user);
462    }
463
464    @Override
465    public boolean bindService(Intent service, ServiceConnection conn,
466            int flags) {
467        return mBase.bindService(service, conn, flags);
468    }
469
470    /** @hide */
471    @Override
472    public boolean bindService(Intent service, ServiceConnection conn, int flags, int userHandle) {
473        return mBase.bindService(service, conn, flags, userHandle);
474    }
475
476    @Override
477    public void unbindService(ServiceConnection conn) {
478        mBase.unbindService(conn);
479    }
480
481    @Override
482    public boolean startInstrumentation(ComponentName className,
483            String profileFile, Bundle arguments) {
484        return mBase.startInstrumentation(className, profileFile, arguments);
485    }
486
487    @Override
488    public Object getSystemService(String name) {
489        return mBase.getSystemService(name);
490    }
491
492    @Override
493    public int checkPermission(String permission, int pid, int uid) {
494        return mBase.checkPermission(permission, pid, uid);
495    }
496
497    @Override
498    public int checkCallingPermission(String permission) {
499        return mBase.checkCallingPermission(permission);
500    }
501
502    @Override
503    public int checkCallingOrSelfPermission(String permission) {
504        return mBase.checkCallingOrSelfPermission(permission);
505    }
506
507    @Override
508    public void enforcePermission(
509            String permission, int pid, int uid, String message) {
510        mBase.enforcePermission(permission, pid, uid, message);
511    }
512
513    @Override
514    public void enforceCallingPermission(String permission, String message) {
515        mBase.enforceCallingPermission(permission, message);
516    }
517
518    @Override
519    public void enforceCallingOrSelfPermission(
520            String permission, String message) {
521        mBase.enforceCallingOrSelfPermission(permission, message);
522    }
523
524    @Override
525    public void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
526        mBase.grantUriPermission(toPackage, uri, modeFlags);
527    }
528
529    @Override
530    public void revokeUriPermission(Uri uri, int modeFlags) {
531        mBase.revokeUriPermission(uri, modeFlags);
532    }
533
534    @Override
535    public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
536        return mBase.checkUriPermission(uri, pid, uid, modeFlags);
537    }
538
539    @Override
540    public int checkCallingUriPermission(Uri uri, int modeFlags) {
541        return mBase.checkCallingUriPermission(uri, modeFlags);
542    }
543
544    @Override
545    public int checkCallingOrSelfUriPermission(Uri uri, int modeFlags) {
546        return mBase.checkCallingOrSelfUriPermission(uri, modeFlags);
547    }
548
549    @Override
550    public int checkUriPermission(Uri uri, String readPermission,
551            String writePermission, int pid, int uid, int modeFlags) {
552        return mBase.checkUriPermission(uri, readPermission, writePermission,
553                pid, uid, modeFlags);
554    }
555
556    @Override
557    public void enforceUriPermission(
558            Uri uri, int pid, int uid, int modeFlags, String message) {
559        mBase.enforceUriPermission(uri, pid, uid, modeFlags, message);
560    }
561
562    @Override
563    public void enforceCallingUriPermission(
564            Uri uri, int modeFlags, String message) {
565        mBase.enforceCallingUriPermission(uri, modeFlags, message);
566    }
567
568    @Override
569    public void enforceCallingOrSelfUriPermission(
570            Uri uri, int modeFlags, String message) {
571        mBase.enforceCallingOrSelfUriPermission(uri, modeFlags, message);
572    }
573
574    @Override
575    public void enforceUriPermission(
576            Uri uri, String readPermission, String writePermission,
577            int pid, int uid, int modeFlags, String message) {
578        mBase.enforceUriPermission(
579                uri, readPermission, writePermission, pid, uid, modeFlags,
580                message);
581    }
582
583    @Override
584    public Context createPackageContext(String packageName, int flags)
585        throws PackageManager.NameNotFoundException {
586        return mBase.createPackageContext(packageName, flags);
587    }
588
589    @Override
590    public Context createConfigurationContext(Configuration overrideConfiguration) {
591        return mBase.createConfigurationContext(overrideConfiguration);
592    }
593
594    @Override
595    public Context createDisplayContext(Display display) {
596        return mBase.createDisplayContext(display);
597    }
598
599    @Override
600    public boolean isRestricted() {
601        return mBase.isRestricted();
602    }
603
604    /** @hide */
605    @Override
606    public CompatibilityInfoHolder getCompatibilityInfo(int displayId) {
607        return mBase.getCompatibilityInfo(displayId);
608    }
609}
610