Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 08e7de9d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Deprecate Context#createApplicationContext" into sc-dev am: ee438f96

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14528644

Change-Id: Idb9578a41fe9b53f2dcce14b80ebe5a61471e52a
parents a02f71dd ee438f96
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility.PACK

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.assist.AssistContent;
import android.app.assist.AssistStructure;
import android.app.backup.BackupAgent;
@@ -61,6 +62,7 @@ import android.content.ContentCaptureOptions;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Context.CreatePackageOptions;
import android.content.IContentProvider;
import android.content.IIntentReceiver;
import android.content.Intent;
@@ -72,6 +74,7 @@ import android.content.pm.InstrumentationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageManager.ApplicationInfoFlags;
import android.content.pm.ParceledListSlice;
import android.content.pm.PermissionInfo;
import android.content.pm.ProviderInfo;
@@ -2367,16 +2370,22 @@ public final class ActivityThread extends ClientTransactionHandler

    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
    public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo,
            int flags) {
            @CreatePackageOptions int flags) {
        return getPackageInfo(packageName, compatInfo, flags, UserHandle.myUserId());
    }

    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);
        ApplicationInfo ai = PackageManager.getApplicationInfoAsUserCached(
                packageName,
                PackageManager.GET_SHARED_LIBRARY_FILES
                packageFlags | PackageManager.GET_SHARED_LIBRARY_FILES
                | PackageManager.MATCH_DEBUG_TRIAGED_MISSING,
                (userId < 0) ? UserHandle.myUserId() : userId);
        synchronized (mResourcesManager) {
@@ -2419,7 +2428,7 @@ public final class ActivityThread extends ClientTransactionHandler

    @UnsupportedAppUsage(trackingBug = 171933273)
    public final LoadedApk getPackageInfo(ApplicationInfo ai, CompatibilityInfo compatInfo,
            int flags) {
            @CreatePackageOptions int flags) {
        boolean includeCode = (flags&Context.CONTEXT_INCLUDE_CODE) != 0;
        boolean securityViolation = includeCode && ai.uid != 0
                && ai.uid != Process.SYSTEM_UID && (mBoundApplication != null
+10 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UiContext;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.AttributionSource;
import android.content.AutofillOptions;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -47,6 +48,7 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.ApplicationInfoFlags;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.AssetManager;
import android.content.res.CompatResources;
@@ -60,7 +62,6 @@ import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.content.AttributionSource;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
@@ -2493,6 +2494,13 @@ class ContextImpl extends Context {
    @Override
    public Context createPackageContextAsUser(String packageName, int flags, UserHandle user)
            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")) {
            // The system resources are loaded in every application, so we can safely copy
            // the context without reloading Resources.
@@ -2503,7 +2511,7 @@ class ContextImpl extends Context {
        }

        LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(),
                flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier());
                flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier(), packageFlags);
        if (pi != null) {
            ContextImpl c = new ContextImpl(this, mMainThread, pi, mParams,
                    mAttributionSource.getAttributionTag(),
+4 −3
Original line number Diff line number Diff line
@@ -6478,10 +6478,11 @@ public class Notification implements Parcelable
            ApplicationInfo applicationInfo = n.extras.getParcelable(
                    EXTRA_BUILDER_APPLICATION_INFO);
            Context builderContext;
            if (applicationInfo != null) {
            if (applicationInfo != null && applicationInfo.packageName != null) {
                try {
                    builderContext = context.createApplicationContext(applicationInfo,
                            Context.CONTEXT_RESTRICTED);
                    builderContext = context.createPackageContextAsUser(applicationInfo.packageName,
                            Context.CONTEXT_RESTRICTED,
                            UserHandle.getUserHandleForUid(applicationInfo.uid));
                } catch (NameNotFoundException e) {
                    Log.e(TAG, "ApplicationInfo " + applicationInfo + " not found");
                    builderContext = context;  // try with our context
+5 −3
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Parcelable;
import android.os.UserHandle;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
@@ -718,9 +719,10 @@ public class AppWidgetHostView extends FrameLayout {
    protected Context getRemoteContext() {
        try {
            // Return if cloned successfully, otherwise default
            Context newContext = mContext.createApplicationContext(
                    mInfo.providerInfo.applicationInfo,
                    Context.CONTEXT_RESTRICTED);
            final ApplicationInfo info = mInfo.providerInfo.applicationInfo;
            Context newContext = mContext.createPackageContextAsUser(info.packageName,
                    Context.CONTEXT_RESTRICTED,
                    UserHandle.getUserHandleForUid(info.uid));
            if (mColorResources != null) {
                mColorResources.apply(newContext);
            }
+26 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.app.time.TimeManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.ApplicationInfoFlags;
import android.content.res.AssetManager;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
@@ -6229,6 +6230,23 @@ public abstract class Context {
        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
     * different {@link UserHandle}. For example, {@link #getContentResolver()}
@@ -6248,10 +6266,18 @@ public abstract class Context {
    /**
     * 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
     */
    @SuppressWarnings("HiddenAbstractMethod")
    @UnsupportedAppUsage
    @Deprecated
    public abstract Context createApplicationContext(ApplicationInfo application,
            @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException;

Loading