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