Loading core/java/android/app/ActivityThread.java +13 −4 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,7 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility.PACK import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.assist.AssistContent; import android.app.assist.AssistContent; import android.app.assist.AssistStructure; import android.app.assist.AssistStructure; import android.app.backup.BackupAgent; import android.app.backup.BackupAgent; Loading @@ -61,6 +62,7 @@ import android.content.ContentCaptureOptions; import android.content.ContentProvider; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Context.CreatePackageOptions; import android.content.IContentProvider; import android.content.IContentProvider; import android.content.IIntentReceiver; import android.content.IIntentReceiver; import android.content.Intent; import android.content.Intent; Loading @@ -72,6 +74,7 @@ import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.ApplicationInfoFlags; import android.content.pm.ParceledListSlice; import android.content.pm.ParceledListSlice; import android.content.pm.PermissionInfo; import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfo; Loading Loading @@ -2367,16 +2370,22 @@ public final class ActivityThread extends ClientTransactionHandler @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags) { @CreatePackageOptions int flags) { return getPackageInfo(packageName, compatInfo, flags, UserHandle.myUserId()); return getPackageInfo(packageName, compatInfo, flags, UserHandle.myUserId()); } } public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags, int userId) { @CreatePackageOptions int flags, @UserIdInt int userId) { return getPackageInfo(packageName, compatInfo, flags, userId, 0 /* packageFlags */); } public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, @CreatePackageOptions int flags, @UserIdInt int userId, @ApplicationInfoFlags int packageFlags) { final boolean differentUser = (UserHandle.myUserId() != userId); final boolean differentUser = (UserHandle.myUserId() != userId); ApplicationInfo ai = PackageManager.getApplicationInfoAsUserCached( ApplicationInfo ai = PackageManager.getApplicationInfoAsUserCached( packageName, packageName, PackageManager.GET_SHARED_LIBRARY_FILES packageFlags | PackageManager.GET_SHARED_LIBRARY_FILES | PackageManager.MATCH_DEBUG_TRIAGED_MISSING, | PackageManager.MATCH_DEBUG_TRIAGED_MISSING, (userId < 0) ? UserHandle.myUserId() : userId); (userId < 0) ? UserHandle.myUserId() : userId); synchronized (mResourcesManager) { synchronized (mResourcesManager) { Loading Loading @@ -2419,7 +2428,7 @@ public final class ActivityThread extends ClientTransactionHandler @UnsupportedAppUsage(trackingBug = 171933273) @UnsupportedAppUsage(trackingBug = 171933273) public final LoadedApk getPackageInfo(ApplicationInfo ai, CompatibilityInfo compatInfo, public final LoadedApk getPackageInfo(ApplicationInfo ai, CompatibilityInfo compatInfo, int flags) { @CreatePackageOptions int flags) { boolean includeCode = (flags&Context.CONTEXT_INCLUDE_CODE) != 0; boolean includeCode = (flags&Context.CONTEXT_INCLUDE_CODE) != 0; boolean securityViolation = includeCode && ai.uid != 0 boolean securityViolation = includeCode && ai.uid != 0 && ai.uid != Process.SYSTEM_UID && (mBoundApplication != null && ai.uid != Process.SYSTEM_UID && (mBoundApplication != null Loading core/java/android/app/ContextImpl.java +10 −2 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UiContext; import android.annotation.UiContext; import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage; import android.content.AttributionSource; import android.content.AutofillOptions; import android.content.AutofillOptions; import android.content.BroadcastReceiver; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ComponentName; Loading @@ -47,6 +48,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.ApplicationInfoFlags; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; import android.content.res.AssetManager; import android.content.res.CompatResources; import android.content.res.CompatResources; Loading @@ -60,7 +62,6 @@ import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.graphics.Bitmap; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.net.Uri; import android.content.AttributionSource; import android.os.Binder; import android.os.Binder; import android.os.Build; import android.os.Build; import android.os.Bundle; import android.os.Bundle; Loading Loading @@ -2493,6 +2494,13 @@ class ContextImpl extends Context { @Override @Override public Context createPackageContextAsUser(String packageName, int flags, UserHandle user) public Context createPackageContextAsUser(String packageName, int flags, UserHandle user) throws NameNotFoundException { throws NameNotFoundException { return createPackageContextAsUser(packageName, flags, user, 0 /* packageFlags */); } @Override public Context createPackageContextAsUser( @NonNull String packageName, @CreatePackageOptions int flags, @NonNull UserHandle user, @ApplicationInfoFlags int packageFlags) throws PackageManager.NameNotFoundException { if (packageName.equals("system") || packageName.equals("android")) { if (packageName.equals("system") || packageName.equals("android")) { // The system resources are loaded in every application, so we can safely copy // The system resources are loaded in every application, so we can safely copy // the context without reloading Resources. // the context without reloading Resources. Loading @@ -2503,7 +2511,7 @@ class ContextImpl extends Context { } } LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(), LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(), flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier()); flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier(), packageFlags); if (pi != null) { if (pi != null) { ContextImpl c = new ContextImpl(this, mMainThread, pi, mParams, ContextImpl c = new ContextImpl(this, mMainThread, pi, mParams, mAttributionSource.getAttributionTag(), mAttributionSource.getAttributionTag(), Loading core/java/android/app/Notification.java +4 −3 Original line number Original line Diff line number Diff line Loading @@ -6478,10 +6478,11 @@ public class Notification implements Parcelable ApplicationInfo applicationInfo = n.extras.getParcelable( ApplicationInfo applicationInfo = n.extras.getParcelable( EXTRA_BUILDER_APPLICATION_INFO); EXTRA_BUILDER_APPLICATION_INFO); Context builderContext; Context builderContext; if (applicationInfo != null) { if (applicationInfo != null && applicationInfo.packageName != null) { try { try { builderContext = context.createApplicationContext(applicationInfo, builderContext = context.createPackageContextAsUser(applicationInfo.packageName, Context.CONTEXT_RESTRICTED); Context.CONTEXT_RESTRICTED, UserHandle.getUserHandleForUid(applicationInfo.uid)); } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { Log.e(TAG, "ApplicationInfo " + applicationInfo + " not found"); Log.e(TAG, "ApplicationInfo " + applicationInfo + " not found"); builderContext = context; // try with our context builderContext = context; // try with our context Loading core/java/android/appwidget/AppWidgetHostView.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Bundle; import android.os.CancellationSignal; import android.os.CancellationSignal; import android.os.Parcelable; import android.os.Parcelable; import android.os.UserHandle; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.Log; import android.util.Log; import android.util.Pair; import android.util.Pair; Loading Loading @@ -718,9 +719,10 @@ public class AppWidgetHostView extends FrameLayout { protected Context getRemoteContext() { protected Context getRemoteContext() { try { try { // Return if cloned successfully, otherwise default // Return if cloned successfully, otherwise default Context newContext = mContext.createApplicationContext( final ApplicationInfo info = mInfo.providerInfo.applicationInfo; mInfo.providerInfo.applicationInfo, Context newContext = mContext.createPackageContextAsUser(info.packageName, Context.CONTEXT_RESTRICTED); Context.CONTEXT_RESTRICTED, UserHandle.getUserHandleForUid(info.uid)); if (mColorResources != null) { if (mColorResources != null) { mColorResources.apply(newContext); mColorResources.apply(newContext); } } Loading core/java/android/content/Context.java +26 −0 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.app.time.TimeManager; import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.ApplicationInfoFlags; import android.content.res.AssetManager; import android.content.res.AssetManager; import android.content.res.ColorStateList; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Configuration; Loading Loading @@ -6229,6 +6230,23 @@ public abstract class Context { return this; return this; } } /** * Similar to {@link #createPackageContextAsUser(String, int, UserHandle)}, but also allows * specifying the flags used to retrieve the {@link ApplicationInfo} of the package. * * @hide */ @NonNull public Context createPackageContextAsUser( @NonNull String packageName, @CreatePackageOptions int flags, @NonNull UserHandle user, @ApplicationInfoFlags int packageFlags) throws PackageManager.NameNotFoundException { if (Build.IS_ENG) { throw new IllegalStateException("createPackageContextAsUser not overridden!"); } return this; } /** /** * Similar to {@link #createPackageContext(String, int)}, but for the own package with a * Similar to {@link #createPackageContext(String, int)}, but for the own package with a * different {@link UserHandle}. For example, {@link #getContentResolver()} * different {@link UserHandle}. For example, {@link #getContentResolver()} Loading @@ -6248,10 +6266,18 @@ public abstract class Context { /** /** * Creates a context given an {@link android.content.pm.ApplicationInfo}. * Creates a context given an {@link android.content.pm.ApplicationInfo}. * * * @deprecated use {@link #createPackageContextAsUser(String, int, UserHandle, int)} * If an application caches an ApplicationInfo and uses it to call this method, * the app will not get the most recent version of Runtime Resource Overlays for * that application. To make things worse, the LoadedApk stored in * {@code ActivityThread#mResourcePackages} is updated using the old ApplicationInfo * causing further uses of the cached LoadedApk to return outdated information. * * @hide * @hide */ */ @SuppressWarnings("HiddenAbstractMethod") @SuppressWarnings("HiddenAbstractMethod") @UnsupportedAppUsage @UnsupportedAppUsage @Deprecated public abstract Context createApplicationContext(ApplicationInfo application, public abstract Context createApplicationContext(ApplicationInfo application, @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; Loading Loading
core/java/android/app/ActivityThread.java +13 −4 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,7 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility.PACK import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.assist.AssistContent; import android.app.assist.AssistContent; import android.app.assist.AssistStructure; import android.app.assist.AssistStructure; import android.app.backup.BackupAgent; import android.app.backup.BackupAgent; Loading @@ -61,6 +62,7 @@ import android.content.ContentCaptureOptions; import android.content.ContentProvider; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Context.CreatePackageOptions; import android.content.IContentProvider; import android.content.IContentProvider; import android.content.IIntentReceiver; import android.content.IIntentReceiver; import android.content.Intent; import android.content.Intent; Loading @@ -72,6 +74,7 @@ import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.ApplicationInfoFlags; import android.content.pm.ParceledListSlice; import android.content.pm.ParceledListSlice; import android.content.pm.PermissionInfo; import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfo; Loading Loading @@ -2367,16 +2370,22 @@ public final class ActivityThread extends ClientTransactionHandler @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags) { @CreatePackageOptions int flags) { return getPackageInfo(packageName, compatInfo, flags, UserHandle.myUserId()); return getPackageInfo(packageName, compatInfo, flags, UserHandle.myUserId()); } } public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags, int userId) { @CreatePackageOptions int flags, @UserIdInt int userId) { return getPackageInfo(packageName, compatInfo, flags, userId, 0 /* packageFlags */); } public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, @CreatePackageOptions int flags, @UserIdInt int userId, @ApplicationInfoFlags int packageFlags) { final boolean differentUser = (UserHandle.myUserId() != userId); final boolean differentUser = (UserHandle.myUserId() != userId); ApplicationInfo ai = PackageManager.getApplicationInfoAsUserCached( ApplicationInfo ai = PackageManager.getApplicationInfoAsUserCached( packageName, packageName, PackageManager.GET_SHARED_LIBRARY_FILES packageFlags | PackageManager.GET_SHARED_LIBRARY_FILES | PackageManager.MATCH_DEBUG_TRIAGED_MISSING, | PackageManager.MATCH_DEBUG_TRIAGED_MISSING, (userId < 0) ? UserHandle.myUserId() : userId); (userId < 0) ? UserHandle.myUserId() : userId); synchronized (mResourcesManager) { synchronized (mResourcesManager) { Loading Loading @@ -2419,7 +2428,7 @@ public final class ActivityThread extends ClientTransactionHandler @UnsupportedAppUsage(trackingBug = 171933273) @UnsupportedAppUsage(trackingBug = 171933273) public final LoadedApk getPackageInfo(ApplicationInfo ai, CompatibilityInfo compatInfo, public final LoadedApk getPackageInfo(ApplicationInfo ai, CompatibilityInfo compatInfo, int flags) { @CreatePackageOptions int flags) { boolean includeCode = (flags&Context.CONTEXT_INCLUDE_CODE) != 0; boolean includeCode = (flags&Context.CONTEXT_INCLUDE_CODE) != 0; boolean securityViolation = includeCode && ai.uid != 0 boolean securityViolation = includeCode && ai.uid != 0 && ai.uid != Process.SYSTEM_UID && (mBoundApplication != null && ai.uid != Process.SYSTEM_UID && (mBoundApplication != null Loading
core/java/android/app/ContextImpl.java +10 −2 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UiContext; import android.annotation.UiContext; import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage; import android.content.AttributionSource; import android.content.AutofillOptions; import android.content.AutofillOptions; import android.content.BroadcastReceiver; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ComponentName; Loading @@ -47,6 +48,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.ApplicationInfoFlags; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; import android.content.res.AssetManager; import android.content.res.CompatResources; import android.content.res.CompatResources; Loading @@ -60,7 +62,6 @@ import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.graphics.Bitmap; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.net.Uri; import android.content.AttributionSource; import android.os.Binder; import android.os.Binder; import android.os.Build; import android.os.Build; import android.os.Bundle; import android.os.Bundle; Loading Loading @@ -2493,6 +2494,13 @@ class ContextImpl extends Context { @Override @Override public Context createPackageContextAsUser(String packageName, int flags, UserHandle user) public Context createPackageContextAsUser(String packageName, int flags, UserHandle user) throws NameNotFoundException { throws NameNotFoundException { return createPackageContextAsUser(packageName, flags, user, 0 /* packageFlags */); } @Override public Context createPackageContextAsUser( @NonNull String packageName, @CreatePackageOptions int flags, @NonNull UserHandle user, @ApplicationInfoFlags int packageFlags) throws PackageManager.NameNotFoundException { if (packageName.equals("system") || packageName.equals("android")) { if (packageName.equals("system") || packageName.equals("android")) { // The system resources are loaded in every application, so we can safely copy // The system resources are loaded in every application, so we can safely copy // the context without reloading Resources. // the context without reloading Resources. Loading @@ -2503,7 +2511,7 @@ class ContextImpl extends Context { } } LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(), LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(), flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier()); flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier(), packageFlags); if (pi != null) { if (pi != null) { ContextImpl c = new ContextImpl(this, mMainThread, pi, mParams, ContextImpl c = new ContextImpl(this, mMainThread, pi, mParams, mAttributionSource.getAttributionTag(), mAttributionSource.getAttributionTag(), Loading
core/java/android/app/Notification.java +4 −3 Original line number Original line Diff line number Diff line Loading @@ -6478,10 +6478,11 @@ public class Notification implements Parcelable ApplicationInfo applicationInfo = n.extras.getParcelable( ApplicationInfo applicationInfo = n.extras.getParcelable( EXTRA_BUILDER_APPLICATION_INFO); EXTRA_BUILDER_APPLICATION_INFO); Context builderContext; Context builderContext; if (applicationInfo != null) { if (applicationInfo != null && applicationInfo.packageName != null) { try { try { builderContext = context.createApplicationContext(applicationInfo, builderContext = context.createPackageContextAsUser(applicationInfo.packageName, Context.CONTEXT_RESTRICTED); Context.CONTEXT_RESTRICTED, UserHandle.getUserHandleForUid(applicationInfo.uid)); } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { Log.e(TAG, "ApplicationInfo " + applicationInfo + " not found"); Log.e(TAG, "ApplicationInfo " + applicationInfo + " not found"); builderContext = context; // try with our context builderContext = context; // try with our context Loading
core/java/android/appwidget/AppWidgetHostView.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Bundle; import android.os.CancellationSignal; import android.os.CancellationSignal; import android.os.Parcelable; import android.os.Parcelable; import android.os.UserHandle; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.Log; import android.util.Log; import android.util.Pair; import android.util.Pair; Loading Loading @@ -718,9 +719,10 @@ public class AppWidgetHostView extends FrameLayout { protected Context getRemoteContext() { protected Context getRemoteContext() { try { try { // Return if cloned successfully, otherwise default // Return if cloned successfully, otherwise default Context newContext = mContext.createApplicationContext( final ApplicationInfo info = mInfo.providerInfo.applicationInfo; mInfo.providerInfo.applicationInfo, Context newContext = mContext.createPackageContextAsUser(info.packageName, Context.CONTEXT_RESTRICTED); Context.CONTEXT_RESTRICTED, UserHandle.getUserHandleForUid(info.uid)); if (mColorResources != null) { if (mColorResources != null) { mColorResources.apply(newContext); mColorResources.apply(newContext); } } Loading
core/java/android/content/Context.java +26 −0 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.app.time.TimeManager; import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.ApplicationInfoFlags; import android.content.res.AssetManager; import android.content.res.AssetManager; import android.content.res.ColorStateList; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Configuration; Loading Loading @@ -6229,6 +6230,23 @@ public abstract class Context { return this; return this; } } /** * Similar to {@link #createPackageContextAsUser(String, int, UserHandle)}, but also allows * specifying the flags used to retrieve the {@link ApplicationInfo} of the package. * * @hide */ @NonNull public Context createPackageContextAsUser( @NonNull String packageName, @CreatePackageOptions int flags, @NonNull UserHandle user, @ApplicationInfoFlags int packageFlags) throws PackageManager.NameNotFoundException { if (Build.IS_ENG) { throw new IllegalStateException("createPackageContextAsUser not overridden!"); } return this; } /** /** * Similar to {@link #createPackageContext(String, int)}, but for the own package with a * Similar to {@link #createPackageContext(String, int)}, but for the own package with a * different {@link UserHandle}. For example, {@link #getContentResolver()} * different {@link UserHandle}. For example, {@link #getContentResolver()} Loading @@ -6248,10 +6266,18 @@ public abstract class Context { /** /** * Creates a context given an {@link android.content.pm.ApplicationInfo}. * Creates a context given an {@link android.content.pm.ApplicationInfo}. * * * @deprecated use {@link #createPackageContextAsUser(String, int, UserHandle, int)} * If an application caches an ApplicationInfo and uses it to call this method, * the app will not get the most recent version of Runtime Resource Overlays for * that application. To make things worse, the LoadedApk stored in * {@code ActivityThread#mResourcePackages} is updated using the old ApplicationInfo * causing further uses of the cached LoadedApk to return outdated information. * * @hide * @hide */ */ @SuppressWarnings("HiddenAbstractMethod") @SuppressWarnings("HiddenAbstractMethod") @UnsupportedAppUsage @UnsupportedAppUsage @Deprecated public abstract Context createApplicationContext(ApplicationInfo application, public abstract Context createApplicationContext(ApplicationInfo application, @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; Loading