Merge "Add Context.createContextAsUser()"

This commit is contained in:
Treehugger Robot
2019-11-20 21:53:01 +00:00
committed by Gerrit Code Review
6 changed files with 44 additions and 3 deletions

View File

@@ -1366,8 +1366,9 @@ package android.content {
public abstract class Context { 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 @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 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 @Nullable public abstract java.io.File getPreloadsFileCache();
method public abstract boolean isCredentialProtectedStorage(); method public abstract boolean isCredentialProtectedStorage();
method public abstract void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle); method public abstract void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);

View File

@@ -640,7 +640,8 @@ package android.content {
} }
public abstract class Context { 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 android.view.Display getDisplay();
method public abstract int getDisplayId(); method public abstract int getDisplayId();
method public android.os.UserHandle getUser(); method public android.os.UserHandle getUser();

View File

@@ -2223,6 +2223,15 @@ class ContextImpl extends Context {
"Application package " + packageName + " not found"); "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 @Override
public Context createContextForSplit(String splitName) throws NameNotFoundException { public Context createContextForSplit(String splitName) throws NameNotFoundException {
if (!mPackageInfo.getApplicationInfo().requestsIsolatedSplitLoading()) { if (!mPackageInfo.getApplicationInfo().requestsIsolatedSplitLoading()) {

View File

@@ -5256,8 +5256,9 @@ public abstract class Context {
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
@NonNull
public Context createPackageContextAsUser( public Context createPackageContextAsUser(
String packageName, @CreatePackageOptions int flags, UserHandle user) @NonNull String packageName, @CreatePackageOptions int flags, @NonNull UserHandle user)
throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException {
if (Build.IS_ENG) { if (Build.IS_ENG) {
throw new IllegalStateException("createPackageContextAsUser not overridden!"); throw new IllegalStateException("createPackageContextAsUser not overridden!");
@@ -5265,6 +5266,23 @@ public abstract class Context {
return this; 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}. * Creates a context given an {@link android.content.pm.ApplicationInfo}.
* *

View File

@@ -896,6 +896,12 @@ public class ContextWrapper extends Context {
return mBase.createPackageContextAsUser(packageName, flags, user); return mBase.createPackageContextAsUser(packageName, flags, user);
} }
/** @hide */
@Override
public Context createContextAsUser(UserHandle user) {
return mBase.createContextAsUser(user);
}
/** @hide */ /** @hide */
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage

View File

@@ -763,6 +763,12 @@ public class MockContext extends Context {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
/** {@hide} */
@Override
public Context createContextAsUser(UserHandle user) {
throw new UnsupportedOperationException();
}
/** {@hide} */ /** {@hide} */
@Override @Override
public int getUserId() { public int getUserId() {