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