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.annotation.SystemApi;
20import android.content.pm.ApplicationInfo;
21import android.content.pm.PackageManager;
22import android.content.res.AssetManager;
23import android.content.res.Configuration;
24import android.content.res.Resources;
25import android.database.DatabaseErrorHandler;
26import android.database.sqlite.SQLiteDatabase;
27import android.database.sqlite.SQLiteDatabase.CursorFactory;
28import android.graphics.Bitmap;
29import android.graphics.drawable.Drawable;
30import android.net.Uri;
31import android.os.Bundle;
32import android.os.Handler;
33import android.os.IBinder;
34import android.os.Looper;
35import android.os.UserHandle;
36import android.view.Display;
37import android.view.DisplayAdjustments;
38
39import java.io.File;
40import java.io.FileInputStream;
41import java.io.FileNotFoundException;
42import java.io.FileOutputStream;
43import java.io.IOException;
44import java.io.InputStream;
45
46/**
47 * Proxying implementation of Context that simply delegates all of its calls to
48 * another Context.  Can be subclassed to modify behavior without changing
49 * the original Context.
50 */
51public class ContextWrapper extends Context {
52    Context mBase;
53
54    public ContextWrapper(Context base) {
55        mBase = base;
56    }
57
58    /**
59     * Set the base context for this ContextWrapper.  All calls will then be
60     * delegated to the base context.  Throws
61     * IllegalStateException if a base context has already been set.
62     *
63     * @param base The new base context for this wrapper.
64     */
65    protected void attachBaseContext(Context base) {
66        if (mBase != null) {
67            throw new IllegalStateException("Base context already set");
68        }
69        mBase = base;
70    }
71
72    /**
73     * @return the base context as set by the constructor or setBaseContext
74     */
75    public Context getBaseContext() {
76        return mBase;
77    }
78
79    @Override
80    public AssetManager getAssets() {
81        return mBase.getAssets();
82    }
83
84    @Override
85    public Resources getResources() {
86        return mBase.getResources();
87    }
88
89    @Override
90    public PackageManager getPackageManager() {
91        return mBase.getPackageManager();
92    }
93
94    @Override
95    public ContentResolver getContentResolver() {
96        return mBase.getContentResolver();
97    }
98
99    @Override
100    public Looper getMainLooper() {
101        return mBase.getMainLooper();
102    }
103
104    @Override
105    public Context getApplicationContext() {
106        return mBase.getApplicationContext();
107    }
108
109    @Override
110    public void setTheme(int resid) {
111        mBase.setTheme(resid);
112    }
113
114    /** @hide */
115    @Override
116    public int getThemeResId() {
117        return mBase.getThemeResId();
118    }
119
120    @Override
121    public Resources.Theme getTheme() {
122        return mBase.getTheme();
123    }
124
125    @Override
126    public ClassLoader getClassLoader() {
127        return mBase.getClassLoader();
128    }
129
130    @Override
131    public String getPackageName() {
132        return mBase.getPackageName();
133    }
134
135    /** @hide */
136    @Override
137    public String getBasePackageName() {
138        return mBase.getBasePackageName();
139    }
140
141    /** @hide */
142    @Override
143    public String getOpPackageName() {
144        return mBase.getOpPackageName();
145    }
146
147    @Override
148    public ApplicationInfo getApplicationInfo() {
149        return mBase.getApplicationInfo();
150    }
151
152    @Override
153    public String getPackageResourcePath() {
154        return mBase.getPackageResourcePath();
155    }
156
157    @Override
158    public String getPackageCodePath() {
159        return mBase.getPackageCodePath();
160    }
161
162    @Override
163    public SharedPreferences getSharedPreferences(String name, int mode) {
164        return mBase.getSharedPreferences(name, mode);
165    }
166
167    /** @removed */
168    @Override
169    public SharedPreferences getSharedPreferences(File file, int mode) {
170        return mBase.getSharedPreferences(file, mode);
171    }
172
173    @Override
174    public boolean moveSharedPreferencesFrom(Context sourceContext, String name) {
175        return mBase.moveSharedPreferencesFrom(sourceContext, name);
176    }
177
178    @Override
179    public boolean deleteSharedPreferences(String name) {
180        return mBase.deleteSharedPreferences(name);
181    }
182
183    @Override
184    public FileInputStream openFileInput(String name)
185        throws FileNotFoundException {
186        return mBase.openFileInput(name);
187    }
188
189    @Override
190    public FileOutputStream openFileOutput(String name, int mode)
191        throws FileNotFoundException {
192        return mBase.openFileOutput(name, mode);
193    }
194
195    @Override
196    public boolean deleteFile(String name) {
197        return mBase.deleteFile(name);
198    }
199
200    @Override
201    public File getFileStreamPath(String name) {
202        return mBase.getFileStreamPath(name);
203    }
204
205    /** @removed */
206    @Override
207    public File getSharedPreferencesPath(String name) {
208        return mBase.getSharedPreferencesPath(name);
209    }
210
211    @Override
212    public String[] fileList() {
213        return mBase.fileList();
214    }
215
216    @Override
217    public File getDataDir() {
218        return mBase.getDataDir();
219    }
220
221    @Override
222    public File getFilesDir() {
223        return mBase.getFilesDir();
224    }
225
226    @Override
227    public File getNoBackupFilesDir() {
228        return mBase.getNoBackupFilesDir();
229    }
230
231    @Override
232    public File getExternalFilesDir(String type) {
233        return mBase.getExternalFilesDir(type);
234    }
235
236    @Override
237    public File[] getExternalFilesDirs(String type) {
238        return mBase.getExternalFilesDirs(type);
239    }
240
241    @Override
242    public File getObbDir() {
243        return mBase.getObbDir();
244    }
245
246    @Override
247    public File[] getObbDirs() {
248        return mBase.getObbDirs();
249    }
250
251    @Override
252    public File getCacheDir() {
253        return mBase.getCacheDir();
254    }
255
256    @Override
257    public File getCodeCacheDir() {
258        return mBase.getCodeCacheDir();
259    }
260
261    @Override
262    public File getExternalCacheDir() {
263        return mBase.getExternalCacheDir();
264    }
265
266    @Override
267    public File[] getExternalCacheDirs() {
268        return mBase.getExternalCacheDirs();
269    }
270
271    @Override
272    public File[] getExternalMediaDirs() {
273        return mBase.getExternalMediaDirs();
274    }
275
276    @Override
277    public File getDir(String name, int mode) {
278        return mBase.getDir(name, mode);
279    }
280
281    @Override
282    public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {
283        return mBase.openOrCreateDatabase(name, mode, factory);
284    }
285
286    @Override
287    public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
288            DatabaseErrorHandler errorHandler) {
289        return mBase.openOrCreateDatabase(name, mode, factory, errorHandler);
290    }
291
292    @Override
293    public boolean moveDatabaseFrom(Context sourceContext, String name) {
294        return mBase.moveDatabaseFrom(sourceContext, name);
295    }
296
297    @Override
298    public boolean deleteDatabase(String name) {
299        return mBase.deleteDatabase(name);
300    }
301
302    @Override
303    public File getDatabasePath(String name) {
304        return mBase.getDatabasePath(name);
305    }
306
307    @Override
308    public String[] databaseList() {
309        return mBase.databaseList();
310    }
311
312    @Override
313    @Deprecated
314    public Drawable getWallpaper() {
315        return mBase.getWallpaper();
316    }
317
318    @Override
319    @Deprecated
320    public Drawable peekWallpaper() {
321        return mBase.peekWallpaper();
322    }
323
324    @Override
325    @Deprecated
326    public int getWallpaperDesiredMinimumWidth() {
327        return mBase.getWallpaperDesiredMinimumWidth();
328    }
329
330    @Override
331    @Deprecated
332    public int getWallpaperDesiredMinimumHeight() {
333        return mBase.getWallpaperDesiredMinimumHeight();
334    }
335
336    @Override
337    @Deprecated
338    public void setWallpaper(Bitmap bitmap) throws IOException {
339        mBase.setWallpaper(bitmap);
340    }
341
342    @Override
343    @Deprecated
344    public void setWallpaper(InputStream data) throws IOException {
345        mBase.setWallpaper(data);
346    }
347
348    @Override
349    @Deprecated
350    public void clearWallpaper() throws IOException {
351        mBase.clearWallpaper();
352    }
353
354    @Override
355    public void startActivity(Intent intent) {
356        mBase.startActivity(intent);
357    }
358
359    /** @hide */
360    @Override
361    public void startActivityAsUser(Intent intent, UserHandle user) {
362        mBase.startActivityAsUser(intent, user);
363    }
364
365    /** @hide **/
366    public void startActivityForResult(
367            String who, Intent intent, int requestCode, Bundle options) {
368        mBase.startActivityForResult(who, intent, requestCode, options);
369    }
370
371    /** @hide **/
372    public boolean canStartActivityForResult() {
373        return mBase.canStartActivityForResult();
374    }
375
376    @Override
377    public void startActivity(Intent intent, Bundle options) {
378        mBase.startActivity(intent, options);
379    }
380
381    /** @hide */
382    @Override
383    public void startActivityAsUser(Intent intent, Bundle options, UserHandle user) {
384        mBase.startActivityAsUser(intent, options, user);
385    }
386
387    @Override
388    public void startActivities(Intent[] intents) {
389        mBase.startActivities(intents);
390    }
391
392    @Override
393    public void startActivities(Intent[] intents, Bundle options) {
394        mBase.startActivities(intents, options);
395    }
396
397    /** @hide */
398    @Override
399    public void startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) {
400        mBase.startActivitiesAsUser(intents, options, userHandle);
401    }
402
403    @Override
404    public void startIntentSender(IntentSender intent,
405            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
406            throws IntentSender.SendIntentException {
407        mBase.startIntentSender(intent, fillInIntent, flagsMask,
408                flagsValues, extraFlags);
409    }
410
411    @Override
412    public void startIntentSender(IntentSender intent,
413            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
414            Bundle options) throws IntentSender.SendIntentException {
415        mBase.startIntentSender(intent, fillInIntent, flagsMask,
416                flagsValues, extraFlags, options);
417    }
418
419    @Override
420    public void sendBroadcast(Intent intent) {
421        mBase.sendBroadcast(intent);
422    }
423
424    @Override
425    public void sendBroadcast(Intent intent, String receiverPermission) {
426        mBase.sendBroadcast(intent, receiverPermission);
427    }
428
429    /** @hide */
430    @Override
431    public void sendBroadcastMultiplePermissions(Intent intent, String[] receiverPermissions) {
432        mBase.sendBroadcastMultiplePermissions(intent, receiverPermissions);
433    }
434
435    /** @hide */
436    @SystemApi
437    @Override
438    public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) {
439        mBase.sendBroadcast(intent, receiverPermission, options);
440    }
441
442    /** @hide */
443    @Override
444    public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
445        mBase.sendBroadcast(intent, receiverPermission, appOp);
446    }
447
448    @Override
449    public void sendOrderedBroadcast(Intent intent,
450            String receiverPermission) {
451        mBase.sendOrderedBroadcast(intent, receiverPermission);
452    }
453
454    @Override
455    public void sendOrderedBroadcast(
456        Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
457        Handler scheduler, int initialCode, String initialData,
458        Bundle initialExtras) {
459        mBase.sendOrderedBroadcast(intent, receiverPermission,
460                resultReceiver, scheduler, initialCode,
461                initialData, initialExtras);
462    }
463
464    /** @hide */
465    @SystemApi
466    @Override
467    public void sendOrderedBroadcast(
468            Intent intent, String receiverPermission, Bundle options, BroadcastReceiver resultReceiver,
469            Handler scheduler, int initialCode, String initialData,
470            Bundle initialExtras) {
471        mBase.sendOrderedBroadcast(intent, receiverPermission,
472                options, resultReceiver, scheduler, initialCode,
473                initialData, initialExtras);
474    }
475
476    /** @hide */
477    @Override
478    public void sendOrderedBroadcast(
479        Intent intent, String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
480        Handler scheduler, int initialCode, String initialData,
481        Bundle initialExtras) {
482        mBase.sendOrderedBroadcast(intent, receiverPermission, appOp,
483                resultReceiver, scheduler, initialCode,
484                initialData, initialExtras);
485    }
486
487    @Override
488    public void sendBroadcastAsUser(Intent intent, UserHandle user) {
489        mBase.sendBroadcastAsUser(intent, user);
490    }
491
492    @Override
493    public void sendBroadcastAsUser(Intent intent, UserHandle user,
494            String receiverPermission) {
495        mBase.sendBroadcastAsUser(intent, user, receiverPermission);
496    }
497
498    /** @hide */
499    @Override
500    public void sendBroadcastAsUser(Intent intent, UserHandle user,
501            String receiverPermission, int appOp) {
502        mBase.sendBroadcastAsUser(intent, user, receiverPermission, appOp);
503    }
504
505    @Override
506    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
507            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
508            int initialCode, String initialData, Bundle initialExtras) {
509        mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver,
510                scheduler, initialCode, initialData, initialExtras);
511    }
512
513    /** @hide */
514    @Override
515    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
516            String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
517            Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
518        mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, resultReceiver,
519                scheduler, initialCode, initialData, initialExtras);
520    }
521
522    /** @hide */
523    @Override
524    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
525            String receiverPermission, int appOp, Bundle options, BroadcastReceiver resultReceiver,
526            Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
527        mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options,
528                resultReceiver, scheduler, initialCode, initialData, initialExtras);
529    }
530
531    @Override
532    @Deprecated
533    public void sendStickyBroadcast(Intent intent) {
534        mBase.sendStickyBroadcast(intent);
535    }
536
537    @Override
538    @Deprecated
539    public void sendStickyOrderedBroadcast(
540        Intent intent, BroadcastReceiver resultReceiver,
541        Handler scheduler, int initialCode, String initialData,
542        Bundle initialExtras) {
543        mBase.sendStickyOrderedBroadcast(intent,
544                resultReceiver, scheduler, initialCode,
545                initialData, initialExtras);
546    }
547
548    @Override
549    @Deprecated
550    public void removeStickyBroadcast(Intent intent) {
551        mBase.removeStickyBroadcast(intent);
552    }
553
554    @Override
555    @Deprecated
556    public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
557        mBase.sendStickyBroadcastAsUser(intent, user);
558    }
559
560    /** @hide */
561    @Override
562    @Deprecated
563    public void sendStickyBroadcastAsUser(Intent intent, UserHandle user, Bundle options) {
564        mBase.sendStickyBroadcastAsUser(intent, user, options);
565    }
566
567    @Override
568    @Deprecated
569    public void sendStickyOrderedBroadcastAsUser(Intent intent,
570            UserHandle user, BroadcastReceiver resultReceiver,
571            Handler scheduler, int initialCode, String initialData,
572            Bundle initialExtras) {
573        mBase.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver,
574                scheduler, initialCode, initialData, initialExtras);
575    }
576
577    @Override
578    @Deprecated
579    public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
580        mBase.removeStickyBroadcastAsUser(intent, user);
581    }
582
583    @Override
584    public Intent registerReceiver(
585        BroadcastReceiver receiver, IntentFilter filter) {
586        return mBase.registerReceiver(receiver, filter);
587    }
588
589    @Override
590    public Intent registerReceiver(
591        BroadcastReceiver receiver, IntentFilter filter,
592        String broadcastPermission, Handler scheduler) {
593        return mBase.registerReceiver(receiver, filter, broadcastPermission,
594                scheduler);
595    }
596
597    /** @hide */
598    @Override
599    public Intent registerReceiverAsUser(
600        BroadcastReceiver receiver, UserHandle user, IntentFilter filter,
601        String broadcastPermission, Handler scheduler) {
602        return mBase.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
603                scheduler);
604    }
605
606    @Override
607    public void unregisterReceiver(BroadcastReceiver receiver) {
608        mBase.unregisterReceiver(receiver);
609    }
610
611    @Override
612    public ComponentName startService(Intent service) {
613        return mBase.startService(service);
614    }
615
616    @Override
617    public boolean stopService(Intent name) {
618        return mBase.stopService(name);
619    }
620
621    /** @hide */
622    @Override
623    public ComponentName startServiceAsUser(Intent service, UserHandle user) {
624        return mBase.startServiceAsUser(service, user);
625    }
626
627    /** @hide */
628    @Override
629    public boolean stopServiceAsUser(Intent name, UserHandle user) {
630        return mBase.stopServiceAsUser(name, user);
631    }
632
633    @Override
634    public boolean bindService(Intent service, ServiceConnection conn,
635            int flags) {
636        return mBase.bindService(service, conn, flags);
637    }
638
639    /** @hide */
640    @Override
641    public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags,
642            UserHandle user) {
643        return mBase.bindServiceAsUser(service, conn, flags, user);
644    }
645
646    @Override
647    public void unbindService(ServiceConnection conn) {
648        mBase.unbindService(conn);
649    }
650
651    @Override
652    public boolean startInstrumentation(ComponentName className,
653            String profileFile, Bundle arguments) {
654        return mBase.startInstrumentation(className, profileFile, arguments);
655    }
656
657    @Override
658    public Object getSystemService(String name) {
659        return mBase.getSystemService(name);
660    }
661
662    @Override
663    public String getSystemServiceName(Class<?> serviceClass) {
664        return mBase.getSystemServiceName(serviceClass);
665    }
666
667    @Override
668    public int checkPermission(String permission, int pid, int uid) {
669        return mBase.checkPermission(permission, pid, uid);
670    }
671
672    /** @hide */
673    @Override
674    public int checkPermission(String permission, int pid, int uid, IBinder callerToken) {
675        return mBase.checkPermission(permission, pid, uid, callerToken);
676    }
677
678    @Override
679    public int checkCallingPermission(String permission) {
680        return mBase.checkCallingPermission(permission);
681    }
682
683    @Override
684    public int checkCallingOrSelfPermission(String permission) {
685        return mBase.checkCallingOrSelfPermission(permission);
686    }
687
688    @Override
689    public int checkSelfPermission(String permission) {
690       return mBase.checkSelfPermission(permission);
691    }
692
693    @Override
694    public void enforcePermission(
695            String permission, int pid, int uid, String message) {
696        mBase.enforcePermission(permission, pid, uid, message);
697    }
698
699    @Override
700    public void enforceCallingPermission(String permission, String message) {
701        mBase.enforceCallingPermission(permission, message);
702    }
703
704    @Override
705    public void enforceCallingOrSelfPermission(
706            String permission, String message) {
707        mBase.enforceCallingOrSelfPermission(permission, message);
708    }
709
710    @Override
711    public void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
712        mBase.grantUriPermission(toPackage, uri, modeFlags);
713    }
714
715    @Override
716    public void revokeUriPermission(Uri uri, int modeFlags) {
717        mBase.revokeUriPermission(uri, modeFlags);
718    }
719
720    @Override
721    public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
722        return mBase.checkUriPermission(uri, pid, uid, modeFlags);
723    }
724
725    /** @hide */
726    @Override
727    public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags, IBinder callerToken) {
728        return mBase.checkUriPermission(uri, pid, uid, modeFlags, callerToken);
729    }
730
731    @Override
732    public int checkCallingUriPermission(Uri uri, int modeFlags) {
733        return mBase.checkCallingUriPermission(uri, modeFlags);
734    }
735
736    @Override
737    public int checkCallingOrSelfUriPermission(Uri uri, int modeFlags) {
738        return mBase.checkCallingOrSelfUriPermission(uri, modeFlags);
739    }
740
741    @Override
742    public int checkUriPermission(Uri uri, String readPermission,
743            String writePermission, int pid, int uid, int modeFlags) {
744        return mBase.checkUriPermission(uri, readPermission, writePermission,
745                pid, uid, modeFlags);
746    }
747
748    @Override
749    public void enforceUriPermission(
750            Uri uri, int pid, int uid, int modeFlags, String message) {
751        mBase.enforceUriPermission(uri, pid, uid, modeFlags, message);
752    }
753
754    @Override
755    public void enforceCallingUriPermission(
756            Uri uri, int modeFlags, String message) {
757        mBase.enforceCallingUriPermission(uri, modeFlags, message);
758    }
759
760    @Override
761    public void enforceCallingOrSelfUriPermission(
762            Uri uri, int modeFlags, String message) {
763        mBase.enforceCallingOrSelfUriPermission(uri, modeFlags, message);
764    }
765
766    @Override
767    public void enforceUriPermission(
768            Uri uri, String readPermission, String writePermission,
769            int pid, int uid, int modeFlags, String message) {
770        mBase.enforceUriPermission(
771                uri, readPermission, writePermission, pid, uid, modeFlags,
772                message);
773    }
774
775    @Override
776    public Context createPackageContext(String packageName, int flags)
777        throws PackageManager.NameNotFoundException {
778        return mBase.createPackageContext(packageName, flags);
779    }
780
781    /** @hide */
782    @Override
783    public Context createPackageContextAsUser(String packageName, int flags, UserHandle user)
784            throws PackageManager.NameNotFoundException {
785        return mBase.createPackageContextAsUser(packageName, flags, user);
786    }
787
788    /** @hide */
789    @Override
790    public Context createApplicationContext(ApplicationInfo application,
791            int flags) throws PackageManager.NameNotFoundException {
792        return mBase.createApplicationContext(application, flags);
793    }
794
795    /** @hide */
796    @Override
797    public int getUserId() {
798        return mBase.getUserId();
799    }
800
801    @Override
802    public Context createConfigurationContext(Configuration overrideConfiguration) {
803        return mBase.createConfigurationContext(overrideConfiguration);
804    }
805
806    @Override
807    public Context createDisplayContext(Display display) {
808        return mBase.createDisplayContext(display);
809    }
810
811    @Override
812    public boolean isRestricted() {
813        return mBase.isRestricted();
814    }
815
816    /** @hide */
817    @Override
818    public DisplayAdjustments getDisplayAdjustments(int displayId) {
819        return mBase.getDisplayAdjustments(displayId);
820    }
821
822    /**
823     * @hide
824     */
825    @Override
826    public Display getDisplay() {
827        return mBase.getDisplay();
828    }
829
830    @Override
831    public Context createDeviceProtectedStorageContext() {
832        return mBase.createDeviceProtectedStorageContext();
833    }
834
835    /** {@hide} */
836    @SystemApi
837    @Override
838    public Context createCredentialProtectedStorageContext() {
839        return mBase.createCredentialProtectedStorageContext();
840    }
841
842    @Override
843    public boolean isDeviceProtectedStorage() {
844        return mBase.isDeviceProtectedStorage();
845    }
846
847    /** {@hide} */
848    @SystemApi
849    @Override
850    public boolean isCredentialProtectedStorage() {
851        return mBase.isCredentialProtectedStorage();
852    }
853}
854