/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.telecom; import android.annotation.NonNull; import java.util.function.Consumer; /** * CallControlCallback relays call updates (that require a response) from the Telecom framework out * to the application.This can include operations which the app must implement on a Call due to the * presence of other calls on the device, requests relayed from a Bluetooth device, or from another * calling surface. * *

* All CallControlCallbacks are transactional, meaning that a client must * complete the {@link Consumer} via {@link Consumer#accept(Object)} in order to complete the * CallControlCallbacks. If a CallControlCallbacks can be completed, the * {@link Consumer#accept(Object)} should be called with {@link Boolean#TRUE}. Otherwise, * {@link Consumer#accept(Object)} should be called with {@link Boolean#FALSE} to represent the * CallControlCallbacks cannot be completed on the client side. * *

* Note: Each CallEventCallback has a timeout of 5000 milliseconds. Failing to complete the * {@link Consumer} before the timeout will result in a failed transaction. */ public interface CallControlCallback { /** * Telecom is informing the client to set the call active * * @param wasCompleted The {@link Consumer} to be completed. If the client can set the call * active on their end, the {@link Consumer#accept(Object)} should be * called with {@link Boolean#TRUE}. * * Otherwise, {@link Consumer#accept(Object)} should be called with * {@link Boolean#FALSE}. Telecom will effectively ignore the remote * setActive request and the call will remain in whatever state it is in. */ void onSetActive(@NonNull Consumer wasCompleted); /** * Telecom is informing the client to set the call inactive. This is the same as holding a call * for two endpoints but can be extended to setting a meeting inactive. * * @param wasCompleted The {@link Consumer} to be completed. If the client can set the call * inactive on their end, the {@link Consumer#accept(Object)} should be * called with {@link Boolean#TRUE}. * * Otherwise, {@link Consumer#accept(Object)} should be called with * {@link Boolean#FALSE}. Telecom will effectively ignore the remote * setInactive request and the call will remain in whatever state it is in. */ void onSetInactive(@NonNull Consumer wasCompleted); /** * Telecom is informing the client to answer an incoming call and set it to active. * * @param videoState the video state * @param wasCompleted The {@link Consumer} to be completed. If the client can answer the call * on their end, {@link Consumer#accept(Object)} should be called with * {@link Boolean#TRUE}. * * Otherwise,{@link Consumer#accept(Object)} should be called with * {@link Boolean#FALSE}. However, Telecom will still disconnect * the call and remove it from tracking. */ void onAnswer(@android.telecom.CallAttributes.CallType int videoState, @NonNull Consumer wasCompleted); /** * Telecom is informing the client to disconnect the call * * @param disconnectCause represents the cause for disconnecting the call. * @param wasCompleted The {@link Consumer} to be completed. If the client can disconnect * the call on their end, {@link Consumer#accept(Object)} should be * called with {@link Boolean#TRUE}. * * Otherwise,{@link Consumer#accept(Object)} should be called with * {@link Boolean#FALSE}. However, Telecom will still disconnect * the call and remove it from tracking. */ void onDisconnect(@NonNull DisconnectCause disconnectCause, @NonNull Consumer wasCompleted); /** * Telecom is informing the client to set the call in streaming. * * @param wasCompleted The {@link Consumer} to be completed. If the client can stream the * call on their end, {@link Consumer#accept(Object)} should be called with * {@link Boolean#TRUE}. Otherwise, {@link Consumer#accept(Object)} * should be called with {@link Boolean#FALSE}. */ void onCallStreamingStarted(@NonNull Consumer wasCompleted); }