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

Commit b844001d authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Add Context.createContextAsUser()

Without it, apps (mainline modules) will need to use createPackageContext...,
which is a bit painful.

Bug: 142472686
Test: atest android.content.cts.ContextTest#testCreateContextAsUser
Change-Id: Id640e03862462724df1a4a3101f0b08faafba22f
parent b71657a6
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1358,8 +1358,9 @@ package android.content {
  public abstract class Context {
    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public boolean bindServiceAsUser(@RequiresPermission android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle);
    method @NonNull public android.content.Context createContextAsUser(@NonNull android.os.UserHandle);
    method public abstract android.content.Context createCredentialProtectedStorageContext();
    method public android.content.Context createPackageContextAsUser(String, int, android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
    method @NonNull public android.content.Context createPackageContextAsUser(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
    method @Nullable public abstract java.io.File getPreloadsFileCache();
    method public abstract boolean isCredentialProtectedStorage();
    method public abstract void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
+2 −1
Original line number Diff line number Diff line
@@ -659,7 +659,8 @@ package android.content {
  }

  public abstract class Context {
    method public android.content.Context createPackageContextAsUser(String, int, android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
    method @NonNull public android.content.Context createContextAsUser(@NonNull android.os.UserHandle);
    method @NonNull public android.content.Context createPackageContextAsUser(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract android.view.Display getDisplay();
    method public abstract int getDisplayId();
    method public android.os.UserHandle getUser();
+9 −0
Original line number Diff line number Diff line
@@ -2202,6 +2202,15 @@ class ContextImpl extends Context {
                "Application package " + packageName + " not found");
    }

    @Override
    public Context createContextAsUser(UserHandle user) {
        try {
            return createPackageContextAsUser(getPackageName(), mFlags, user);
        } catch (NameNotFoundException e) {
            throw new IllegalStateException("Own package not found: package=" + getPackageName());
        }
    }

    @Override
    public Context createContextForSplit(String splitName) throws NameNotFoundException {
        if (!mPackageInfo.getApplicationInfo().requestsIsolatedSplitLoading()) {
+19 −1
Original line number Diff line number Diff line
@@ -5217,8 +5217,9 @@ public abstract class Context {
     */
    @SystemApi
    @TestApi
    @NonNull
    public Context createPackageContextAsUser(
            String packageName, @CreatePackageOptions int flags, UserHandle user)
            @NonNull String packageName, @CreatePackageOptions int flags, @NonNull UserHandle user)
            throws PackageManager.NameNotFoundException {
        if (Build.IS_ENG) {
            throw new IllegalStateException("createPackageContextAsUser not overridden!");
@@ -5226,6 +5227,23 @@ public abstract class Context {
        return this;
    }

    /**
     * Similar to {@link #createPackageContext(String, int)}, but for the own package with a
     * different {@link UserHandle}. For example, {@link #getContentResolver()}
     * will open any {@link Uri} as the given user.
     *
     * @hide
     */
    @SystemApi
    @TestApi
    @NonNull
    public Context createContextAsUser(@NonNull UserHandle user) {
        if (Build.IS_ENG) {
            throw new IllegalStateException("createContextAsUser not overridden!");
        }
        return this;
    }

    /**
     * Creates a context given an {@link android.content.pm.ApplicationInfo}.
     *
+6 −0
Original line number Diff line number Diff line
@@ -883,6 +883,12 @@ public class ContextWrapper extends Context {
        return mBase.createPackageContextAsUser(packageName, flags, user);
    }

    /** @hide */
    @Override
    public Context createContextAsUser(UserHandle user) {
        return mBase.createContextAsUser(user);
    }

    /** @hide */
    @Override
    @UnsupportedAppUsage
Loading