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.core.telecom.internal.utils
18 
19 import android.net.Uri
20 import android.telecom.PhoneAccountHandle
21 import androidx.annotation.RequiresApi
22 import androidx.core.telecom.CallAttributesCompat
23 
24 @RequiresApi(34)
25 internal class CallAttributesUtils {
26     internal object Api34PlusImpl {
27         @JvmStatic
toTelecomCallAttributesnull28         fun toTelecomCallAttributes(
29             phoneAccountHandle: PhoneAccountHandle,
30             direction: Int,
31             displayName: CharSequence,
32             address: Uri,
33             callType: Int,
34             callCapabilities: Int
35         ): android.telecom.CallAttributes {
36             return android.telecom.CallAttributes.Builder(
37                     phoneAccountHandle,
38                     direction,
39                     displayName,
40                     address
41                 )
42                 .setCallType(remapCallType(callType))
43                 .setCallCapabilities(remapCapabilities(callCapabilities))
44                 .build()
45         }
46 
remapCallTypenull47         private fun remapCallType(callType: Int): Int {
48             return if (callType == CallAttributesCompat.CALL_TYPE_AUDIO_CALL) {
49                 android.telecom.CallAttributes.AUDIO_CALL
50             } else {
51                 android.telecom.CallAttributes.VIDEO_CALL
52             }
53         }
54 
remapCapabilitiesnull55         private fun remapCapabilities(callCapabilities: Int): Int {
56             var bitMap: Int = 0
57             if (hasSupportsSetInactiveCapability(callCapabilities)) {
58                 bitMap = bitMap or android.telecom.CallAttributes.SUPPORTS_SET_INACTIVE
59             }
60             if (hasStreamCapability(callCapabilities)) {
61                 bitMap = bitMap or android.telecom.CallAttributes.SUPPORTS_STREAM
62             }
63             if (hasTransferCapability(callCapabilities)) {
64                 bitMap = bitMap or android.telecom.CallAttributes.SUPPORTS_TRANSFER
65             }
66             return bitMap
67         }
68 
hasSupportsSetInactiveCapabilitynull69         private fun hasSupportsSetInactiveCapability(callCapabilities: Int): Boolean {
70             return Utils.hasCapability(CallAttributesCompat.SUPPORTS_SET_INACTIVE, callCapabilities)
71         }
72 
hasStreamCapabilitynull73         private fun hasStreamCapability(callCapabilities: Int): Boolean {
74             return Utils.hasCapability(CallAttributesCompat.SUPPORTS_STREAM, callCapabilities)
75         }
76 
hasTransferCapabilitynull77         private fun hasTransferCapability(callCapabilities: Int): Boolean {
78             return Utils.hasCapability(CallAttributesCompat.SUPPORTS_TRANSFER, callCapabilities)
79         }
80     }
81 }
82