1bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad/* 2ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal * Copyright (C) 2014 The Android Open Source Project 3bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * 4bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * Licensed under the Apache License, Version 2.0 (the "License"); 5bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * you may not use this file except in compliance with the License. 6bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * You may obtain a copy of the License at 7bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * 8bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * http://www.apache.org/licenses/LICENSE-2.0 9bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * 10bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * Unless required by applicable law or agreed to in writing, software 11bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * distributed under the License is distributed on an "AS IS" BASIS, 12bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * See the License for the specific language governing permissions and 14bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * limitations under the License. 15bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad */ 16bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 17ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnpackage android.telecom; 18bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 19612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepalimport android.net.Uri; 206b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordonimport android.os.Bundle; 2152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport android.os.IBinder.DeathRecipient; 22ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepalimport android.os.RemoteException; 23ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal 24ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnimport com.android.internal.telecom.IConnectionServiceAdapter; 25ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnimport com.android.internal.telecom.RemoteServiceCallback; 26bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 27b0c0e36faf5b4218f290e95584528a41c1f22f21Jay Shraunerimport java.util.Collections; 284dd9df58a6bf662264f0aebddfb14b850358f9b9Sailesh Nepalimport java.util.Iterator; 29980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordonimport java.util.List; 3052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordonimport java.util.Set; 31b0c0e36faf5b4218f290e95584528a41c1f22f21Jay Shraunerimport java.util.concurrent.ConcurrentHashMap; 32980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon 33bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad/** 342a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal * Provides methods for IConnectionService implementations to interact with the system phone app. 352bed9563edbec63ad41e2cd5fccc205d5b0891e5Sailesh Nepal * 362bed9563edbec63ad41e2cd5fccc205d5b0891e5Sailesh Nepal * @hide 37bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad */ 382a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepalfinal class ConnectionServiceAdapter implements DeathRecipient { 39229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner /** 40229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * ConcurrentHashMap constructor params: 8 is initial table size, 0.9f is 41229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * load factor before resizing, 1 means we only expect a single thread to 42229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner * access the map so make only a single shard 43229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner */ 44b0c0e36faf5b4218f290e95584528a41c1f22f21Jay Shrauner private final Set<IConnectionServiceAdapter> mAdapters = Collections.newSetFromMap( 45229e3820dce98f64fd4834d5f421faec9a9d7026Jay Shrauner new ConcurrentHashMap<IConnectionServiceAdapter, Boolean>(8, 0.9f, 1)); 46ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal 472a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal ConnectionServiceAdapter() { 4852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 4952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 502a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void addAdapter(IConnectionServiceAdapter adapter) { 5175c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius for (IConnectionServiceAdapter it : mAdapters) { 5275c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius if (it.asBinder() == adapter.asBinder()) { 5375c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius Log.w(this, "Ignoring duplicate adapter addition."); 5475c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius return; 5575c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius } 5675c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius } 5752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mAdapters.add(adapter)) { 5852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 5952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon adapter.asBinder().linkToDeath(this, 0); 6052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 6152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon mAdapters.remove(adapter); 6252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 6352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 6452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 6552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 662a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void removeAdapter(IConnectionServiceAdapter adapter) { 6775c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius if (adapter != null) { 6875c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius for (IConnectionServiceAdapter it : mAdapters) { 6975c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius if (it.asBinder() == adapter.asBinder() && mAdapters.remove(it)) { 7075c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius adapter.asBinder().unlinkToDeath(this, 0); 7175c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius break; 7275c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius } 7375c36b681e3331f4e60fa62abe4615c1ffc5b401Roshan Pius } 7452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 7552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 7652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 7752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** ${inheritDoc} */ 7852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon @Override 7952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon public void binderDied() { 804dd9df58a6bf662264f0aebddfb14b850358f9b9Sailesh Nepal Iterator<IConnectionServiceAdapter> it = mAdapters.iterator(); 814dd9df58a6bf662264f0aebddfb14b850358f9b9Sailesh Nepal while (it.hasNext()) { 824dd9df58a6bf662264f0aebddfb14b850358f9b9Sailesh Nepal IConnectionServiceAdapter adapter = it.next(); 8352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (!adapter.asBinder().isBinderAlive()) { 844dd9df58a6bf662264f0aebddfb14b850358f9b9Sailesh Nepal it.remove(); 854dd9df58a6bf662264f0aebddfb14b850358f9b9Sailesh Nepal adapter.asBinder().unlinkToDeath(this, 0); 8652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 8752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 88ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 89bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 906107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad void handleCreateConnectionComplete( 91b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad String id, 92b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad ConnectionRequest request, 93b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad ParcelableConnection connection) { 942a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 9552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 964d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.handleCreateConnectionComplete(id, request, connection, 974d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger Log.getExternalSession()); 98506e38690fe5e3b627e243fdc20948c514b87680Sailesh Nepal } catch (RemoteException e) { 99506e38690fe5e3b627e243fdc20948c514b87680Sailesh Nepal } 100506e38690fe5e3b627e243fdc20948c514b87680Sailesh Nepal } 101ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 102bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 103bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad /** 104bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * Sets a call's state to active (e.g., an ongoing call where two parties can actively 105bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * communicate). 1063784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * 1073784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * @param callId The unique ID of the call whose state is changing to active. 108bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad */ 1092a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void setActive(String callId) { 1102a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 11152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 1124d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setActive(callId, Log.getExternalSession()); 11352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 11452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 115ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 116ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 117bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 118bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad /** 119bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * Sets a call's state to ringing (e.g., an inbound ringing call). 1203784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * 1213784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * @param callId The unique ID of the call whose state is changing to ringing. 122bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad */ 1232a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void setRinging(String callId) { 1242a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 12552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 1264d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setRinging(callId, Log.getExternalSession()); 12752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 12852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 129ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 130ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 131bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 132bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad /** 133bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * Sets a call's state to dialing (e.g., dialing an outbound call). 1343784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * 1353784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * @param callId The unique ID of the call whose state is changing to dialing. 136bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad */ 1372a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void setDialing(String callId) { 1382a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 13952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 1404d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setDialing(callId, Log.getExternalSession()); 14152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 14252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 143ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 144ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 145bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad 146bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad /** 147c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn * Sets a call's state to pulling (e.g. a call with {@link Connection#PROPERTY_IS_EXTERNAL_CALL} 148c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn * is being pulled to the local device. 149c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn * 150c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn * @param callId The unique ID of the call whose state is changing to dialing. 151c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn */ 152c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn void setPulling(String callId) { 153c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 154c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn try { 1554d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setPulling(callId, Log.getExternalSession()); 156c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn } catch (RemoteException e) { 157c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn } 158c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn } 159c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn } 160c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn 161c96b5e087382a2a530e9c8cf8f2e1f8dbfc439c5Tyler Gunn /** 162bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad * Sets a call's state to disconnected. 1633784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * 1643784133b95f1206c0c6bbbddb5921ef396b5b941Santos Cordon * @param callId The unique ID of the call whose state is changing to disconnected. 1657f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * @param disconnectCause The reason for the disconnection, as described by 1667f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * {@link android.telecomm.DisconnectCause}. 167bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad */ 1687f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee void setDisconnected(String callId, DisconnectCause disconnectCause) { 1692a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 17052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 1714d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setDisconnected(callId, disconnectCause, Log.getExternalSession()); 17252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 17352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 174ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 175ab5d282dd6f487578ae86b2d53d0d8edc9b71747Sailesh Nepal } 17681ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee 17781ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee /** 17881ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee * Sets a call's state to be on hold. 17981ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee * 18081ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee * @param callId - The unique ID of the call whose state is changing to be on hold. 18181ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee */ 1822a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void setOnHold(String callId) { 1832a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 18452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 1854d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setOnHold(callId, Log.getExternalSession()); 18652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 18752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 18881ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee } 18981ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee } 19081ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee 191f835897f9f799490de27653ae39141ba6bc14223Ihab Awad /** 192ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * Asks Telecom to start or stop a ringback tone for a call. 193f835897f9f799490de27653ae39141ba6bc14223Ihab Awad * 194f835897f9f799490de27653ae39141ba6bc14223Ihab Awad * @param callId The unique ID of the call whose ringback is being changed. 195ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * @param ringback Whether Telecom should start playing a ringback tone. 196f835897f9f799490de27653ae39141ba6bc14223Ihab Awad */ 197100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee void setRingbackRequested(String callId, boolean ringback) { 1982a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 19952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 2004d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setRingbackRequested(callId, ringback, Log.getExternalSession()); 20152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 20252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 203f835897f9f799490de27653ae39141ba6bc14223Ihab Awad } 204f835897f9f799490de27653ae39141ba6bc14223Ihab Awad } 20581ccaaa25cc90c576c7df7c2cccb8a232e8536a1Yorke Lee 2065c9c86ec0f95d1f5e1aca212967f508fc736b895Ihab Awad void setConnectionCapabilities(String callId, int capabilities) { 2072a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 20852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 2094d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setConnectionCapabilities(callId, capabilities, Log.getExternalSession()); 21052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 21152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 212980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon } 213980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon } 214980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon 215720c664401081ca00e56c7eef12641ae792da530Tyler Gunn void setConnectionProperties(String callId, int properties) { 216720c664401081ca00e56c7eef12641ae792da530Tyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 217720c664401081ca00e56c7eef12641ae792da530Tyler Gunn try { 2184d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setConnectionProperties(callId, properties, Log.getExternalSession()); 219720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } catch (RemoteException ignored) { 220720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } 221720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } 222720c664401081ca00e56c7eef12641ae792da530Tyler Gunn } 223720c664401081ca00e56c7eef12641ae792da530Tyler Gunn 224980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon /** 225980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * Indicates whether or not the specified call is currently conferenced into the specified 226980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * conference call. 227980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * 228980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * @param callId The unique ID of the call being conferenced. 229b693998fdfdd4498a33c4c69405f2708e4840aa7Santos Cordon * @param conferenceCallId The unique ID of the conference call. Null if call is not 23052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * conferenced. 231980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon */ 2322a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void setIsConferenced(String callId, String conferenceCallId) { 2332a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 23452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 2350159ac0cfe20e8f85ee4150e64d91392850f8a3fSantos Cordon Log.d(this, "sending connection %s with conference %s", callId, conferenceCallId); 2364d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setIsConferenced(callId, conferenceCallId, Log.getExternalSession()); 23752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 23852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 239980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon } 240980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon } 241980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon 242980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon /** 24317455a3d39350a39eb995897929977d793358365Anthony Lee * Indicates that the merge request on this call has failed. 24417455a3d39350a39eb995897929977d793358365Anthony Lee * 24517455a3d39350a39eb995897929977d793358365Anthony Lee * @param callId The unique ID of the call being conferenced. 24617455a3d39350a39eb995897929977d793358365Anthony Lee */ 24717455a3d39350a39eb995897929977d793358365Anthony Lee void onConferenceMergeFailed(String callId) { 24817455a3d39350a39eb995897929977d793358365Anthony Lee for (IConnectionServiceAdapter adapter : mAdapters) { 24917455a3d39350a39eb995897929977d793358365Anthony Lee try { 25017455a3d39350a39eb995897929977d793358365Anthony Lee Log.d(this, "merge failed for call %s", callId); 2514d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setConferenceMergeFailed(callId, Log.getExternalSession()); 25217455a3d39350a39eb995897929977d793358365Anthony Lee } catch (RemoteException ignored) { 25317455a3d39350a39eb995897929977d793358365Anthony Lee } 25417455a3d39350a39eb995897929977d793358365Anthony Lee } 25517455a3d39350a39eb995897929977d793358365Anthony Lee } 25617455a3d39350a39eb995897929977d793358365Anthony Lee 25717455a3d39350a39eb995897929977d793358365Anthony Lee /** 258980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * Indicates that the call no longer exists. Can be used with either a call or a conference 259980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * call. 260980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * 261980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon * @param callId The unique ID of the call. 262980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon */ 2632a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void removeCall(String callId) { 2642a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 26552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 2664d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.removeCall(callId, Log.getExternalSession()); 26752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 26852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 269980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon } 270980acb9bd6984a9daad5f584bd35e8d503820200Santos Cordon } 2716dea4aceba8f69ee4be346ec356d277a3c153f3dEvan Charlton 2722a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void onPostDialWait(String callId, String remaining) { 2732a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 27452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 2754d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.onPostDialWait(callId, remaining, Log.getExternalSession()); 27652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 27752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 2786dea4aceba8f69ee4be346ec356d277a3c153f3dEvan Charlton } 2796dea4aceba8f69ee4be346ec356d277a3c153f3dEvan Charlton } 2808b4818d9b4d632f2d460e7ac9dea463b04db43feSailesh Nepal 28127d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen void onPostDialChar(String callId, char nextChar) { 28227d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen for (IConnectionServiceAdapter adapter : mAdapters) { 28327d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen try { 2844d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.onPostDialChar(callId, nextChar, Log.getExternalSession()); 28527d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } catch (RemoteException ignored) { 28627d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } 28727d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } 28827d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen } 28927d1c2d148fe377ca0d2744f0f85789a42c8f808Nancy Chen 2908b4818d9b4d632f2d460e7ac9dea463b04db43feSailesh Nepal /** 291b693998fdfdd4498a33c4c69405f2708e4840aa7Santos Cordon * Indicates that a new conference call has been created. 292b693998fdfdd4498a33c4c69405f2708e4840aa7Santos Cordon * 293b693998fdfdd4498a33c4c69405f2708e4840aa7Santos Cordon * @param callId The unique ID of the conference call. 294b693998fdfdd4498a33c4c69405f2708e4840aa7Santos Cordon */ 295823fd3c79dd4f762bbc778e0ce9e2204b6d3d454Santos Cordon void addConferenceCall(String callId, ParcelableConference parcelableConference) { 2962a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 29752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 2984d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.addConferenceCall(callId, parcelableConference, Log.getExternalSession()); 29952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException ignored) { 30052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 30152d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 30252d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 30352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 30452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 30552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon * Retrieves a list of remote connection services usable to place calls. 30652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 3072a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal void queryRemoteConnectionServices(RemoteServiceCallback callback) { 30852d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon // Only supported when there is only one adapter. 30952d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon if (mAdapters.size() == 1) { 31052d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon try { 3114d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger mAdapters.iterator().next().queryRemoteConnectionServices(callback, 3124d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger Log.getExternalSession()); 31352d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } catch (RemoteException e) { 31452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon Log.e(this, e, "Exception trying to query for remote CSs"); 31552d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon } 316b693998fdfdd4498a33c4c69405f2708e4840aa7Santos Cordon } 317b693998fdfdd4498a33c4c69405f2708e4840aa7Santos Cordon } 3185ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee 3195ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee /** 3205ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee * Sets the call video provider for a call. 3215ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee * 3225ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee * @param callId The unique ID of the call to set with the given call video provider. 323b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @param videoProvider The call video provider instance to set on the call. 3245ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee */ 325b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad void setVideoProvider( 326b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad String callId, Connection.VideoProvider videoProvider) { 3272a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 3285ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee try { 329b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad adapter.setVideoProvider( 330e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon callId, 3314d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger videoProvider == null ? null : videoProvider.getInterface(), 3324d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger Log.getExternalSession()); 3335ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee } catch (RemoteException e) { 3345ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee } 3355ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee } 3365ffbe8b850c2703b64617f0140d051a5412dd861Andrew Lee } 3378d83fa9bbd2ad15299a4419241eb10404e7839beTyler Gunn 3388d83fa9bbd2ad15299a4419241eb10404e7839beTyler Gunn /** 33933aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal * Requests that the framework use VOIP audio mode for this connection. 34033aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal * 34133aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal * @param callId The unique ID of the call to set with the given call video provider. 34233aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal * @param isVoip True if the audio mode is VOIP. 34333aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal */ 344100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee void setIsVoipAudioMode(String callId, boolean isVoip) { 34533aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 34633aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal try { 3474d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setIsVoipAudioMode(callId, isVoip, Log.getExternalSession()); 34833aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } catch (RemoteException e) { 34933aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 35033aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 35133aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal } 35233aaae4a07fdcce223fe74d96d751f4bffa6723aSailesh Nepal 353e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal void setStatusHints(String callId, StatusHints statusHints) { 354e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 355e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal try { 3564d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setStatusHints(callId, statusHints, Log.getExternalSession()); 357e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } catch (RemoteException e) { 358e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 359e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 360e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 361e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 362100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee void setAddress(String callId, Uri address, int presentation) { 3632a46b90222e5c9c73de012382a604a71f9c0c30cSailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 3648d83fa9bbd2ad15299a4419241eb10404e7839beTyler Gunn try { 3654d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setAddress(callId, address, presentation, Log.getExternalSession()); 366612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } catch (RemoteException e) { 367612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 368612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 369612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 370612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 371612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal void setCallerDisplayName(String callId, String callerDisplayName, int presentation) { 372612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal for (IConnectionServiceAdapter adapter : mAdapters) { 373612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal try { 3744d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setCallerDisplayName(callId, callerDisplayName, presentation, 3754d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger Log.getExternalSession()); 376612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } catch (RemoteException e) { 3778d83fa9bbd2ad15299a4419241eb10404e7839beTyler Gunn } 3788d83fa9bbd2ad15299a4419241eb10404e7839beTyler Gunn } 3798d83fa9bbd2ad15299a4419241eb10404e7839beTyler Gunn } 380aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn 381aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn /** 382aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn * Sets the video state associated with a call. 383aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn * 38487b73f370e2b8a76b0540580f43edba6ec21c6cfTyler Gunn * Valid values: {@link VideoProfile#STATE_BIDIRECTIONAL}, 38587b73f370e2b8a76b0540580f43edba6ec21c6cfTyler Gunn * {@link VideoProfile#STATE_AUDIO_ONLY}, 38687b73f370e2b8a76b0540580f43edba6ec21c6cfTyler Gunn * {@link VideoProfile#STATE_TX_ENABLED}, 38787b73f370e2b8a76b0540580f43edba6ec21c6cfTyler Gunn * {@link VideoProfile#STATE_RX_ENABLED}. 388aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn * 389aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn * @param callId The unique ID of the call to set the video state for. 390aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn * @param videoState The video state. 391aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn */ 392aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn void setVideoState(String callId, int videoState) { 393aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn Log.v(this, "setVideoState: %d", videoState); 394aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 395aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn try { 3964d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setVideoState(callId, videoState, Log.getExternalSession()); 397aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } catch (RemoteException ignored) { 398aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 399aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 400aa07df84f279a87ad6370758c9d792a660f2cebbTyler Gunn } 4012ab88cc313fc4af7fb9436e236cd3a5d1ac58478Sailesh Nepal 4027c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon void setConferenceableConnections(String callId, List<String> conferenceableCallIds) { 4037c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon Log.v(this, "setConferenceableConnections: %s, %s", callId, conferenceableCallIds); 4047c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon for (IConnectionServiceAdapter adapter : mAdapters) { 4057c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon try { 4064d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.setConferenceableConnections(callId, conferenceableCallIds, 4074d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger Log.getExternalSession()); 4087c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } catch (RemoteException ignored) { 4097c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } 4107c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } 4117c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon } 4124a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn 4134a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn /** 4144a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn * Informs telecom of an existing connection which was added by the {@link ConnectionService}. 4154a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn * 4164a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn * @param callId The unique ID of the call being added. 4174a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn * @param connection The connection. 4184a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn */ 4194a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn void addExistingConnection(String callId, ParcelableConnection connection) { 4204a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn Log.v(this, "addExistingConnection: %s", callId); 4214a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 4224a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn try { 4234d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.addExistingConnection(callId, connection, Log.getExternalSession()); 4244a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn } catch (RemoteException ignored) { 4254a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn } 4264a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn } 4274a57b9b59b74c97e559a301af0add13cd4c3331cTyler Gunn } 4286b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon 4296b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon /** 430dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * Adds some extras associated with a {@code Connection}. 4316b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * 4326b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon * @param callId The unique ID of the call. 433dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param extras The extras to add. 4346b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon */ 435dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn void putExtras(String callId, Bundle extras) { 436dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Log.v(this, "putExtras: %s", callId); 4376b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon for (IConnectionServiceAdapter adapter : mAdapters) { 4386b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon try { 4394d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.putExtras(callId, extras, Log.getExternalSession()); 440dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } catch (RemoteException ignored) { 441dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 442dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 443dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 444dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 445dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn /** 446dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * Adds an extra associated with a {@code Connection}. 447dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * 448dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param callId The unique ID of the call. 449dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param key The extra key. 450dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param value The extra value. 451dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn */ 452dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn void putExtra(String callId, String key, boolean value) { 453dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Log.v(this, "putExtra: %s %s=%b", callId, key, value); 454dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 455dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn try { 456dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Bundle bundle = new Bundle(); 457dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn bundle.putBoolean(key, value); 4584d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.putExtras(callId, bundle, Log.getExternalSession()); 459dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } catch (RemoteException ignored) { 460dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 461dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 462dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 463dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 464dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn /** 465dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * Adds an extra associated with a {@code Connection}. 466dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * 467dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param callId The unique ID of the call. 468dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param key The extra key. 469dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param value The extra value. 470dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn */ 471dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn void putExtra(String callId, String key, int value) { 472dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Log.v(this, "putExtra: %s %s=%d", callId, key, value); 473dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 474dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn try { 475dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Bundle bundle = new Bundle(); 476dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn bundle.putInt(key, value); 4774d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.putExtras(callId, bundle, Log.getExternalSession()); 478dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } catch (RemoteException ignored) { 479dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 480dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 481dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 482dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 483dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn /** 484dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * Adds an extra associated with a {@code Connection}. 485dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * 486dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param callId The unique ID of the call. 487dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param key The extra key. 488dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param value The extra value. 489dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn */ 490dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn void putExtra(String callId, String key, String value) { 491dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Log.v(this, "putExtra: %s %s=%s", callId, key, value); 492dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 493dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn try { 494dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Bundle bundle = new Bundle(); 495dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn bundle.putString(key, value); 4964d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.putExtras(callId, bundle, Log.getExternalSession()); 497dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } catch (RemoteException ignored) { 498dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 499dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 500dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn } 501dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn 502dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn /** 503dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * Removes extras associated with a {@code Connection}. 504dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param callId The unique ID of the call. 505dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn * @param keys The extra keys to remove. 506dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn */ 507dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn void removeExtras(String callId, List<String> keys) { 508dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn Log.v(this, "removeExtras: %s %s", callId, keys); 509dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 510dee56a8a79f9daa1e597f5d4f399d3a5feedcac4Tyler Gunn try { 5114d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.removeExtras(callId, keys, Log.getExternalSession()); 5126b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } catch (RemoteException ignored) { 5136b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 5146b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 5156b7f955c2d9b231660b8c54f8ef8e8e6ad802625Santos Cordon } 516bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn 517bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn /** 518f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn * Sets the audio route associated with a {@link Connection}. 519f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn * 520f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn * @param callId The unique ID of the call. 521f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn * @param audioRoute The new audio route (see {@code CallAudioState#ROUTE_*}). 522f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn */ 523f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn void setAudioRoute(String callId, int audioRoute) { 524f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn Log.v(this, "setAudioRoute: %s %s", callId, CallAudioState.audioRouteToString(audioRoute)); 525f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 526f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn try { 527f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn adapter.setAudioRoute(callId, audioRoute, Log.getExternalSession()); 528f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn } catch (RemoteException ignored) { 529f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn } 530f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn } 531f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn } 532f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn 533f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn 534f50354363c2bace924c6aeea5746b3c690a7108eTyler Gunn /** 535bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * Informs Telecom of a connection level event. 536bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * 537bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * @param callId The unique ID of the call. 538bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn * @param event The event. 539876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn * @param extras Extras associated with the event. 540bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn */ 541876dbfb4767da4a2ba5459d5b78fb6eb55e4516fTyler Gunn void onConnectionEvent(String callId, String event, Bundle extras) { 542bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn Log.v(this, "onConnectionEvent: %s", event); 543bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn for (IConnectionServiceAdapter adapter : mAdapters) { 544bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn try { 5454d75bee99b259503d376a7c1604f426001bba75cBrad Ebinger adapter.onConnectionEvent(callId, event, extras, Log.getExternalSession()); 546bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn } catch (RemoteException ignored) { 547bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn } 548bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn } 549bd1eb1f105e99d55fe87d758e8eafbe55a221a30Tyler Gunn } 55057006aa82a69740df73415a456d31993e2785e24Hall Liu 55157006aa82a69740df73415a456d31993e2785e24Hall Liu /** 55257006aa82a69740df73415a456d31993e2785e24Hall Liu * Notifies Telecom that an RTT session was successfully established. 55357006aa82a69740df73415a456d31993e2785e24Hall Liu * 55457006aa82a69740df73415a456d31993e2785e24Hall Liu * @param callId The unique ID of the call. 55557006aa82a69740df73415a456d31993e2785e24Hall Liu */ 55657006aa82a69740df73415a456d31993e2785e24Hall Liu void onRttInitiationSuccess(String callId) { 55757006aa82a69740df73415a456d31993e2785e24Hall Liu Log.v(this, "onRttInitiationSuccess: %s", callId); 55857006aa82a69740df73415a456d31993e2785e24Hall Liu for (IConnectionServiceAdapter adapter : mAdapters) { 55957006aa82a69740df73415a456d31993e2785e24Hall Liu try { 56057006aa82a69740df73415a456d31993e2785e24Hall Liu adapter.onRttInitiationSuccess(callId, Log.getExternalSession()); 56157006aa82a69740df73415a456d31993e2785e24Hall Liu } catch (RemoteException ignored) { 56257006aa82a69740df73415a456d31993e2785e24Hall Liu } 56357006aa82a69740df73415a456d31993e2785e24Hall Liu } 56457006aa82a69740df73415a456d31993e2785e24Hall Liu } 56557006aa82a69740df73415a456d31993e2785e24Hall Liu 56657006aa82a69740df73415a456d31993e2785e24Hall Liu /** 56757006aa82a69740df73415a456d31993e2785e24Hall Liu * Notifies Telecom that a requested RTT session failed to be established. 56857006aa82a69740df73415a456d31993e2785e24Hall Liu * 56957006aa82a69740df73415a456d31993e2785e24Hall Liu * @param callId The unique ID of the call. 57057006aa82a69740df73415a456d31993e2785e24Hall Liu */ 57157006aa82a69740df73415a456d31993e2785e24Hall Liu void onRttInitiationFailure(String callId, int reason) { 57257006aa82a69740df73415a456d31993e2785e24Hall Liu Log.v(this, "onRttInitiationFailure: %s", callId); 57357006aa82a69740df73415a456d31993e2785e24Hall Liu for (IConnectionServiceAdapter adapter : mAdapters) { 57457006aa82a69740df73415a456d31993e2785e24Hall Liu try { 57557006aa82a69740df73415a456d31993e2785e24Hall Liu adapter.onRttInitiationFailure(callId, reason, Log.getExternalSession()); 57657006aa82a69740df73415a456d31993e2785e24Hall Liu } catch (RemoteException ignored) { 57757006aa82a69740df73415a456d31993e2785e24Hall Liu } 57857006aa82a69740df73415a456d31993e2785e24Hall Liu } 57957006aa82a69740df73415a456d31993e2785e24Hall Liu } 58057006aa82a69740df73415a456d31993e2785e24Hall Liu 58157006aa82a69740df73415a456d31993e2785e24Hall Liu /** 58257006aa82a69740df73415a456d31993e2785e24Hall Liu * Notifies Telecom that an established RTT session was terminated by the remote user on 58357006aa82a69740df73415a456d31993e2785e24Hall Liu * the call. 58457006aa82a69740df73415a456d31993e2785e24Hall Liu * 58557006aa82a69740df73415a456d31993e2785e24Hall Liu * @param callId The unique ID of the call. 58657006aa82a69740df73415a456d31993e2785e24Hall Liu */ 58757006aa82a69740df73415a456d31993e2785e24Hall Liu void onRttSessionRemotelyTerminated(String callId) { 58857006aa82a69740df73415a456d31993e2785e24Hall Liu Log.v(this, "onRttSessionRemotelyTerminated: %s", callId); 58957006aa82a69740df73415a456d31993e2785e24Hall Liu for (IConnectionServiceAdapter adapter : mAdapters) { 59057006aa82a69740df73415a456d31993e2785e24Hall Liu try { 59157006aa82a69740df73415a456d31993e2785e24Hall Liu adapter.onRttSessionRemotelyTerminated(callId, Log.getExternalSession()); 59257006aa82a69740df73415a456d31993e2785e24Hall Liu } catch (RemoteException ignored) { 59357006aa82a69740df73415a456d31993e2785e24Hall Liu } 59457006aa82a69740df73415a456d31993e2785e24Hall Liu } 59557006aa82a69740df73415a456d31993e2785e24Hall Liu } 59657006aa82a69740df73415a456d31993e2785e24Hall Liu 59757006aa82a69740df73415a456d31993e2785e24Hall Liu /** 59857006aa82a69740df73415a456d31993e2785e24Hall Liu * Notifies Telecom that the remote user on the call has requested an upgrade to an RTT 59957006aa82a69740df73415a456d31993e2785e24Hall Liu * session for this call. 60057006aa82a69740df73415a456d31993e2785e24Hall Liu * 60157006aa82a69740df73415a456d31993e2785e24Hall Liu * @param callId The unique ID of the call. 60257006aa82a69740df73415a456d31993e2785e24Hall Liu */ 60357006aa82a69740df73415a456d31993e2785e24Hall Liu void onRemoteRttRequest(String callId) { 60457006aa82a69740df73415a456d31993e2785e24Hall Liu Log.v(this, "onRemoteRttRequest: %s", callId); 60557006aa82a69740df73415a456d31993e2785e24Hall Liu for (IConnectionServiceAdapter adapter : mAdapters) { 60657006aa82a69740df73415a456d31993e2785e24Hall Liu try { 60757006aa82a69740df73415a456d31993e2785e24Hall Liu adapter.onRemoteRttRequest(callId, Log.getExternalSession()); 60857006aa82a69740df73415a456d31993e2785e24Hall Liu } catch (RemoteException ignored) { 60957006aa82a69740df73415a456d31993e2785e24Hall Liu } 61057006aa82a69740df73415a456d31993e2785e24Hall Liu } 61157006aa82a69740df73415a456d31993e2785e24Hall Liu } 612bb69b0c2d821a9806fb00037284c399cbc78277dBen Gilad} 613