• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package android.content;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.annotation.RequiresPermission;
22 import android.annotation.SystemApi;
23 import android.annotation.TestApi;
24 import android.annotation.UiContext;
25 import android.app.IApplicationThread;
26 import android.app.IServiceConnection;
27 import android.app.compat.CompatChanges;
28 import android.compat.annotation.UnsupportedAppUsage;
29 import android.content.pm.ApplicationInfo;
30 import android.content.pm.PackageManager;
31 import android.content.res.AssetManager;
32 import android.content.res.Configuration;
33 import android.content.res.Resources;
34 import android.database.DatabaseErrorHandler;
35 import android.database.sqlite.SQLiteDatabase;
36 import android.database.sqlite.SQLiteDatabase.CursorFactory;
37 import android.graphics.Bitmap;
38 import android.graphics.drawable.Drawable;
39 import android.net.Uri;
40 import android.os.Build;
41 import android.os.Bundle;
42 import android.os.Handler;
43 import android.os.IBinder;
44 import android.os.Looper;
45 import android.os.UserHandle;
46 import android.view.Display;
47 import android.view.DisplayAdjustments;
48 import android.view.WindowManager.LayoutParams.WindowType;
49 import android.view.autofill.AutofillManager.AutofillClient;
50 
51 import com.android.internal.annotations.GuardedBy;
52 import com.android.internal.annotations.VisibleForTesting;
53 
54 import java.io.File;
55 import java.io.FileInputStream;
56 import java.io.FileNotFoundException;
57 import java.io.FileOutputStream;
58 import java.io.IOException;
59 import java.io.InputStream;
60 import java.util.ArrayList;
61 import java.util.Collection;
62 import java.util.List;
63 import java.util.concurrent.Executor;
64 
65 /**
66  * Proxying implementation of Context that simply delegates all of its calls to
67  * another Context.  Can be subclassed to modify behavior without changing
68  * the original Context.
69  */
70 public class ContextWrapper extends Context {
71     @UnsupportedAppUsage
72     Context mBase;
73 
74     /**
75      * A list to store {@link ComponentCallbacks} which
76      * passes to {@link #registerComponentCallbacks(ComponentCallbacks)} before
77      * {@link #attachBaseContext(Context)}.
78      * It is to provide compatibility behavior for Application targeted prior to
79      * {@link Build.VERSION_CODES#TIRAMISU}.
80      *
81      * @hide
82      */
83     @GuardedBy("mLock")
84     @VisibleForTesting
85     public List<ComponentCallbacks> mCallbacksRegisteredToSuper;
86 
87     private final Object mLock = new Object();
88 
ContextWrapper(Context base)89     public ContextWrapper(Context base) {
90         mBase = base;
91     }
92 
93     /**
94      * Set the base context for this ContextWrapper.  All calls will then be
95      * delegated to the base context.  Throws
96      * IllegalStateException if a base context has already been set.
97      *
98      * @param base The new base context for this wrapper.
99      */
attachBaseContext(Context base)100     protected void attachBaseContext(Context base) {
101         if (mBase != null) {
102             throw new IllegalStateException("Base context already set");
103         }
104         mBase = base;
105     }
106 
107     /**
108      * @return the base context as set by the constructor or setBaseContext
109      */
getBaseContext()110     public Context getBaseContext() {
111         return mBase;
112     }
113 
114     @Override
getAssets()115     public AssetManager getAssets() {
116         return mBase.getAssets();
117     }
118 
119     @Override
getResources()120     public Resources getResources() {
121         return mBase.getResources();
122     }
123 
124     @Override
getPackageManager()125     public PackageManager getPackageManager() {
126         return mBase.getPackageManager();
127     }
128 
129     @Override
getContentResolver()130     public ContentResolver getContentResolver() {
131         return mBase.getContentResolver();
132     }
133 
134     @Override
getMainLooper()135     public Looper getMainLooper() {
136         return mBase.getMainLooper();
137     }
138 
139     @Override
getMainExecutor()140     public Executor getMainExecutor() {
141         return mBase.getMainExecutor();
142     }
143 
144     @Override
getApplicationContext()145     public Context getApplicationContext() {
146         return mBase.getApplicationContext();
147     }
148 
149     @Override
setTheme(int resid)150     public void setTheme(int resid) {
151         mBase.setTheme(resid);
152     }
153 
154     /** @hide */
155     @Override
156     @UnsupportedAppUsage
getThemeResId()157     public int getThemeResId() {
158         return mBase.getThemeResId();
159     }
160 
161     @Override
getTheme()162     public Resources.Theme getTheme() {
163         return mBase.getTheme();
164     }
165 
166     @Override
getClassLoader()167     public ClassLoader getClassLoader() {
168         return mBase.getClassLoader();
169     }
170 
171     @Override
getPackageName()172     public String getPackageName() {
173         return mBase.getPackageName();
174     }
175 
176     /** @hide */
177     @Override
178     @UnsupportedAppUsage
getBasePackageName()179     public String getBasePackageName() {
180         return mBase.getBasePackageName();
181     }
182 
183     /** @hide */
184     @Override
getOpPackageName()185     public String getOpPackageName() {
186         return mBase.getOpPackageName();
187     }
188 
189     /** @hide */
190     @Override
getAttributionTag()191     public @Nullable String getAttributionTag() {
192         return mBase.getAttributionTag();
193     }
194 
195     @Override
getParams()196     public @Nullable ContextParams getParams() {
197         return mBase.getParams();
198     }
199 
200     @Override
getApplicationInfo()201     public ApplicationInfo getApplicationInfo() {
202         return mBase.getApplicationInfo();
203     }
204 
205     @Override
getPackageResourcePath()206     public String getPackageResourcePath() {
207         return mBase.getPackageResourcePath();
208     }
209 
210     @Override
getPackageCodePath()211     public String getPackageCodePath() {
212         return mBase.getPackageCodePath();
213     }
214 
215     @Override
getSharedPreferences(String name, int mode)216     public SharedPreferences getSharedPreferences(String name, int mode) {
217         return mBase.getSharedPreferences(name, mode);
218     }
219 
220     /** @removed */
221     @Override
getSharedPreferences(File file, int mode)222     public SharedPreferences getSharedPreferences(File file, int mode) {
223         return mBase.getSharedPreferences(file, mode);
224     }
225 
226     /** @hide */
227     @Override
reloadSharedPreferences()228     public void reloadSharedPreferences() {
229         mBase.reloadSharedPreferences();
230     }
231 
232     @Override
moveSharedPreferencesFrom(Context sourceContext, String name)233     public boolean moveSharedPreferencesFrom(Context sourceContext, String name) {
234         return mBase.moveSharedPreferencesFrom(sourceContext, name);
235     }
236 
237     @Override
deleteSharedPreferences(String name)238     public boolean deleteSharedPreferences(String name) {
239         return mBase.deleteSharedPreferences(name);
240     }
241 
242     @Override
openFileInput(String name)243     public FileInputStream openFileInput(String name)
244             throws FileNotFoundException {
245         return mBase.openFileInput(name);
246     }
247 
248     @Override
openFileOutput(String name, int mode)249     public FileOutputStream openFileOutput(String name, int mode)
250             throws FileNotFoundException {
251         return mBase.openFileOutput(name, mode);
252     }
253 
254     @Override
deleteFile(String name)255     public boolean deleteFile(String name) {
256         return mBase.deleteFile(name);
257     }
258 
259     @Override
getFileStreamPath(String name)260     public File getFileStreamPath(String name) {
261         return mBase.getFileStreamPath(name);
262     }
263 
264     /** @removed */
265     @Override
getSharedPreferencesPath(String name)266     public File getSharedPreferencesPath(String name) {
267         return mBase.getSharedPreferencesPath(name);
268     }
269 
270     @Override
fileList()271     public String[] fileList() {
272         return mBase.fileList();
273     }
274 
275     @Override
getDataDir()276     public File getDataDir() {
277         return mBase.getDataDir();
278     }
279 
280     @Override
getFilesDir()281     public File getFilesDir() {
282         return mBase.getFilesDir();
283     }
284 
285     /**
286      * {@inheritDoc Context#getCrateDir()}
287      * @hide
288      */
289     @NonNull
290     @Override
getCrateDir(@onNull String cratedId)291     public File getCrateDir(@NonNull String cratedId) {
292         return mBase.getCrateDir(cratedId);
293     }
294 
295     @Override
getNoBackupFilesDir()296     public File getNoBackupFilesDir() {
297         return mBase.getNoBackupFilesDir();
298     }
299 
300     @Override
getExternalFilesDir(@ullable String type)301     public @Nullable File getExternalFilesDir(@Nullable String type) {
302         return mBase.getExternalFilesDir(type);
303     }
304 
305     @Override
getExternalFilesDirs(String type)306     public File[] getExternalFilesDirs(String type) {
307         return mBase.getExternalFilesDirs(type);
308     }
309 
310     @Override
getObbDir()311     public File getObbDir() {
312         return mBase.getObbDir();
313     }
314 
315     @Override
getObbDirs()316     public File[] getObbDirs() {
317         return mBase.getObbDirs();
318     }
319 
320     @Override
getCacheDir()321     public File getCacheDir() {
322         return mBase.getCacheDir();
323     }
324 
325     @Override
getCodeCacheDir()326     public File getCodeCacheDir() {
327         return mBase.getCodeCacheDir();
328     }
329 
330     @Override
getExternalCacheDir()331     public @Nullable File getExternalCacheDir() {
332         return mBase.getExternalCacheDir();
333     }
334 
335     @Override
getExternalCacheDirs()336     public File[] getExternalCacheDirs() {
337         return mBase.getExternalCacheDirs();
338     }
339 
340     @Override
getExternalMediaDirs()341     public File[] getExternalMediaDirs() {
342         return mBase.getExternalMediaDirs();
343     }
344 
345     @Override
getDir(String name, int mode)346     public File getDir(String name, int mode) {
347         return mBase.getDir(name, mode);
348     }
349 
350 
351     /** @hide **/
352     @Override
getPreloadsFileCache()353     public @Nullable File getPreloadsFileCache() {
354         return mBase.getPreloadsFileCache();
355     }
356 
357     @Override
openOrCreateDatabase(String name, int mode, CursorFactory factory)358     public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {
359         return mBase.openOrCreateDatabase(name, mode, factory);
360     }
361 
362     @Override
openOrCreateDatabase(String name, int mode, CursorFactory factory, @Nullable DatabaseErrorHandler errorHandler)363     public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
364             @Nullable DatabaseErrorHandler errorHandler) {
365         return mBase.openOrCreateDatabase(name, mode, factory, errorHandler);
366     }
367 
368     @Override
moveDatabaseFrom(Context sourceContext, String name)369     public boolean moveDatabaseFrom(Context sourceContext, String name) {
370         return mBase.moveDatabaseFrom(sourceContext, name);
371     }
372 
373     @Override
deleteDatabase(String name)374     public boolean deleteDatabase(String name) {
375         return mBase.deleteDatabase(name);
376     }
377 
378     @Override
getDatabasePath(String name)379     public File getDatabasePath(String name) {
380         return mBase.getDatabasePath(name);
381     }
382 
383     @Override
databaseList()384     public String[] databaseList() {
385         return mBase.databaseList();
386     }
387 
388     @Override
389     @Deprecated
getWallpaper()390     public Drawable getWallpaper() {
391         return mBase.getWallpaper();
392     }
393 
394     @Override
395     @Deprecated
peekWallpaper()396     public Drawable peekWallpaper() {
397         return mBase.peekWallpaper();
398     }
399 
400     @Override
401     @Deprecated
getWallpaperDesiredMinimumWidth()402     public int getWallpaperDesiredMinimumWidth() {
403         return mBase.getWallpaperDesiredMinimumWidth();
404     }
405 
406     @Override
407     @Deprecated
getWallpaperDesiredMinimumHeight()408     public int getWallpaperDesiredMinimumHeight() {
409         return mBase.getWallpaperDesiredMinimumHeight();
410     }
411 
412     @Override
413     @Deprecated
setWallpaper(Bitmap bitmap)414     public void setWallpaper(Bitmap bitmap) throws IOException {
415         mBase.setWallpaper(bitmap);
416     }
417 
418     @Override
419     @Deprecated
setWallpaper(InputStream data)420     public void setWallpaper(InputStream data) throws IOException {
421         mBase.setWallpaper(data);
422     }
423 
424     @Override
425     @Deprecated
clearWallpaper()426     public void clearWallpaper() throws IOException {
427         mBase.clearWallpaper();
428     }
429 
430     @Override
startActivity(Intent intent)431     public void startActivity(Intent intent) {
432         mBase.startActivity(intent);
433     }
434 
435     /** @hide */
436     @Override
startActivityAsUser(Intent intent, UserHandle user)437     public void startActivityAsUser(Intent intent, UserHandle user) {
438         mBase.startActivityAsUser(intent, user);
439     }
440 
441     /** @hide **/
startActivityForResult( String who, Intent intent, int requestCode, @Nullable Bundle options)442     public void startActivityForResult(
443             String who, Intent intent, int requestCode, @Nullable Bundle options) {
444         mBase.startActivityForResult(who, intent, requestCode, options);
445     }
446 
447     /** @hide **/
canStartActivityForResult()448     public boolean canStartActivityForResult() {
449         return mBase.canStartActivityForResult();
450     }
451 
452     @Override
startActivity(Intent intent, @Nullable Bundle options)453     public void startActivity(Intent intent, @Nullable Bundle options) {
454         mBase.startActivity(intent, options);
455     }
456 
457     /** @hide */
458     @Override
startActivityAsUser(Intent intent, @Nullable Bundle options, UserHandle user)459     public void startActivityAsUser(Intent intent, @Nullable Bundle options, UserHandle user) {
460         mBase.startActivityAsUser(intent, options, user);
461     }
462 
463     @Override
startActivities(Intent[] intents)464     public void startActivities(Intent[] intents) {
465         mBase.startActivities(intents);
466     }
467 
468     @Override
startActivities(Intent[] intents, @Nullable Bundle options)469     public void startActivities(Intent[] intents, @Nullable Bundle options) {
470         mBase.startActivities(intents, options);
471     }
472 
473     /** @hide */
474     @Override
startActivitiesAsUser(Intent[] intents, @Nullable Bundle options, UserHandle userHandle)475     public int startActivitiesAsUser(Intent[] intents, @Nullable Bundle options,
476             UserHandle userHandle) {
477         return mBase.startActivitiesAsUser(intents, options, userHandle);
478     }
479 
480     @Override
startIntentSender(IntentSender intent, @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)481     public void startIntentSender(IntentSender intent,
482             @Nullable Intent fillInIntent, int flagsMask, int flagsValues,
483             int extraFlags)
484             throws IntentSender.SendIntentException {
485         mBase.startIntentSender(intent, fillInIntent, flagsMask,
486                 flagsValues, extraFlags);
487     }
488 
489     @Override
startIntentSender(IntentSender intent, @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, @Nullable Bundle options)490     public void startIntentSender(IntentSender intent,
491             @Nullable Intent fillInIntent, int flagsMask, int flagsValues,
492             int extraFlags, @Nullable Bundle options)
493             throws IntentSender.SendIntentException {
494         mBase.startIntentSender(intent, fillInIntent, flagsMask,
495                 flagsValues, extraFlags, options);
496     }
497 
498     @Override
sendBroadcast(Intent intent)499     public void sendBroadcast(Intent intent) {
500         mBase.sendBroadcast(intent);
501     }
502 
503     @Override
sendBroadcast(Intent intent, @Nullable String receiverPermission)504     public void sendBroadcast(Intent intent, @Nullable String receiverPermission) {
505         mBase.sendBroadcast(intent, receiverPermission);
506     }
507 
508     /** @hide */
509     @Override
sendBroadcastMultiplePermissions(@onNull Intent intent, @NonNull String[] receiverPermissions)510     public void sendBroadcastMultiplePermissions(@NonNull Intent intent,
511             @NonNull String[] receiverPermissions) {
512         mBase.sendBroadcastMultiplePermissions(intent, receiverPermissions);
513     }
514 
515     /** @hide */
516     @Override
sendBroadcastMultiplePermissions(@onNull Intent intent, @NonNull String[] receiverPermissions, @Nullable String[] excludedPermissions, @Nullable String[] excludedPackages)517     public void sendBroadcastMultiplePermissions(@NonNull Intent intent,
518             @NonNull String[] receiverPermissions, @Nullable String[] excludedPermissions,
519             @Nullable String[] excludedPackages) {
520         mBase.sendBroadcastMultiplePermissions(intent, receiverPermissions, excludedPermissions,
521                 excludedPackages);
522     }
523 
524     /** @hide */
525     @Override
sendBroadcastMultiplePermissions(@onNull Intent intent, @NonNull String[] receiverPermissions, @Nullable Bundle options)526     public void sendBroadcastMultiplePermissions(@NonNull Intent intent,
527             @NonNull String[] receiverPermissions, @Nullable Bundle options) {
528         mBase.sendBroadcastMultiplePermissions(intent, receiverPermissions, options);
529     }
530 
531     /** @hide */
532     @Override
sendBroadcastAsUserMultiplePermissions(Intent intent, UserHandle user, String[] receiverPermissions)533     public void sendBroadcastAsUserMultiplePermissions(Intent intent, UserHandle user,
534             String[] receiverPermissions) {
535         mBase.sendBroadcastAsUserMultiplePermissions(intent, user, receiverPermissions);
536     }
537 
538     /** @hide */
539     @SystemApi
540     @Override
sendBroadcast(Intent intent, @Nullable String receiverPermission, @Nullable Bundle options)541     public void sendBroadcast(Intent intent, @Nullable String receiverPermission,
542             @Nullable Bundle options) {
543         mBase.sendBroadcast(intent, receiverPermission, options);
544     }
545 
546     /** @hide */
547     @Override
sendBroadcast(Intent intent, @Nullable String receiverPermission, int appOp)548     public void sendBroadcast(Intent intent, @Nullable String receiverPermission, int appOp) {
549         mBase.sendBroadcast(intent, receiverPermission, appOp);
550     }
551 
552     @Override
sendOrderedBroadcast(Intent intent, @Nullable String receiverPermission)553     public void sendOrderedBroadcast(Intent intent,
554             @Nullable String receiverPermission) {
555         mBase.sendOrderedBroadcast(intent, receiverPermission);
556     }
557 
558     @Override
sendOrderedBroadcast( Intent intent, @Nullable String receiverPermission, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)559     public void sendOrderedBroadcast(
560             Intent intent, @Nullable String receiverPermission,
561             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
562             int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras) {
563         mBase.sendOrderedBroadcast(intent, receiverPermission,
564                 resultReceiver, scheduler, initialCode,
565                 initialData, initialExtras);
566     }
567 
568     /** @hide */
569     @SystemApi
570     @Override
sendOrderedBroadcast( Intent intent, @Nullable String receiverPermission, @Nullable Bundle options, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)571     public void sendOrderedBroadcast(
572             Intent intent, @Nullable String receiverPermission, @Nullable Bundle options,
573             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
574             int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras) {
575         mBase.sendOrderedBroadcast(intent, receiverPermission,
576                 options, resultReceiver, scheduler, initialCode,
577                 initialData, initialExtras);
578     }
579 
580     /** @hide */
581     @Override
sendOrderedBroadcast( Intent intent, @Nullable String receiverPermission, int appOp, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)582     public void sendOrderedBroadcast(
583             Intent intent, @Nullable String receiverPermission, int appOp,
584             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
585             int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras) {
586         mBase.sendOrderedBroadcast(intent, receiverPermission, appOp,
587                 resultReceiver, scheduler, initialCode,
588                 initialData, initialExtras);
589     }
590 
591     @Override
sendBroadcastAsUser(Intent intent, UserHandle user)592     public void sendBroadcastAsUser(Intent intent, UserHandle user) {
593         mBase.sendBroadcastAsUser(intent, user);
594     }
595 
596     @Override
sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission)597     public void sendBroadcastAsUser(Intent intent, UserHandle user,
598             String receiverPermission) {
599         mBase.sendBroadcastAsUser(intent, user, receiverPermission);
600     }
601 
602     /** @hide */
603     @Override
sendBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, @Nullable Bundle options)604     public void sendBroadcastAsUser(Intent intent, UserHandle user,
605             @Nullable String receiverPermission, @Nullable Bundle options) {
606         mBase.sendBroadcastAsUser(intent, user, receiverPermission, options);
607     }
608 
609     /** @hide */
610     @Override
sendBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp)611     public void sendBroadcastAsUser(Intent intent, UserHandle user,
612             @Nullable String receiverPermission, int appOp) {
613         mBase.sendBroadcastAsUser(intent, user, receiverPermission, appOp);
614     }
615 
616     @Override
sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)617     public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
618             @Nullable String receiverPermission, @Nullable BroadcastReceiver resultReceiver,
619             @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
620             @Nullable Bundle initialExtras) {
621         mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver,
622                 scheduler, initialCode, initialData, initialExtras);
623     }
624 
625     /** @hide */
626     @Override
sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)627     public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
628             @Nullable String receiverPermission, int appOp,
629             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
630             int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras) {
631         mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, resultReceiver,
632                 scheduler, initialCode, initialData, initialExtras);
633     }
634 
635     /** @hide */
636     @Override
sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp, @Nullable Bundle options, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)637     public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
638             @Nullable String receiverPermission, int appOp, @Nullable Bundle options,
639             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
640             int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras) {
641         mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options,
642                 resultReceiver, scheduler, initialCode, initialData, initialExtras);
643     }
644 
645     @Override
sendOrderedBroadcast(@equiresPermission @onNull Intent intent, @Nullable String receiverPermission, @Nullable String receiverAppOp, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)646     public void sendOrderedBroadcast(@RequiresPermission @NonNull Intent intent,
647             @Nullable String receiverPermission, @Nullable String receiverAppOp,
648             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
649             int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras) {
650         mBase.sendOrderedBroadcast(intent, receiverPermission, receiverAppOp, resultReceiver,
651                 scheduler, initialCode, initialData, initialExtras);
652     }
653 
654     @Override
sendOrderedBroadcast(@equiresPermission @onNull Intent intent, int initialCode, @Nullable String receiverPermission, @Nullable String receiverAppOp, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, @Nullable String initialData, @Nullable Bundle initialExtras, @Nullable Bundle options)655     public void sendOrderedBroadcast(@RequiresPermission @NonNull Intent intent, int initialCode,
656             @Nullable String receiverPermission, @Nullable String receiverAppOp,
657             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
658             @Nullable String initialData, @Nullable Bundle initialExtras,
659             @Nullable Bundle options) {
660         mBase.sendOrderedBroadcast(intent, initialCode, receiverPermission, receiverAppOp,
661                 resultReceiver, scheduler, initialData, initialExtras, options);
662     }
663 
664     @Override
665     @Deprecated
sendStickyBroadcast(Intent intent)666     public void sendStickyBroadcast(Intent intent) {
667         mBase.sendStickyBroadcast(intent);
668     }
669 
670     /**
671      * <p>Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
672      * Intent you are sending stays around after the broadcast is complete,
673      * so that others can quickly retrieve that data through the return
674      * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
675      * all other ways, this behaves the same as
676      * {@link #sendBroadcast(Intent)}.
677      *
678      * @deprecated Sticky broadcasts should not be used.  They provide no security (anyone
679      * can access them), no protection (anyone can modify them), and many other problems.
680      * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em>
681      * has changed, with another mechanism for apps to retrieve the current value whenever
682      * desired.
683      *
684      * @param intent The Intent to broadcast; all receivers matching this
685      * Intent will receive the broadcast, and the Intent will be held to
686      * be re-broadcast to future receivers.
687      * @param options (optional) Additional sending options, generated from a
688      * {@link android.app.BroadcastOptions}.
689      *
690      * @see #sendBroadcast(Intent)
691      * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
692      */
693     @Override
694     @Deprecated
sendStickyBroadcast(@onNull Intent intent, @Nullable Bundle options)695     public void sendStickyBroadcast(@NonNull Intent intent, @Nullable Bundle options) {
696         mBase.sendStickyBroadcast(intent, options);
697     }
698 
699     @Override
700     @Deprecated
sendStickyOrderedBroadcast(Intent intent, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)701     public void sendStickyOrderedBroadcast(Intent intent,
702             @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler,
703             int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras) {
704         mBase.sendStickyOrderedBroadcast(intent,
705                 resultReceiver, scheduler, initialCode,
706                 initialData, initialExtras);
707     }
708 
709     @Override
710     @Deprecated
removeStickyBroadcast(Intent intent)711     public void removeStickyBroadcast(Intent intent) {
712         mBase.removeStickyBroadcast(intent);
713     }
714 
715     @Override
716     @Deprecated
sendStickyBroadcastAsUser(Intent intent, UserHandle user)717     public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
718         mBase.sendStickyBroadcastAsUser(intent, user);
719     }
720 
721     /** @hide */
722     @Override
723     @Deprecated
sendStickyBroadcastAsUser(Intent intent, UserHandle user, @Nullable Bundle options)724     public void sendStickyBroadcastAsUser(Intent intent, UserHandle user,
725             @Nullable Bundle options) {
726         mBase.sendStickyBroadcastAsUser(intent, user, options);
727     }
728 
729     @Override
730     @Deprecated
sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)731     public void sendStickyOrderedBroadcastAsUser(Intent intent,
732             UserHandle user, @Nullable BroadcastReceiver resultReceiver,
733             @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
734             @Nullable Bundle initialExtras) {
735         mBase.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver,
736                 scheduler, initialCode, initialData, initialExtras);
737     }
738 
739     @Override
740     @Deprecated
removeStickyBroadcastAsUser(Intent intent, UserHandle user)741     public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
742         mBase.removeStickyBroadcastAsUser(intent, user);
743     }
744 
745     @Override
registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter)746     public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter) {
747         return mBase.registerReceiver(receiver, filter);
748     }
749 
750     @Override
registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter, int flags)751     public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter,
752             int flags) {
753         return mBase.registerReceiver(receiver, filter, flags);
754     }
755 
756     @Override
registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)757     public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter,
758             @Nullable String broadcastPermission, @Nullable Handler scheduler) {
759         return mBase.registerReceiver(receiver, filter, broadcastPermission,
760                 scheduler);
761     }
762 
763     @Override
registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags)764     public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter,
765             @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags) {
766         return mBase.registerReceiver(receiver, filter, broadcastPermission,
767                 scheduler, flags);
768     }
769 
770     /** @hide */
771     @Override
772     @Nullable
registerReceiverForAllUsers(@ullable BroadcastReceiver receiver, @NonNull IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)773     public Intent registerReceiverForAllUsers(@Nullable BroadcastReceiver receiver,
774             @NonNull IntentFilter filter, @Nullable String broadcastPermission,
775             @Nullable Handler scheduler) {
776         return mBase.registerReceiverForAllUsers(receiver, filter, broadcastPermission,
777                 scheduler);
778     }
779 
780     /** @hide */
781     @Override
782     @Nullable
registerReceiverForAllUsers(@ullable BroadcastReceiver receiver, @NonNull IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags)783     public Intent registerReceiverForAllUsers(@Nullable BroadcastReceiver receiver,
784             @NonNull IntentFilter filter, @Nullable String broadcastPermission,
785             @Nullable Handler scheduler, int flags) {
786         return mBase.registerReceiverForAllUsers(receiver, filter, broadcastPermission,
787                 scheduler, flags);
788     }
789 
790     /** @hide */
791     @Override
792     @UnsupportedAppUsage
registerReceiverAsUser(@ullable BroadcastReceiver receiver, UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)793     public Intent registerReceiverAsUser(@Nullable BroadcastReceiver receiver, UserHandle user,
794             IntentFilter filter, @Nullable String broadcastPermission,
795             @Nullable Handler scheduler) {
796         return mBase.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
797                 scheduler);
798     }
799 
800     /** @hide */
801     @Override
802     @UnsupportedAppUsage
registerReceiverAsUser(@ullable BroadcastReceiver receiver, UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags)803     public Intent registerReceiverAsUser(@Nullable BroadcastReceiver receiver, UserHandle user,
804             IntentFilter filter, @Nullable String broadcastPermission,
805             @Nullable Handler scheduler, int flags) {
806         return mBase.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
807                 scheduler, flags);
808     }
809 
810     @Override
unregisterReceiver(BroadcastReceiver receiver)811     public void unregisterReceiver(BroadcastReceiver receiver) {
812         mBase.unregisterReceiver(receiver);
813     }
814 
815     @Override
startService(Intent service)816     public @Nullable ComponentName startService(Intent service) {
817         return mBase.startService(service);
818     }
819 
820     @Override
startForegroundService(Intent service)821     public @Nullable ComponentName startForegroundService(Intent service) {
822         return mBase.startForegroundService(service);
823     }
824 
825     @Override
stopService(Intent name)826     public boolean stopService(Intent name) {
827         return mBase.stopService(name);
828     }
829 
830     /** @hide */
831     @Override
832     @UnsupportedAppUsage
startServiceAsUser(Intent service, UserHandle user)833     public @Nullable ComponentName startServiceAsUser(Intent service, UserHandle user) {
834         return mBase.startServiceAsUser(service, user);
835     }
836 
837     /** @hide */
838     @Override
839     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
startForegroundServiceAsUser(Intent service, UserHandle user)840     public @Nullable ComponentName startForegroundServiceAsUser(Intent service, UserHandle user) {
841         return mBase.startForegroundServiceAsUser(service, user);
842     }
843 
844     /** @hide */
845     @Override
stopServiceAsUser(Intent name, UserHandle user)846     public boolean stopServiceAsUser(Intent name, UserHandle user) {
847         return mBase.stopServiceAsUser(name, user);
848     }
849 
850     @Override
bindService(Intent service, ServiceConnection conn, int flags)851     public boolean bindService(Intent service, ServiceConnection conn,
852             int flags) {
853         return mBase.bindService(service, conn, flags);
854     }
855 
856     @Override
bindService(Intent service, int flags, Executor executor, ServiceConnection conn)857     public boolean bindService(Intent service, int flags, Executor executor,
858             ServiceConnection conn) {
859         return mBase.bindService(service, flags, executor, conn);
860     }
861 
862     @Override
bindIsolatedService(Intent service, int flags, String instanceName, Executor executor, ServiceConnection conn)863     public boolean bindIsolatedService(Intent service, int flags, String instanceName,
864             Executor executor, ServiceConnection conn) {
865         return mBase.bindIsolatedService(service, flags, instanceName, executor, conn);
866     }
867 
868     /** @hide */
869     @Override
bindServiceAsUser(Intent service, ServiceConnection conn, int flags, UserHandle user)870     public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags,
871             UserHandle user) {
872         return mBase.bindServiceAsUser(service, conn, flags, user);
873     }
874 
875     /** @hide */
876     @Override
bindServiceAsUser(Intent service, ServiceConnection conn, int flags, Handler handler, UserHandle user)877     public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags,
878             Handler handler, UserHandle user) {
879         return mBase.bindServiceAsUser(service, conn, flags, handler, user);
880     }
881 
882     @Override
updateServiceGroup(ServiceConnection conn, int group, int importance)883     public void updateServiceGroup(ServiceConnection conn, int group, int importance) {
884         mBase.updateServiceGroup(conn, group, importance);
885     }
886 
887     @Override
unbindService(ServiceConnection conn)888     public void unbindService(ServiceConnection conn) {
889         mBase.unbindService(conn);
890     }
891 
892     @Override
startInstrumentation(ComponentName className, @Nullable String profileFile, @Nullable Bundle arguments)893     public boolean startInstrumentation(ComponentName className,
894             @Nullable String profileFile, @Nullable Bundle arguments) {
895         return mBase.startInstrumentation(className, profileFile, arguments);
896     }
897 
898     @Override
getSystemService(String name)899     public @Nullable Object getSystemService(String name) {
900         return mBase.getSystemService(name);
901     }
902 
903     @Override
getSystemServiceName(Class<?> serviceClass)904     public String getSystemServiceName(Class<?> serviceClass) {
905         return mBase.getSystemServiceName(serviceClass);
906     }
907 
908     @Override
checkPermission(String permission, int pid, int uid)909     public int checkPermission(String permission, int pid, int uid) {
910         return mBase.checkPermission(permission, pid, uid);
911     }
912 
913     /** @hide */
914     @Override
checkPermission(String permission, int pid, int uid, IBinder callerToken)915     public int checkPermission(String permission, int pid, int uid, IBinder callerToken) {
916         return mBase.checkPermission(permission, pid, uid, callerToken);
917     }
918 
919     @Override
checkCallingPermission(String permission)920     public int checkCallingPermission(String permission) {
921         return mBase.checkCallingPermission(permission);
922     }
923 
924     @Override
checkCallingOrSelfPermission(String permission)925     public int checkCallingOrSelfPermission(String permission) {
926         return mBase.checkCallingOrSelfPermission(permission);
927     }
928 
929     @Override
checkSelfPermission(String permission)930     public int checkSelfPermission(String permission) {
931        return mBase.checkSelfPermission(permission);
932     }
933 
934     @Override
enforcePermission( String permission, int pid, int uid, @Nullable String message)935     public void enforcePermission(
936             String permission, int pid, int uid, @Nullable String message) {
937         mBase.enforcePermission(permission, pid, uid, message);
938     }
939 
940     @Override
enforceCallingPermission(String permission, @Nullable String message)941     public void enforceCallingPermission(String permission, @Nullable String message) {
942         mBase.enforceCallingPermission(permission, message);
943     }
944 
945     @Override
enforceCallingOrSelfPermission( String permission, @Nullable String message)946     public void enforceCallingOrSelfPermission(
947             String permission, @Nullable String message) {
948         mBase.enforceCallingOrSelfPermission(permission, message);
949     }
950 
951     @Override
grantUriPermission(String toPackage, Uri uri, int modeFlags)952     public void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
953         mBase.grantUriPermission(toPackage, uri, modeFlags);
954     }
955 
956     @Override
revokeUriPermission(Uri uri, int modeFlags)957     public void revokeUriPermission(Uri uri, int modeFlags) {
958         mBase.revokeUriPermission(uri, modeFlags);
959     }
960 
961     @Override
revokeUriPermission(String targetPackage, Uri uri, int modeFlags)962     public void revokeUriPermission(String targetPackage, Uri uri, int modeFlags) {
963         mBase.revokeUriPermission(targetPackage, uri, modeFlags);
964     }
965 
966     @Override
checkUriPermission(Uri uri, int pid, int uid, int modeFlags)967     public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
968         return mBase.checkUriPermission(uri, pid, uid, modeFlags);
969     }
970 
971     @NonNull
972     @Override
checkUriPermissions(@onNull List<Uri> uris, int pid, int uid, int modeFlags)973     public int[] checkUriPermissions(@NonNull List<Uri> uris, int pid, int uid,
974             int modeFlags) {
975         return mBase.checkUriPermissions(uris, pid, uid, modeFlags);
976     }
977 
978     /** @hide */
979     @Override
checkUriPermission(Uri uri, int pid, int uid, int modeFlags, IBinder callerToken)980     public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags, IBinder callerToken) {
981         return mBase.checkUriPermission(uri, pid, uid, modeFlags, callerToken);
982     }
983 
984     @Override
checkCallingUriPermission(Uri uri, int modeFlags)985     public int checkCallingUriPermission(Uri uri, int modeFlags) {
986         return mBase.checkCallingUriPermission(uri, modeFlags);
987     }
988 
989     @NonNull
990     @Override
checkCallingUriPermissions(@onNull List<Uri> uris, int modeFlags)991     public int[] checkCallingUriPermissions(@NonNull List<Uri> uris, int modeFlags) {
992         return mBase.checkCallingUriPermissions(uris, modeFlags);
993     }
994 
995     @Override
checkCallingOrSelfUriPermission(Uri uri, int modeFlags)996     public int checkCallingOrSelfUriPermission(Uri uri, int modeFlags) {
997         return mBase.checkCallingOrSelfUriPermission(uri, modeFlags);
998     }
999 
1000     @NonNull
1001     @Override
checkCallingOrSelfUriPermissions(@onNull List<Uri> uris, int modeFlags)1002     public int[] checkCallingOrSelfUriPermissions(@NonNull List<Uri> uris, int modeFlags) {
1003         return mBase.checkCallingOrSelfUriPermissions(uris, modeFlags);
1004     }
1005 
1006     @Override
checkUriPermission(@ullable Uri uri, @Nullable String readPermission, @Nullable String writePermission, int pid, int uid, int modeFlags)1007     public int checkUriPermission(@Nullable Uri uri, @Nullable String readPermission,
1008             @Nullable String writePermission, int pid, int uid, int modeFlags) {
1009         return mBase.checkUriPermission(uri, readPermission, writePermission,
1010                 pid, uid, modeFlags);
1011     }
1012 
1013     @Override
enforceUriPermission( Uri uri, int pid, int uid, int modeFlags, String message)1014     public void enforceUriPermission(
1015             Uri uri, int pid, int uid, int modeFlags, String message) {
1016         mBase.enforceUriPermission(uri, pid, uid, modeFlags, message);
1017     }
1018 
1019     @Override
enforceCallingUriPermission( Uri uri, int modeFlags, String message)1020     public void enforceCallingUriPermission(
1021             Uri uri, int modeFlags, String message) {
1022         mBase.enforceCallingUriPermission(uri, modeFlags, message);
1023     }
1024 
1025     @Override
enforceCallingOrSelfUriPermission( Uri uri, int modeFlags, String message)1026     public void enforceCallingOrSelfUriPermission(
1027             Uri uri, int modeFlags, String message) {
1028         mBase.enforceCallingOrSelfUriPermission(uri, modeFlags, message);
1029     }
1030 
1031     @Override
enforceUriPermission( @ullable Uri uri, @Nullable String readPermission, @Nullable String writePermission, int pid, int uid, int modeFlags, @Nullable String message)1032     public void enforceUriPermission(
1033             @Nullable Uri uri, @Nullable String readPermission, @Nullable String writePermission,
1034             int pid, int uid, int modeFlags, @Nullable String message) {
1035         mBase.enforceUriPermission(
1036                 uri, readPermission, writePermission, pid, uid, modeFlags,
1037                 message);
1038     }
1039 
1040     @Override
revokeSelfPermissionsOnKill(@onNull Collection<String> permissions)1041     public void revokeSelfPermissionsOnKill(@NonNull Collection<String> permissions) {
1042         mBase.revokeSelfPermissionsOnKill(permissions);
1043     }
1044 
1045     @Override
createPackageContext(String packageName, int flags)1046     public Context createPackageContext(String packageName, int flags)
1047         throws PackageManager.NameNotFoundException {
1048         return mBase.createPackageContext(packageName, flags);
1049     }
1050 
1051     /** @hide */
1052     @Override
createPackageContextAsUser(String packageName, int flags, UserHandle user)1053     public Context createPackageContextAsUser(String packageName, int flags, UserHandle user)
1054             throws PackageManager.NameNotFoundException {
1055         return mBase.createPackageContextAsUser(packageName, flags, user);
1056     }
1057 
1058     /** @hide */
1059     @Override
createContextAsUser(UserHandle user, @CreatePackageOptions int flags)1060     public Context createContextAsUser(UserHandle user, @CreatePackageOptions int flags) {
1061         return mBase.createContextAsUser(user, flags);
1062     }
1063 
1064     /** @hide */
1065     @Override
1066     @UnsupportedAppUsage(trackingBug = 175981568)
createApplicationContext(ApplicationInfo application, int flags)1067     public Context createApplicationContext(ApplicationInfo application,
1068             int flags) throws PackageManager.NameNotFoundException {
1069         return mBase.createApplicationContext(application, flags);
1070     }
1071 
1072     /** @hide */
1073     @Override
createContextForSplit(String splitName)1074     public Context createContextForSplit(String splitName)
1075             throws PackageManager.NameNotFoundException {
1076         return mBase.createContextForSplit(splitName);
1077     }
1078 
1079     /** @hide */
1080     @Override
getUserId()1081     public int getUserId() {
1082         return mBase.getUserId();
1083     }
1084 
1085     /** @hide */
1086     @Override
getUser()1087     public UserHandle getUser() {
1088         return mBase.getUser();
1089     }
1090 
1091     @Override
createConfigurationContext(Configuration overrideConfiguration)1092     public Context createConfigurationContext(Configuration overrideConfiguration) {
1093         return mBase.createConfigurationContext(overrideConfiguration);
1094     }
1095 
1096     @Override
createDisplayContext(Display display)1097     public Context createDisplayContext(Display display) {
1098         return mBase.createDisplayContext(display);
1099     }
1100 
1101     @Override
1102     @NonNull
createWindowContext(@indowType int type, @Nullable Bundle options)1103     public Context createWindowContext(@WindowType int type, @Nullable Bundle options) {
1104         return mBase.createWindowContext(type, options);
1105     }
1106 
1107     @Override
1108     @NonNull
createWindowContext(@onNull Display display, @WindowType int type, @Nullable Bundle options)1109     public Context createWindowContext(@NonNull Display display, @WindowType int type,
1110             @Nullable Bundle options) {
1111         return mBase.createWindowContext(display, type, options);
1112     }
1113 
1114     @Override
1115     @NonNull
createContext(@onNull ContextParams contextParams)1116     public Context createContext(@NonNull ContextParams contextParams) {
1117         return mBase.createContext(contextParams);
1118     }
1119 
1120     @Override
createAttributionContext(@ullable String attributionTag)1121     public @NonNull Context createAttributionContext(@Nullable String attributionTag) {
1122         return mBase.createAttributionContext(attributionTag);
1123     }
1124 
1125     @NonNull
1126     @Override
getAttributionSource()1127     public AttributionSource getAttributionSource() {
1128         return mBase.getAttributionSource();
1129     }
1130 
1131     @Override
isRestricted()1132     public boolean isRestricted() {
1133         return mBase.isRestricted();
1134     }
1135 
1136     /** @hide */
1137     @Override
getDisplayAdjustments(int displayId)1138     public DisplayAdjustments getDisplayAdjustments(int displayId) {
1139         return mBase.getDisplayAdjustments(displayId);
1140     }
1141 
1142     @Override
getDisplay()1143     public @Nullable Display getDisplay() {
1144         return mBase.getDisplay();
1145     }
1146 
1147     /** @hide */
1148     @Override
getDisplayNoVerify()1149     public @Nullable Display getDisplayNoVerify() {
1150         return mBase.getDisplayNoVerify();
1151     }
1152 
1153     /**
1154      * @hide
1155      */
1156     @Override
getDisplayId()1157     public int getDisplayId() {
1158         return mBase.getDisplayId();
1159     }
1160 
1161     /**
1162      * @hide
1163      */
1164     @Override
updateDisplay(int displayId)1165     public void updateDisplay(int displayId) {
1166         mBase.updateDisplay(displayId);
1167     }
1168 
1169     @Override
createDeviceProtectedStorageContext()1170     public Context createDeviceProtectedStorageContext() {
1171         return mBase.createDeviceProtectedStorageContext();
1172     }
1173 
1174     /** {@hide} */
1175     @SystemApi
1176     @Override
createCredentialProtectedStorageContext()1177     public Context createCredentialProtectedStorageContext() {
1178         return mBase.createCredentialProtectedStorageContext();
1179     }
1180 
1181     /** @hide */
1182     @UiContext
1183     @NonNull
1184     @Override
createTokenContext(@onNull IBinder token, @NonNull Display display)1185     public Context createTokenContext(@NonNull IBinder token, @NonNull Display display) {
1186         return mBase.createTokenContext(token, display);
1187     }
1188 
1189     @Override
isDeviceProtectedStorage()1190     public boolean isDeviceProtectedStorage() {
1191         return mBase.isDeviceProtectedStorage();
1192     }
1193 
1194     /** {@hide} */
1195     @SystemApi
1196     @Override
isCredentialProtectedStorage()1197     public boolean isCredentialProtectedStorage() {
1198         return mBase.isCredentialProtectedStorage();
1199     }
1200 
1201     /** {@hide} */
1202     @Override
canLoadUnsafeResources()1203     public boolean canLoadUnsafeResources() {
1204         return mBase.canLoadUnsafeResources();
1205     }
1206 
1207     /**
1208      * @hide
1209      */
1210     @Override
getActivityToken()1211     public @Nullable IBinder getActivityToken() {
1212         return mBase.getActivityToken();
1213     }
1214 
1215     /**
1216      * @hide
1217      */
1218     @Override
getWindowContextToken()1219     public @Nullable IBinder getWindowContextToken() {
1220         return mBase != null ? mBase.getWindowContextToken() : null;
1221     }
1222 
1223     /**
1224      * @hide
1225      */
1226     @Override
getServiceDispatcher(ServiceConnection conn, Handler handler, int flags)1227     public @Nullable IServiceConnection getServiceDispatcher(ServiceConnection conn,
1228             Handler handler, int flags) {
1229         return mBase.getServiceDispatcher(conn, handler, flags);
1230     }
1231 
1232     /**
1233      * @hide
1234      */
1235     @Override
getIApplicationThread()1236     public IApplicationThread getIApplicationThread() {
1237         return mBase.getIApplicationThread();
1238     }
1239 
1240     /**
1241      * @hide
1242      */
1243     @Override
getMainThreadHandler()1244     public Handler getMainThreadHandler() {
1245         return mBase.getMainThreadHandler();
1246     }
1247 
1248     /**
1249      * @hide
1250      */
1251     @Override
getNextAutofillId()1252     public int getNextAutofillId() {
1253         return mBase.getNextAutofillId();
1254     }
1255 
1256     /**
1257      * @hide
1258      */
1259     @Override
getAutofillClient()1260     public AutofillClient getAutofillClient() {
1261         return mBase.getAutofillClient();
1262     }
1263 
1264     /**
1265      * @hide
1266      */
1267     @Override
setAutofillClient(AutofillClient client)1268     public void setAutofillClient(AutofillClient client) {
1269         mBase.setAutofillClient(client);
1270     }
1271 
1272     /** @hide */
1273     @Override
getAutofillOptions()1274     public AutofillOptions getAutofillOptions() {
1275         return mBase == null ? null : mBase.getAutofillOptions();
1276     }
1277 
1278     /** @hide */
1279     @Override
setAutofillOptions(AutofillOptions options)1280     public void setAutofillOptions(AutofillOptions options) {
1281         if (mBase != null) {
1282             mBase.setAutofillOptions(options);
1283         }
1284     }
1285 
1286     /**
1287      * @hide
1288      */
1289     @Override
getContentCaptureOptions()1290     public @Nullable ContentCaptureOptions getContentCaptureOptions() {
1291         return mBase == null ? null : mBase.getContentCaptureOptions();
1292     }
1293 
1294     /**
1295      * @hide
1296      */
1297     @TestApi
1298     @Override
setContentCaptureOptions(@ullable ContentCaptureOptions options)1299     public void setContentCaptureOptions(@Nullable ContentCaptureOptions options) {
1300         if (mBase != null) {
1301             mBase.setContentCaptureOptions(options);
1302         }
1303     }
1304 
1305     /**
1306      * @hide
1307      */
1308     @Override
isUiContext()1309     public boolean isUiContext() {
1310         if (mBase == null) {
1311             return false;
1312         }
1313         return mBase.isUiContext();
1314     }
1315 
1316     /**
1317      * @hide
1318      */
1319     @Override
isConfigurationContext()1320     public boolean isConfigurationContext() {
1321         if (mBase == null) {
1322             return false;
1323         }
1324         return mBase.isConfigurationContext();
1325     }
1326 
1327     /**
1328      * Add a new {@link ComponentCallbacks} to the base application of the
1329      * Context, which will be called at the same times as the ComponentCallbacks
1330      * methods of activities and other components are called. Note that you
1331      * <em>must</em> be sure to use {@link #unregisterComponentCallbacks} when
1332      * appropriate in the future; this will not be removed for you.
1333      * <p>
1334      * After {@link Build.VERSION_CODES#TIRAMISU}, the {@link ComponentCallbacks} will be registered
1335      * to {@link #getBaseContext() the base Context}, and can be only used after
1336      * {@link #attachBaseContext(Context)}. Users can still call to
1337      * {@code getApplicationContext().registerComponentCallbacks(ComponentCallbacks)} to add
1338      * {@link ComponentCallbacks} to the base application.
1339      *
1340      * @param callback The interface to call.  This can be either a
1341      * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
1342      * @throws IllegalStateException if this method calls before {@link #attachBaseContext(Context)}
1343      */
1344     @Override
registerComponentCallbacks(ComponentCallbacks callback)1345     public void registerComponentCallbacks(ComponentCallbacks callback) {
1346         if (mBase != null) {
1347             mBase.registerComponentCallbacks(callback);
1348         } else if (!CompatChanges.isChangeEnabled(OVERRIDABLE_COMPONENT_CALLBACKS)) {
1349             super.registerComponentCallbacks(callback);
1350             synchronized (mLock) {
1351                 // Also register ComponentCallbacks to ContextWrapper, so we can find the correct
1352                 // Context to unregister it for compatibility.
1353                 if (mCallbacksRegisteredToSuper == null) {
1354                     mCallbacksRegisteredToSuper = new ArrayList<>();
1355                 }
1356                 mCallbacksRegisteredToSuper.add(callback);
1357             }
1358         } else {
1359             // Throw exception for Application targeting T+
1360             throw new IllegalStateException("ComponentCallbacks must be registered after "
1361                     + "this ContextWrapper is attached to a base Context.");
1362         }
1363     }
1364 
1365     /**
1366      * Remove a {@link ComponentCallbacks} object that was previously registered
1367      * with {@link #registerComponentCallbacks(ComponentCallbacks)}.
1368      * <p>
1369      * After {@link Build.VERSION_CODES#TIRAMISU}, the {@link ComponentCallbacks} will be
1370      * unregistered to {@link #getBaseContext() the base Context}, and can be only used after
1371      * {@link #attachBaseContext(Context)}
1372      * </p>
1373      *
1374      * @param callback The interface to call.  This can be either a
1375      * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
1376      * @throws IllegalStateException if this method calls before {@link #attachBaseContext(Context)}
1377      */
1378     @Override
unregisterComponentCallbacks(ComponentCallbacks callback)1379     public void unregisterComponentCallbacks(ComponentCallbacks callback) {
1380         // It usually means the ComponentCallbacks is registered before this ContextWrapper attaches
1381         // to a base Context and Application is targeting prior to S-v2. We should unregister the
1382         // ComponentCallbacks to the Application Context instead to prevent leak.
1383         synchronized (mLock) {
1384             if (mCallbacksRegisteredToSuper != null
1385                     && mCallbacksRegisteredToSuper.contains(callback)) {
1386                 super.unregisterComponentCallbacks(callback);
1387                 mCallbacksRegisteredToSuper.remove(callback);
1388             } else if (mBase != null) {
1389                 mBase.unregisterComponentCallbacks(callback);
1390             } else if (CompatChanges.isChangeEnabled(OVERRIDABLE_COMPONENT_CALLBACKS)) {
1391                 // Throw exception for Application that is targeting S-v2+
1392                 throw new IllegalStateException("ComponentCallbacks must be unregistered after "
1393                         + "this ContextWrapper is attached to a base Context.");
1394             }
1395         }
1396         // Do nothing if the callback hasn't been registered to Application Context by
1397         // super.unregisterComponentCallbacks() for Application that is targeting prior to T.
1398     }
1399 }
1400