/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.adservices.topics; import static android.adservices.topics.TopicsManager.EMPTY_SDK; import static android.adservices.topics.TopicsManager.RECORD_OBSERVATION_DEFAULT; import android.annotation.NonNull; /** Get Topics Request. */ public final class GetTopicsRequest { /** Name of Ads SDK that is involved in this request. */ private final String mAdsSdkName; /** Whether to record that the caller has observed the topics of the host app or not. */ private final boolean mRecordObservation; private GetTopicsRequest(@NonNull Builder builder) { mAdsSdkName = builder.mAdsSdkName; mRecordObservation = builder.mRecordObservation; } /** Get the Sdk Name. */ @NonNull public String getAdsSdkName() { return mAdsSdkName; } /** Get Record Observation. */ public boolean shouldRecordObservation() { return mRecordObservation; } /** Builder for {@link GetTopicsRequest} objects. */ public static final class Builder { private String mAdsSdkName = EMPTY_SDK; private boolean mRecordObservation = RECORD_OBSERVATION_DEFAULT; /** Creates a {@link Builder} for {@link GetTopicsRequest} objects. */ public Builder() {} /** * Set Ads Sdk Name. * *

This must be called by SDKs running outside of the Sandbox. Other clients must not * call it. * * @param adsSdkName the Ads Sdk Name. */ @NonNull public Builder setAdsSdkName(@NonNull String adsSdkName) { // This is the case the SDK calling from outside of the Sandbox. // Check if the caller set the adsSdkName if (adsSdkName == null) { throw new IllegalArgumentException( "When calling Topics API outside of the Sandbox, caller should set Ads Sdk" + " Name"); } mAdsSdkName = adsSdkName; return this; } /** * Set the Record Observation. * * @param recordObservation whether to record that the caller has observed the topics of the * host app or not. This will be used to determine if the caller can receive the topic * in the next epoch. */ @NonNull public Builder setShouldRecordObservation(boolean recordObservation) { mRecordObservation = recordObservation; return this; } /** Builds a {@link GetTopicsRequest} instance. */ @NonNull public GetTopicsRequest build() { return new GetTopicsRequest(this); } } }