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