Merge changes from topic "mar8" into sc-dev

* changes:
  Refinement of ContextParams behavior.
  Relax null checks to fix tests.
This commit is contained in:
Jeff Sharkey
2021-03-09 22:35:49 +00:00
committed by Android (Google) Code Review
4 changed files with 48 additions and 10 deletions

View File

@@ -10572,9 +10572,10 @@ package android.content {
public static final class ContextParams.Builder { public static final class ContextParams.Builder {
ctor public ContextParams.Builder(); ctor public ContextParams.Builder();
ctor public ContextParams.Builder(@NonNull android.content.ContextParams);
method @NonNull public android.content.ContextParams build(); method @NonNull public android.content.ContextParams build();
method @NonNull public android.content.ContextParams.Builder setAttributionTag(@NonNull String); method @NonNull public android.content.ContextParams.Builder setAttributionTag(@Nullable String);
method @NonNull public android.content.ContextParams.Builder setReceiverPackage(@NonNull String, @Nullable String); method @NonNull public android.content.ContextParams.Builder setReceiverPackage(@Nullable String, @Nullable String);
} }
public class ContextWrapper extends android.content.Context { public class ContextWrapper extends android.content.Context {

View File

@@ -2196,7 +2196,7 @@ package android.content {
} }
public static final class ContextParams.Builder { public static final class ContextParams.Builder {
method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public android.content.ContextParams.Builder setRenouncedPermissions(@NonNull java.util.Set<java.lang.String>); method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public android.content.ContextParams.Builder setRenouncedPermissions(@Nullable java.util.Set<java.lang.String>);
} }
public class ContextWrapper extends android.content.Context { public class ContextWrapper extends android.content.Context {

View File

@@ -2635,7 +2635,8 @@ class ContextImpl extends Context {
@Override @Override
public @NonNull Context createAttributionContext(@Nullable String attributionTag) { 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 @Override

View File

@@ -119,6 +119,37 @@ public final class ContextParams {
private String mReceiverAttributionTag; private String mReceiverAttributionTag;
private Set<String> mRenouncedPermissions; 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. * Sets an attribution tag against which to track permission accesses.
* *
@@ -126,8 +157,8 @@ public final class ContextParams {
* @return This builder. * @return This builder.
*/ */
@NonNull @NonNull
public Builder setAttributionTag(@NonNull String attributionTag) { public Builder setAttributionTag(@Nullable String attributionTag) {
mAttributionTag = Objects.requireNonNull(attributionTag); mAttributionTag = attributionTag;
return this; return this;
} }
@@ -140,9 +171,9 @@ public final class ContextParams {
* @return This builder. * @return This builder.
*/ */
@NonNull @NonNull
public Builder setReceiverPackage(@NonNull String packageName, public Builder setReceiverPackage(@Nullable String packageName,
@Nullable String attributionTag) { @Nullable String attributionTag) {
mReceiverPackage = Objects.requireNonNull(packageName); mReceiverPackage = packageName;
mReceiverAttributionTag = attributionTag; mReceiverAttributionTag = attributionTag;
return this; return this;
} }
@@ -169,8 +200,13 @@ public final class ContextParams {
*/ */
@SystemApi @SystemApi
@RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS)
public @NonNull Builder setRenouncedPermissions(@NonNull Set<String> renouncedPermissions) { public @NonNull Builder setRenouncedPermissions(
@Nullable Set<String> renouncedPermissions) {
if (renouncedPermissions != null) {
mRenouncedPermissions = Collections.unmodifiableSet(renouncedPermissions); mRenouncedPermissions = Collections.unmodifiableSet(renouncedPermissions);
} else {
mRenouncedPermissions = null;
}
return this; return this;
} }