diff options
| author | 2019-11-20 14:04:20 -0800 | |
|---|---|---|
| committer | 2019-11-20 14:04:20 -0800 | |
| commit | 056b8f00b70f4c231760c68f3def16c00e32b98f (patch) | |
| tree | a0fe8569520dec8f5d0b06c52a498dfe41dc8c44 | |
| parent | fa968e969158ecde077b4e7deee8de9ad849f611 (diff) | |
| parent | 63d5e4a0b978ff6bd32b5f388a52bd8146de31a9 (diff) | |
Merge "Add Context.createContextAsUser()"
am: 63d5e4a0b9
Change-Id: I022daba2bc9234ffe7b7fa760942a58852e406b3
| -rw-r--r-- | api/system-current.txt | 3 | ||||
| -rw-r--r-- | api/test-current.txt | 3 | ||||
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 9 | ||||
| -rw-r--r-- | core/java/android/content/Context.java | 20 | ||||
| -rw-r--r-- | core/java/android/content/ContextWrapper.java | 6 | ||||
| -rw-r--r-- | test-mock/src/android/test/mock/MockContext.java | 6 |
6 files changed, 44 insertions, 3 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index b92462d1ca60..7ea1a7ba2781 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -1366,8 +1366,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); diff --git a/api/test-current.txt b/api/test-current.txt index d88e27c949da..aca8ac0312cf 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -640,7 +640,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(); diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 9902f6aa0fe3..c2e413c9f39a 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -2224,6 +2224,15 @@ class ContextImpl extends Context { } @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()) { // All Splits are always loaded. diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index aca8f5d8a4e2..bd678bb00de5 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -5264,8 +5264,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!"); @@ -5274,6 +5275,23 @@ public abstract class Context { } /** + * 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}. * * @hide diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index 2b1b8eb183ab..f7a0eb84c925 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -898,6 +898,12 @@ public class ContextWrapper extends Context { /** @hide */ @Override + public Context createContextAsUser(UserHandle user) { + return mBase.createContextAsUser(user); + } + + /** @hide */ + @Override @UnsupportedAppUsage public Context createApplicationContext(ApplicationInfo application, int flags) throws PackageManager.NameNotFoundException { diff --git a/test-mock/src/android/test/mock/MockContext.java b/test-mock/src/android/test/mock/MockContext.java index 727684eca7ea..c7e536e8bafe 100644 --- a/test-mock/src/android/test/mock/MockContext.java +++ b/test-mock/src/android/test/mock/MockContext.java @@ -765,6 +765,12 @@ public class MockContext extends Context { /** {@hide} */ @Override + public Context createContextAsUser(UserHandle user) { + throw new UnsupportedOperationException(); + } + + /** {@hide} */ + @Override public int getUserId() { throw new UnsupportedOperationException(); } |