1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.adservices.measurement; 18 19 import android.annotation.NonNull; 20 import android.os.Parcel; 21 import android.os.Parcelable; 22 23 import java.util.Objects; 24 25 /** 26 * Internal source registration request object to communicate from {@link MeasurementManager} to 27 * {@link IMeasurementService}. 28 * 29 * @hide 30 */ 31 public class WebSourceRegistrationRequestInternal implements Parcelable { 32 /** Creator for Parcelable (via reflection). */ 33 public static final Parcelable.Creator<WebSourceRegistrationRequestInternal> CREATOR = 34 new Parcelable.Creator<WebSourceRegistrationRequestInternal>() { 35 @Override 36 public WebSourceRegistrationRequestInternal createFromParcel(Parcel in) { 37 return new WebSourceRegistrationRequestInternal(in); 38 } 39 40 @Override 41 public WebSourceRegistrationRequestInternal[] newArray(int size) { 42 return new WebSourceRegistrationRequestInternal[size]; 43 } 44 }; 45 /** Holds input to measurement source registration calls from web context. */ 46 @NonNull private final WebSourceRegistrationRequest mSourceRegistrationRequest; 47 /** Holds app package info of where the request is coming from. */ 48 @NonNull private final String mAppPackageName; 49 /** Holds sdk package info of where the request is coming from. */ 50 @NonNull private final String mSdkPackageName; 51 /** Time the request was created, as millis since boot excluding time in deep sleep. */ 52 private final long mRequestTime; 53 /** AD ID Permission Granted. */ 54 private final boolean mIsAdIdPermissionGranted; 55 WebSourceRegistrationRequestInternal(@onNull Builder builder)56 private WebSourceRegistrationRequestInternal(@NonNull Builder builder) { 57 mSourceRegistrationRequest = builder.mSourceRegistrationRequest; 58 mAppPackageName = builder.mAppPackageName; 59 mSdkPackageName = builder.mSdkPackageName; 60 mRequestTime = builder.mRequestTime; 61 mIsAdIdPermissionGranted = builder.mIsAdIdPermissionGranted; 62 } 63 WebSourceRegistrationRequestInternal(Parcel in)64 private WebSourceRegistrationRequestInternal(Parcel in) { 65 Objects.requireNonNull(in); 66 mSourceRegistrationRequest = WebSourceRegistrationRequest.CREATOR.createFromParcel(in); 67 mAppPackageName = in.readString(); 68 mSdkPackageName = in.readString(); 69 mRequestTime = in.readLong(); 70 mIsAdIdPermissionGranted = in.readBoolean(); 71 } 72 73 /** Getter for {@link #mSourceRegistrationRequest}. */ getSourceRegistrationRequest()74 public WebSourceRegistrationRequest getSourceRegistrationRequest() { 75 return mSourceRegistrationRequest; 76 } 77 78 /** Getter for {@link #mAppPackageName}. */ getAppPackageName()79 public String getAppPackageName() { 80 return mAppPackageName; 81 } 82 83 /** Getter for {@link #mSdkPackageName}. */ getSdkPackageName()84 public String getSdkPackageName() { 85 return mSdkPackageName; 86 } 87 88 /** Getter for {@link #mRequestTime}. */ getRequestTime()89 public long getRequestTime() { 90 return mRequestTime; 91 } 92 93 /** Getter for {@link #mIsAdIdPermissionGranted}. */ isAdIdPermissionGranted()94 public boolean isAdIdPermissionGranted() { 95 return mIsAdIdPermissionGranted; 96 } 97 98 @Override equals(Object o)99 public boolean equals(Object o) { 100 if (this == o) return true; 101 if (!(o instanceof WebSourceRegistrationRequestInternal)) return false; 102 WebSourceRegistrationRequestInternal that = (WebSourceRegistrationRequestInternal) o; 103 return Objects.equals(mSourceRegistrationRequest, that.mSourceRegistrationRequest) 104 && Objects.equals(mAppPackageName, that.mAppPackageName) 105 && Objects.equals(mSdkPackageName, that.mSdkPackageName) 106 && mRequestTime == that.mRequestTime 107 && mIsAdIdPermissionGranted == that.mIsAdIdPermissionGranted; 108 } 109 110 @Override hashCode()111 public int hashCode() { 112 return Objects.hash( 113 mSourceRegistrationRequest, 114 mAppPackageName, 115 mSdkPackageName, 116 mIsAdIdPermissionGranted); 117 } 118 119 @Override describeContents()120 public int describeContents() { 121 return 0; 122 } 123 124 @Override writeToParcel(@onNull Parcel out, int flags)125 public void writeToParcel(@NonNull Parcel out, int flags) { 126 Objects.requireNonNull(out); 127 mSourceRegistrationRequest.writeToParcel(out, flags); 128 out.writeString(mAppPackageName); 129 out.writeString(mSdkPackageName); 130 out.writeLong(mRequestTime); 131 out.writeBoolean(mIsAdIdPermissionGranted); 132 } 133 134 /** Builder for {@link WebSourceRegistrationRequestInternal}. */ 135 public static final class Builder { 136 /** External source registration request from client app SDK. */ 137 @NonNull private final WebSourceRegistrationRequest mSourceRegistrationRequest; 138 /** Package name of the app used for the registration. Used to determine the registrant. */ 139 @NonNull private final String mAppPackageName; 140 /** Package name of the sdk used for the registration. */ 141 @NonNull private final String mSdkPackageName; 142 /** Time the request was created, as millis since boot excluding time in deep sleep. */ 143 private final long mRequestTime; 144 /** AD ID Permission Granted. */ 145 private boolean mIsAdIdPermissionGranted; 146 /** 147 * Builder constructor for {@link WebSourceRegistrationRequestInternal}. 148 * 149 * @param sourceRegistrationRequest external source registration request 150 * @param appPackageName app package name that is calling PP API 151 * @param sdkPackageName sdk package name that is calling PP API 152 */ Builder( @onNull WebSourceRegistrationRequest sourceRegistrationRequest, @NonNull String appPackageName, @NonNull String sdkPackageName, long requestTime)153 public Builder( 154 @NonNull WebSourceRegistrationRequest sourceRegistrationRequest, 155 @NonNull String appPackageName, 156 @NonNull String sdkPackageName, 157 long requestTime) { 158 Objects.requireNonNull(sourceRegistrationRequest); 159 Objects.requireNonNull(appPackageName); 160 Objects.requireNonNull(sdkPackageName); 161 mSourceRegistrationRequest = sourceRegistrationRequest; 162 mAppPackageName = appPackageName; 163 mSdkPackageName = sdkPackageName; 164 mRequestTime = requestTime; 165 } 166 167 /** Pre-validates parameters and builds {@link WebSourceRegistrationRequestInternal}. */ 168 @NonNull build()169 public WebSourceRegistrationRequestInternal build() { 170 return new WebSourceRegistrationRequestInternal(this); 171 } 172 173 /** See {@link WebSourceRegistrationRequestInternal#isAdIdPermissionGranted()}. */ setAdIdPermissionGranted( boolean isAdIdPermissionGranted)174 public WebSourceRegistrationRequestInternal.Builder setAdIdPermissionGranted( 175 boolean isAdIdPermissionGranted) { 176 mIsAdIdPermissionGranted = isAdIdPermissionGranted; 177 return this; 178 } 179 } 180 } 181