1 /*
2  * Copyright 2023 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 androidx.privacysandbox.sdkruntime.core.controller.impl
18 
19 import android.os.Bundle
20 import android.os.IBinder
21 import androidx.privacysandbox.sdkruntime.core.AppOwnedSdkSandboxInterfaceCompat
22 import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
23 import androidx.privacysandbox.sdkruntime.core.SdkSandboxClientImportanceListenerCompat
24 import androidx.privacysandbox.sdkruntime.core.activity.SdkSandboxActivityHandlerCompat
25 import androidx.privacysandbox.sdkruntime.core.controller.LoadSdkCallback
26 import androidx.privacysandbox.sdkruntime.core.controller.SdkSandboxControllerCompat
27 import androidx.privacysandbox.sdkruntime.core.internal.ClientFeature
28 import java.util.concurrent.Executor
29 
30 /**
31  * Wrapper for client provided implementation of [SdkSandboxControllerCompat]. Checks client version
32  * to determine if method supported.
33  */
34 internal class LocalImpl(
35     private val implFromClient: SdkSandboxControllerCompat.SandboxControllerImpl,
36     private val clientVersion: Int
37 ) : SdkSandboxControllerCompat.SandboxControllerImpl {
38 
loadSdknull39     override fun loadSdk(
40         sdkName: String,
41         params: Bundle,
42         executor: Executor,
43         callback: LoadSdkCallback
44     ) {
45         implFromClient.loadSdk(sdkName, params, executor, callback)
46     }
47 
getSandboxedSdksnull48     override fun getSandboxedSdks(): List<SandboxedSdkCompat> {
49         return implFromClient.getSandboxedSdks()
50     }
51 
getAppOwnedSdkSandboxInterfacesnull52     override fun getAppOwnedSdkSandboxInterfaces(): List<AppOwnedSdkSandboxInterfaceCompat> {
53         return implFromClient.getAppOwnedSdkSandboxInterfaces()
54     }
55 
registerSdkSandboxActivityHandlernull56     override fun registerSdkSandboxActivityHandler(
57         handlerCompat: SdkSandboxActivityHandlerCompat
58     ): IBinder {
59         return implFromClient.registerSdkSandboxActivityHandler(handlerCompat)
60     }
61 
unregisterSdkSandboxActivityHandlernull62     override fun unregisterSdkSandboxActivityHandler(
63         handlerCompat: SdkSandboxActivityHandlerCompat
64     ) {
65         implFromClient.unregisterSdkSandboxActivityHandler(handlerCompat)
66     }
67 
getClientPackageNamenull68     override fun getClientPackageName(): String {
69         return implFromClient.getClientPackageName()
70     }
71 
registerSdkSandboxClientImportanceListenernull72     override fun registerSdkSandboxClientImportanceListener(
73         executor: Executor,
74         listenerCompat: SdkSandboxClientImportanceListenerCompat
75     ) {
76         if (ClientFeature.CLIENT_IMPORTANCE_LISTENER.isAvailable(clientVersion)) {
77             implFromClient.registerSdkSandboxClientImportanceListener(executor, listenerCompat)
78         }
79     }
80 
unregisterSdkSandboxClientImportanceListenernull81     override fun unregisterSdkSandboxClientImportanceListener(
82         listenerCompat: SdkSandboxClientImportanceListenerCompat
83     ) {
84         if (ClientFeature.CLIENT_IMPORTANCE_LISTENER.isAvailable(clientVersion)) {
85             implFromClient.unregisterSdkSandboxClientImportanceListener(listenerCompat)
86         }
87     }
88 }
89