• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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 com.android.adservices.data.customaudience;
18 
19 import android.adservices.common.AdSelectionSignals;
20 import android.adservices.customaudience.PartialCustomAudience;
21 
22 import androidx.annotation.NonNull;
23 import androidx.annotation.Nullable;
24 import androidx.room.ColumnInfo;
25 import androidx.room.Entity;
26 import androidx.room.ForeignKey;
27 import androidx.room.Index;
28 
29 import com.google.auto.value.AutoValue;
30 
31 import java.time.Instant;
32 
33 @AutoValue
34 @AutoValue.CopyAnnotations
35 @Entity(
36         tableName = DBPartialCustomAudience.TABLE_NAME,
37         foreignKeys =
38                 @ForeignKey(
39                         entity = DBScheduledCustomAudienceUpdate.class,
40                         parentColumns = {"update_id"},
41                         childColumns = {"update_id"},
42                         onDelete = ForeignKey.CASCADE),
43         indices = {
44             @Index(
45                     value = {"update_id", "name"},
46                     unique = true)
47         },
48         primaryKeys = {"update_id", "name"})
49 public abstract class DBPartialCustomAudience {
50     public static final String TABLE_NAME = "partial_custom_audience";
51 
52     /** Unique id associated with a delayed update */
53     @AutoValue.CopyAnnotations
54     @ColumnInfo(name = "update_id")
55     @NonNull
getUpdateId()56     public abstract Long getUpdateId();
57 
58     /** Gets Custom Audience name */
59     @AutoValue.CopyAnnotations
60     @ColumnInfo(name = "name")
61     @NonNull
getName()62     public abstract String getName();
63 
64     /** Gets Custom Audience activation time */
65     @AutoValue.CopyAnnotations
66     @ColumnInfo(name = "activation_time")
67     @Nullable
getActivationTime()68     public abstract Instant getActivationTime();
69 
70     /** Gets Custom Audience expiration time */
71     @AutoValue.CopyAnnotations
72     @ColumnInfo(name = "expiration_time")
73     @Nullable
getExpirationTime()74     public abstract Instant getExpirationTime();
75 
76     /** Gets Custom Audience's bidding signals */
77     @AutoValue.CopyAnnotations
78     @ColumnInfo(name = "bidding_signals")
79     @Nullable
getUserBiddingSignals()80     public abstract AdSelectionSignals getUserBiddingSignals();
81 
82     /** Provides a {@link DBCustomAudience.Builder} */
83     @NonNull
builder()84     public static DBPartialCustomAudience.Builder builder() {
85         return new AutoValue_DBPartialCustomAudience.Builder()
86                 .setActivationTime(null)
87                 .setExpirationTime(null)
88                 .setUserBiddingSignals(null);
89     }
90 
91     /** Utility to convert a {@link DBPartialCustomAudience} into a {@link PartialCustomAudience} */
92     @NonNull
getPartialCustomAudience( DBPartialCustomAudience dbPartialCustomAudience)93     public static PartialCustomAudience getPartialCustomAudience(
94             DBPartialCustomAudience dbPartialCustomAudience) {
95         return new PartialCustomAudience.Builder(dbPartialCustomAudience.getName())
96                 .setActivationTime(dbPartialCustomAudience.getActivationTime())
97                 .setExpirationTime(dbPartialCustomAudience.getExpirationTime())
98                 .setUserBiddingSignals(dbPartialCustomAudience.getUserBiddingSignals())
99                 .build();
100     }
101 
102     /** Creates an instance of {@link DBPartialCustomAudience} */
103     @NonNull
create( @onNull Long updateId, @NonNull String name, @Nullable Instant activationTime, @Nullable Instant expirationTime, @Nullable AdSelectionSignals userBiddingSignals)104     public static DBPartialCustomAudience create(
105             @NonNull Long updateId,
106             @NonNull String name,
107             @Nullable Instant activationTime,
108             @Nullable Instant expirationTime,
109             @Nullable AdSelectionSignals userBiddingSignals) {
110         return builder()
111                 .setUpdateId(updateId)
112                 .setName(name)
113                 .setActivationTime(activationTime)
114                 .setExpirationTime(expirationTime)
115                 .setUserBiddingSignals(userBiddingSignals)
116                 .build();
117     }
118 
119     /**
120      * Creates an instance of {@link DBPartialCustomAudience} from a {@link PartialCustomAudience}
121      */
122     @NonNull
fromPartialCustomAudience( Long updateId, @NonNull PartialCustomAudience partialCa)123     public static DBPartialCustomAudience fromPartialCustomAudience(
124             Long updateId, @NonNull PartialCustomAudience partialCa) {
125         return DBPartialCustomAudience.builder()
126                 .setUpdateId(updateId)
127                 .setName(partialCa.getName())
128                 .setActivationTime(partialCa.getActivationTime())
129                 .setExpirationTime(partialCa.getExpirationTime())
130                 .setUserBiddingSignals(partialCa.getUserBiddingSignals())
131                 .build();
132     }
133 
134     /** Builder for convenient creation of an object of type {@link DBPartialCustomAudience} */
135     @AutoValue.Builder
136     public abstract static class Builder {
137         /** see {@link #getUpdateId()} */
138         @NonNull
setUpdateId(@onNull Long updateId)139         public abstract Builder setUpdateId(@NonNull Long updateId);
140 
141         /** see {@link #getName()} */
142         @NonNull
setName(@onNull String name)143         public abstract Builder setName(@NonNull String name);
144 
145         /** see {@link #getActivationTime()} */
146         @NonNull
setActivationTime(@ullable Instant activationTime)147         public abstract Builder setActivationTime(@Nullable Instant activationTime);
148 
149         /** see {@link #getExpirationTime()} */
150         @NonNull
setExpirationTime(@ullable Instant expirationTime)151         public abstract Builder setExpirationTime(@Nullable Instant expirationTime);
152 
153         /** see {@link #getUserBiddingSignals()} */
154         @NonNull
setUserBiddingSignals( @ullable AdSelectionSignals userBiddingSignals)155         public abstract Builder setUserBiddingSignals(
156                 @Nullable AdSelectionSignals userBiddingSignals);
157 
158         /** Builds a {@link DBCustomAudience.Builder} */
159         @NonNull
build()160         public abstract DBPartialCustomAudience build();
161     }
162 }
163