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.service.kanon;
18 
19 import static com.android.adservices.service.common.httpclient.AdServicesHttpsClient.DEFAULT_MAX_BYTES;
20 
21 import android.annotation.NonNull;
22 import android.annotation.RequiresApi;
23 import android.content.Context;
24 import android.os.Build;
25 
26 import com.android.adservices.concurrency.AdServicesExecutors;
27 import com.android.adservices.data.kanon.KAnonDatabase;
28 import com.android.adservices.service.FlagsFactory;
29 import com.android.adservices.service.adselection.encryption.ObliviousHttpEncryptorFactory;
30 import com.android.adservices.service.common.UserProfileIdManager;
31 import com.android.adservices.service.common.bhttp.BinaryHttpMessageDeserializer;
32 import com.android.adservices.service.common.httpclient.AdServicesHttpsClient;
33 import com.android.adservices.service.stats.AdServicesLoggerImpl;
34 
35 
36 import java.time.Clock;
37 
38 /** A factory class used to create an instance of {@link KAnonSignJoinManager}. */
39 @RequiresApi(Build.VERSION_CODES.S)
40 public class KAnonSignJoinFactory {
41     private final Context mContext;
42 
43     /**
44      * Returns an instance for this class. Once you have the instance you can use {@link
45      * KAnonSignJoinFactory#getKAnonSignJoinManager()} to create an instance of {@link
46      * KAnonSignJoinManager}
47      */
KAnonSignJoinFactory(@onNull Context context)48     public KAnonSignJoinFactory(@NonNull Context context) {
49         mContext = context;
50     }
51 
52     /** Returns an instance of {@link KAnonSignJoinManager}. */
getKAnonSignJoinManager()53     public KAnonSignJoinManager getKAnonSignJoinManager() {
54         AdServicesHttpsClient adServicesHttpsClient =
55                 new AdServicesHttpsClient(
56                         AdServicesExecutors.getBlockingExecutor(),
57                         FlagsFactory.getFlags().getFledgeKanonHttpClientTimeoutInMs(),
58                         FlagsFactory.getFlags().getFledgeKanonHttpClientTimeoutInMs(),
59                         DEFAULT_MAX_BYTES);
60         KAnonMessageManager kAnonMessageManager =
61                 new KAnonMessageManager(
62                         KAnonDatabase.getInstance(mContext).kAnonMessageDao(),
63                         FlagsFactory.getFlags(),
64                         Clock.systemUTC());
65         KeyAttestationFactory keyAttestationFactory = new KeyAttestationFactory(mContext);
66         KAnonCallerImpl kAnonCaller =
67                 new KAnonCallerImpl(
68                         AdServicesExecutors.getLightWeightExecutor(),
69                         AdServicesExecutors.getBackgroundExecutor(),
70                         new AnonymousCountingTokensImpl(),
71                         adServicesHttpsClient,
72                         KAnonDatabase.getInstance(mContext).clientParametersDao(),
73                         KAnonDatabase.getInstance(mContext).serverParametersDao(),
74                         UserProfileIdManager.getInstance(mContext),
75                         new BinaryHttpMessageDeserializer(),
76                         FlagsFactory.getFlags(),
77                         kAnonMessageManager,
78                         AdServicesLoggerImpl.getInstance(),
79                         keyAttestationFactory,
80                         new ObliviousHttpEncryptorFactory(mContext));
81         return new KAnonSignJoinManager(
82                 mContext,
83                 kAnonCaller,
84                 kAnonMessageManager,
85                 FlagsFactory.getFlags(),
86                 Clock.systemUTC(),
87                 AdServicesLoggerImpl.getInstance());
88     }
89 }
90