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