• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 android.telecom.cts;
18 
19 import android.os.Bundle;
20 import android.os.OutcomeReceiver;
21 import android.os.ParcelUuid;
22 import android.telecom.CallControl;
23 import android.telecom.CallControlCallback;
24 import android.telecom.CallEndpoint;
25 import android.telecom.CallEventCallback;
26 import android.telecom.CallException;
27 import android.telecom.DisconnectCause;
28 import android.util.Log;
29 import android.util.Pair;
30 
31 import androidx.annotation.NonNull;
32 
33 import java.util.List;
34 import java.util.concurrent.CountDownLatch;
35 import java.util.function.Consumer;
36 
37 public class TelecomCtsVoipCall {
38 
39     private static final String TAG = "TelecomCtsVoipCall";
40     private final String mCallId;
41     private String mTelecomCallId = "";
42     CallControl mCallControl;
43 
TelecomCtsVoipCall(String id)44     TelecomCtsVoipCall(String id) {
45         mCallId = id;
46         mEvents.mCallId = id;
47     }
48 
getTelecomCallId()49     public ParcelUuid getTelecomCallId() {
50         return mCallControl.getCallId();
51     }
52 
onAddCallControl(@onNull CallControl callControl)53     public void onAddCallControl(@NonNull CallControl callControl) {
54         mCallControl = callControl;
55         mTelecomCallId = callControl.getCallId().toString();
56     }
57 
58     public CallControlCallback mHandshakes = new CallControlCallback() {
59         @Override
60         public void onSetActive(@NonNull Consumer<Boolean> wasCompleted) {
61             Log.i(TAG, String.format("onSetActive: callId=[%s]", mCallId));
62             wasCompleted.accept(Boolean.TRUE);
63         }
64 
65         @Override
66         public void onSetInactive(@NonNull Consumer<Boolean> wasCompleted) {
67             Log.i(TAG, String.format("onSetInactive: callId=[%s]", mCallId));
68             wasCompleted.accept(Boolean.TRUE);
69         }
70 
71         @Override
72         public void onAnswer(int videoState, @NonNull Consumer<Boolean> wasCompleted) {
73             Log.i(TAG, String.format("onAnswer: callId=[%s]", mCallId));
74             wasCompleted.accept(Boolean.TRUE);
75         }
76 
77         @Override
78         public void onDisconnect(DisconnectCause disconnectCause, Consumer<Boolean> wasCompleted) {
79             Log.i(TAG, String.format("onDisconnect: callId=[%s], disconnectCause=[%s]",
80                     mCallId, disconnectCause));
81             wasCompleted.accept(Boolean.TRUE);
82         }
83 
84         @Override
85         public void onCallStreamingStarted(@NonNull Consumer<Boolean> wasCompleted) {
86             Log.i(TAG, String.format("onCallStreamingStarted: callId=[%s]", mCallId));
87         }
88     };
89     public CallEvent mEvents = new CallEvent();
90 
resetAllCallbackVerifiers()91     public void resetAllCallbackVerifiers() {
92         mEvents.resetAllCallbackVerifiers();
93     }
94 
95     public static class CallEvent implements CallEventCallback {
96         public String mCallId = "";
97         private CallEndpoint mCallEndpoint;
98         private List<CallEndpoint> mAvailableEndpoints;
99         private boolean mIsMuted = false;
100         public boolean mWasMuteStateChangedCalled = false;
101         public Pair<String, Bundle> mLastEventReceived = null;
102 
103         @Override
onCallEndpointChanged(@onNull CallEndpoint newCallEndpoint)104         public void onCallEndpointChanged(@NonNull CallEndpoint newCallEndpoint) {
105             Log.i(TAG, String.format("onCallEndpointChanged: endpoint=[%s]", newCallEndpoint));
106             mCallEndpoint = newCallEndpoint;
107         }
108 
109         @Override
onAvailableCallEndpointsChanged( @onNull List<CallEndpoint> availableEndpoints)110         public void onAvailableCallEndpointsChanged(
111                 @NonNull List<CallEndpoint> availableEndpoints) {
112             Log.i(TAG, String.format("onAvailableCallEndpointsChanged: callId=[%s]", mCallId));
113             for (CallEndpoint endpoint : availableEndpoints) {
114                 Log.i(TAG, String.format("endpoint=[%s]", endpoint));
115             }
116             mAvailableEndpoints = availableEndpoints;
117         }
118 
119         @Override
onMuteStateChanged(boolean isMuted)120         public void onMuteStateChanged(boolean isMuted) {
121             mIsMuted = isMuted;
122             mWasMuteStateChangedCalled = true;
123         }
124 
125         @Override
onCallStreamingFailed(int reason)126         public void onCallStreamingFailed(int reason) {
127             Log.i(TAG, String.format("onCallStreamingFailed: callId=[%s], reason=[%s]", mCallId,
128                     reason));
129         }
130 
131         @Override
onEvent(String event, Bundle extras)132         public void onEvent(String event, Bundle extras) {
133             Log.i(TAG, String.format("onEvent: callId=[%s], event=[%s]", mCallId, event));
134             mLastEventReceived = new Pair<>(event, extras);
135         }
136 
resetAllCallbackVerifiers()137         public void resetAllCallbackVerifiers() {
138             mWasMuteStateChangedCalled = false;
139             mLastEventReceived = null;
140         }
141 
getCurrentCallEndpoint()142         public CallEndpoint getCurrentCallEndpoint() {
143             return mCallEndpoint;
144         }
145 
getAvailableEndpoints()146         public List<CallEndpoint> getAvailableEndpoints() {
147             return mAvailableEndpoints;
148         }
149 
isMuted()150         public boolean isMuted() {
151             return mIsMuted;
152         }
153     }
154 
155     public static class LatchedOutcomeReceiver implements OutcomeReceiver<Void, CallException> {
156         CountDownLatch mCountDownLatch;
157 
LatchedOutcomeReceiver(CountDownLatch latch)158         public LatchedOutcomeReceiver(CountDownLatch latch) {
159             mCountDownLatch = latch;
160         }
161 
162         @Override
onResult(Void result)163         public void onResult(Void result) {
164             Log.i(TAG, "latch is counting down");
165             mCountDownLatch.countDown();
166         }
167 
168         @Override
onError(@onNull CallException error)169         public void onError(@NonNull CallException error) {
170             Log.i(TAG, String.format("onError: code=[%d]", error.getCode()));
171             OutcomeReceiver.super.onError(error);
172         }
173     }
174 }
175