diff options
| author | Jeff Sharkey <jsharkey@google.com> | 2021-03-09 22:35:49 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-03-09 22:35:49 +0000 |
| commit | c8faccf35aac2b4ae2779af4ac832a9710fee395 (patch) | |
| tree | 6fc6b0be16288798a329151b126492df26411473 /core/java/android | |
| parent | b41c7af72c7249fe464bf02187de93f212878876 (diff) | |
| parent | 29e882b41742a365176c2cdd2cbb9617f756e477 (diff) | |
Merge changes from topic "mar8" into sc-dev
* changes:
Refinement of ContextParams behavior.
Relax null checks to fix tests.
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 3 | ||||
| -rw-r--r-- | core/java/android/content/ContextParams.java | 48 |
2 files changed, 44 insertions, 7 deletions
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index d040938803f6..996c66b3437b 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -2635,7 +2635,8 @@ class ContextImpl extends Context { @Override public @NonNull Context createAttributionContext(@Nullable String attributionTag) { - return createContext(new ContextParams.Builder().setAttributionTag(attributionTag).build()); + return createContext( + new ContextParams.Builder(mParams).setAttributionTag(attributionTag).build()); } @Override diff --git a/core/java/android/content/ContextParams.java b/core/java/android/content/ContextParams.java index 17ec2a847d4f..fad905bfac13 100644 --- a/core/java/android/content/ContextParams.java +++ b/core/java/android/content/ContextParams.java @@ -120,14 +120,45 @@ public final class ContextParams { private Set<String> mRenouncedPermissions; /** + * Create a new builder. + * <p> + * This is valuable when you are interested in having explicit control + * over every sub-parameter, and don't want to inherit any values from + * an existing Context. + * <p> + * Developers should strongly consider using + * {@link #Builder(ContextParams)} instead of this constructor, since + * that will will automatically inherit any new sub-parameters added in + * future platform releases. + */ + public Builder() { + } + + /** + * Create a new builder that inherits all sub-parameters by default. + * <p> + * This is valuable when you are only interested in overriding specific + * sub-parameters, and want to preserve all other parameters. Setting a + * specific sub-parameter on the returned builder will override any + * inherited value. + */ + public Builder(@NonNull ContextParams params) { + Objects.requireNonNull(params); + mAttributionTag = params.mAttributionTag; + mReceiverPackage = params.mReceiverPackage; + mReceiverAttributionTag = params.mReceiverAttributionTag; + mRenouncedPermissions = params.mRenouncedPermissions; + } + + /** * Sets an attribution tag against which to track permission accesses. * * @param attributionTag The attribution tag. * @return This builder. */ @NonNull - public Builder setAttributionTag(@NonNull String attributionTag) { - mAttributionTag = Objects.requireNonNull(attributionTag); + public Builder setAttributionTag(@Nullable String attributionTag) { + mAttributionTag = attributionTag; return this; } @@ -140,9 +171,9 @@ public final class ContextParams { * @return This builder. */ @NonNull - public Builder setReceiverPackage(@NonNull String packageName, + public Builder setReceiverPackage(@Nullable String packageName, @Nullable String attributionTag) { - mReceiverPackage = Objects.requireNonNull(packageName); + mReceiverPackage = packageName; mReceiverAttributionTag = attributionTag; return this; } @@ -169,8 +200,13 @@ public final class ContextParams { */ @SystemApi @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) - public @NonNull Builder setRenouncedPermissions(@NonNull Set<String> renouncedPermissions) { - mRenouncedPermissions = Collections.unmodifiableSet(renouncedPermissions); + public @NonNull Builder setRenouncedPermissions( + @Nullable Set<String> renouncedPermissions) { + if (renouncedPermissions != null) { + mRenouncedPermissions = Collections.unmodifiableSet(renouncedPermissions); + } else { + mRenouncedPermissions = null; + } return this; } |
