312 lines
10 KiB
Java
312 lines
10 KiB
Java
![]() |
/*
|
||
|
* Copyright (C) 2023 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.extdata;
|
||
|
|
||
|
import android.annotation.FlaggedApi;
|
||
|
import android.annotation.IntDef;
|
||
|
import android.annotation.NonNull;
|
||
|
import android.annotation.SuppressLint;
|
||
|
import android.annotation.SystemApi;
|
||
|
import android.os.Parcel;
|
||
|
import android.os.Parcelable;
|
||
|
|
||
|
import com.android.adservices.flags.Flags;
|
||
|
|
||
|
import java.lang.annotation.Retention;
|
||
|
import java.lang.annotation.RetentionPolicy;
|
||
|
|
||
|
/**
|
||
|
* Container for the data fields handled by {@link AdServicesExtDataStorageService}.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
@SystemApi
|
||
|
@FlaggedApi(Flags.FLAG_ADEXT_DATA_SERVICE_APIS_ENABLED)
|
||
|
public final class AdServicesExtDataParams implements Parcelable {
|
||
|
/**
|
||
|
* Custom tri-state boolean type to represent true, false, and unknown
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
@Retention(RetentionPolicy.SOURCE)
|
||
|
@IntDef(
|
||
|
prefix = "BOOLEAN_",
|
||
|
value = {BOOLEAN_TRUE, BOOLEAN_FALSE, BOOLEAN_UNKNOWN})
|
||
|
public @interface TriStateBoolean {}
|
||
|
|
||
|
/**
|
||
|
* Int value to represent true.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
public static final int BOOLEAN_TRUE = 1;
|
||
|
|
||
|
/**
|
||
|
* Int value to represent false.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
public static final int BOOLEAN_FALSE = 0;
|
||
|
|
||
|
/**
|
||
|
* Int value to represent unknown.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
public static final int BOOLEAN_UNKNOWN = -1;
|
||
|
|
||
|
/**
|
||
|
* Type to represent user manual interaction state.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
@IntDef(
|
||
|
prefix = "STATE_",
|
||
|
value = {
|
||
|
STATE_NO_MANUAL_INTERACTIONS_RECORDED,
|
||
|
STATE_UNKNOWN,
|
||
|
STATE_MANUAL_INTERACTIONS_RECORDED
|
||
|
})
|
||
|
@Retention(RetentionPolicy.SOURCE)
|
||
|
public @interface UserManualInteraction {}
|
||
|
|
||
|
/**
|
||
|
* Int value to represent no manual interaction recorded state.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
public static final int STATE_NO_MANUAL_INTERACTIONS_RECORDED = -1;
|
||
|
|
||
|
/**
|
||
|
* Int value to represent unknown manual interaction state.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
public static final int STATE_UNKNOWN = 0;
|
||
|
|
||
|
/**
|
||
|
* Int value to represent manual interaction reported state.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
public static final int STATE_MANUAL_INTERACTIONS_RECORDED = 1;
|
||
|
|
||
|
@TriStateBoolean private final int mIsNotificationDisplayed;
|
||
|
@TriStateBoolean private final int mIsMeasurementConsented;
|
||
|
@TriStateBoolean private final int mIsU18Account;
|
||
|
@TriStateBoolean private final int mIsAdultAccount;
|
||
|
@UserManualInteraction private final int mManualInteractionWithConsentStatus;
|
||
|
private final long mMeasurementRollbackApexVersion;
|
||
|
|
||
|
/**
|
||
|
* Init AdServicesExtDataParams.
|
||
|
*
|
||
|
* @param isNotificationDisplayed 1 if notification is displayed, 0 if notification not
|
||
|
* displayed, -1 to represent no data.
|
||
|
* @param isMeasurementConsented 1 if measurement consented, 0 if not, -1 to represent no data.
|
||
|
* @param isU18Account 1 if account is U18, 0 if not, -1 if no data.
|
||
|
* @param isAdultAccount 1 if adult account, 0 if not, -1 if no data.
|
||
|
* @param manualInteractionWithConsentStatus 1 if user interacted, -1 if not, 0 if unknown.
|
||
|
* @param measurementRollbackApexVersion ExtServices apex version for measurement rollback
|
||
|
* handling. -1 if no data.
|
||
|
*/
|
||
|
public AdServicesExtDataParams(
|
||
|
@TriStateBoolean int isNotificationDisplayed,
|
||
|
@TriStateBoolean int isMeasurementConsented,
|
||
|
@TriStateBoolean int isU18Account,
|
||
|
@TriStateBoolean int isAdultAccount,
|
||
|
@UserManualInteraction int manualInteractionWithConsentStatus,
|
||
|
long measurementRollbackApexVersion) {
|
||
|
mIsNotificationDisplayed = isNotificationDisplayed;
|
||
|
mIsMeasurementConsented = isMeasurementConsented;
|
||
|
mIsU18Account = isU18Account;
|
||
|
mIsAdultAccount = isAdultAccount;
|
||
|
mManualInteractionWithConsentStatus = manualInteractionWithConsentStatus;
|
||
|
mMeasurementRollbackApexVersion = measurementRollbackApexVersion;
|
||
|
}
|
||
|
|
||
|
private AdServicesExtDataParams(@NonNull Parcel in) {
|
||
|
mIsNotificationDisplayed = in.readInt();
|
||
|
mIsMeasurementConsented = in.readInt();
|
||
|
mIsU18Account = in.readInt();
|
||
|
mIsAdultAccount = in.readInt();
|
||
|
mManualInteractionWithConsentStatus = in.readInt();
|
||
|
mMeasurementRollbackApexVersion = in.readLong();
|
||
|
}
|
||
|
|
||
|
/** Creator for Parcelable. */
|
||
|
@NonNull
|
||
|
public static final Creator<AdServicesExtDataParams> CREATOR =
|
||
|
new Creator<AdServicesExtDataParams>() {
|
||
|
@Override
|
||
|
public AdServicesExtDataParams createFromParcel(Parcel in) {
|
||
|
return new AdServicesExtDataParams(in);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public AdServicesExtDataParams[] newArray(int size) {
|
||
|
return new AdServicesExtDataParams[size];
|
||
|
}
|
||
|
};
|
||
|
|
||
|
@Override
|
||
|
public int describeContents() {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void writeToParcel(@NonNull Parcel out, int flags) {
|
||
|
out.writeInt(mIsNotificationDisplayed);
|
||
|
out.writeInt(mIsMeasurementConsented);
|
||
|
out.writeInt(mIsU18Account);
|
||
|
out.writeInt(mIsAdultAccount);
|
||
|
out.writeInt(mManualInteractionWithConsentStatus);
|
||
|
out.writeLong(mMeasurementRollbackApexVersion);
|
||
|
}
|
||
|
|
||
|
/** Returns 1 if notification was shown on R, 0 if not shown, -1 if unknown. */
|
||
|
@TriStateBoolean
|
||
|
public int getIsNotificationDisplayed() {
|
||
|
return mIsNotificationDisplayed;
|
||
|
}
|
||
|
|
||
|
/** Returns 1 if measurement was consented, 0 if not, -1 if unknown. */
|
||
|
@TriStateBoolean
|
||
|
public int getIsMeasurementConsented() {
|
||
|
return mIsMeasurementConsented;
|
||
|
}
|
||
|
|
||
|
/** Returns 1 if account is U18 account, 0 if not, -1 if unknown. */
|
||
|
@TriStateBoolean
|
||
|
public int getIsU18Account() {
|
||
|
return mIsU18Account;
|
||
|
}
|
||
|
|
||
|
/** Returns 1 if account is adult account, 0 if not, -1 if unknown. */
|
||
|
@TriStateBoolean
|
||
|
public int getIsAdultAccount() {
|
||
|
return mIsAdultAccount;
|
||
|
}
|
||
|
|
||
|
/** Returns 1 if user interacted, -1 if not, 0 if unknown. */
|
||
|
@UserManualInteraction
|
||
|
public int getManualInteractionWithConsentStatus() {
|
||
|
return mManualInteractionWithConsentStatus;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns ExtServices apex version for handling measurement rollback. -1 is returned if no data
|
||
|
* is available.
|
||
|
*/
|
||
|
public long getMeasurementRollbackApexVersion() {
|
||
|
return mMeasurementRollbackApexVersion;
|
||
|
}
|
||
|
|
||
|
@SuppressLint("DefaultLocale")
|
||
|
@Override
|
||
|
public String toString() {
|
||
|
return String.format(
|
||
|
"AdServicesExtDataParams{"
|
||
|
+ "mIsNotificationDisplayed=%d, "
|
||
|
+ "mIsMsmtConsented=%d, "
|
||
|
+ "mIsU18Account=%d, "
|
||
|
+ "mIsAdultAccount=%d, "
|
||
|
+ "mManualInteractionWithConsentStatus=%d, "
|
||
|
+ "mMsmtRollbackApexVersion=%d}",
|
||
|
mIsNotificationDisplayed,
|
||
|
mIsMeasurementConsented,
|
||
|
mIsU18Account,
|
||
|
mIsAdultAccount,
|
||
|
mManualInteractionWithConsentStatus,
|
||
|
mMeasurementRollbackApexVersion);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Builder for {@link AdServicesExtDataParams} objects.
|
||
|
*
|
||
|
* @hide
|
||
|
*/
|
||
|
public static final class Builder {
|
||
|
@TriStateBoolean private int mNotificationDisplayed;
|
||
|
@TriStateBoolean private int mMsmtConsent;
|
||
|
@TriStateBoolean private int mIsU18Account;
|
||
|
@TriStateBoolean private int mIsAdultAccount;
|
||
|
@UserManualInteraction private int mManualInteractionWithConsentStatus;
|
||
|
private long mMsmtRollbackApexVersion;
|
||
|
|
||
|
/** Set the isNotificationDisplayed. */
|
||
|
@NonNull
|
||
|
public AdServicesExtDataParams.Builder setNotificationDisplayed(
|
||
|
@TriStateBoolean int notificationDisplayed) {
|
||
|
mNotificationDisplayed = notificationDisplayed;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
/** Set the isMeasurementConsented. */
|
||
|
@NonNull
|
||
|
public AdServicesExtDataParams.Builder setMsmtConsent(@TriStateBoolean int msmtConsent) {
|
||
|
mMsmtConsent = msmtConsent;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
/** Set the isU18Account. */
|
||
|
@NonNull
|
||
|
public AdServicesExtDataParams.Builder setIsU18Account(@TriStateBoolean int isU18Account) {
|
||
|
mIsU18Account = isU18Account;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
/** Set the isAdultAccount. */
|
||
|
@NonNull
|
||
|
public AdServicesExtDataParams.Builder setIsAdultAccount(
|
||
|
@TriStateBoolean int isAdultAccount) {
|
||
|
mIsAdultAccount = isAdultAccount;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
/** Set the manualInteractionWithConsentStatus. */
|
||
|
@NonNull
|
||
|
public AdServicesExtDataParams.Builder setManualInteractionWithConsentStatus(
|
||
|
@UserManualInteraction int manualInteractionWithConsentStatus) {
|
||
|
mManualInteractionWithConsentStatus = manualInteractionWithConsentStatus;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
/** Set the msmtRollbackApexVersion. */
|
||
|
@NonNull
|
||
|
public AdServicesExtDataParams.Builder setMsmtRollbackApexVersion(
|
||
|
long msmtRollbackApexVersion) {
|
||
|
mMsmtRollbackApexVersion = msmtRollbackApexVersion;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Builder() {}
|
||
|
|
||
|
/** Builds a {@link AdServicesExtDataParams} instance. */
|
||
|
@NonNull
|
||
|
public AdServicesExtDataParams build() {
|
||
|
return new AdServicesExtDataParams(
|
||
|
mNotificationDisplayed,
|
||
|
mMsmtConsent,
|
||
|
mIsU18Account,
|
||
|
mIsAdultAccount,
|
||
|
mManualInteractionWithConsentStatus,
|
||
|
mMsmtRollbackApexVersion);
|
||
|
}
|
||
|
}
|
||
|
}
|