summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@google.com>2021-03-09 22:35:49 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-03-09 22:35:49 +0000
commitc8faccf35aac2b4ae2779af4ac832a9710fee395 (patch)
tree6fc6b0be16288798a329151b126492df26411473 /core/java/android
parentb41c7af72c7249fe464bf02187de93f212878876 (diff)
parent29e882b41742a365176c2cdd2cbb9617f756e477 (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.java3
-rw-r--r--core/java/android/content/ContextParams.java48
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;
}