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