10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunnimport android.net.Uri; 20e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingamimport android.os.SystemClock; 21fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunnimport android.telecom.ConferenceParticipant; 2299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Savilleimport android.telephony.Rlog; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.Log; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 257fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunnimport java.lang.Override; 260b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charltonimport java.util.ArrayList; 270b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charltonimport java.util.List; 2864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunnimport java.util.Set; 2964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunnimport java.util.concurrent.CopyOnWriteArraySet; 300b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic abstract class Connection { 350b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton public interface PostDialListener { 360b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton void onPostDialWait(); 374567a0789e9966929c71af9a2c3866582c85c9e0Nancy Chen void onPostDialChar(char c); 380b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton } 390b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton 4064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 4164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Listener interface for events related to the connection which should be reported to the 42dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn * {@link android.telecom.Connection}. 4364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 4464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public interface Listener { 4564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void onVideoStateChanged(int videoState); 4664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void onLocalVideoCapabilityChanged(boolean capable); 4764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void onRemoteVideoCapabilityChanged(boolean capable); 48d5c5a168b4f5806701a4d146309c996acca7183dIhab Awad public void onVideoProviderChanged( 49dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn android.telecom.Connection.VideoProvider videoProvider); 507fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn public void onAudioQualityChanged(int audioQuality); 51f53559f13dc272115f27f3b23955933da45ce127Tyler Gunn public void onConferenceParticipantsChanged(List<ConferenceParticipant> participants); 5264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 5364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 5464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 5564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Base listener implementation. 5664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 5764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public abstract static class ListenerBase implements Listener { 5864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn @Override 5964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void onVideoStateChanged(int videoState) {} 6064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn @Override 6164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void onLocalVideoCapabilityChanged(boolean capable) {} 6264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn @Override 6364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void onRemoteVideoCapabilityChanged(boolean capable) {} 642999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn @Override 65d5c5a168b4f5806701a4d146309c996acca7183dIhab Awad public void onVideoProviderChanged( 66dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn android.telecom.Connection.VideoProvider videoProvider) {} 677fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn @Override 687fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn public void onAudioQualityChanged(int audioQuality) {} 69fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn @Override 70f53559f13dc272115f27f3b23955933da45ce127Tyler Gunn public void onConferenceParticipantsChanged(List<ConferenceParticipant> participants) {} 7164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 7264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 737fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn public static final int AUDIO_QUALITY_STANDARD = 1; 747fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn public static final int AUDIO_QUALITY_HIGH_DEFINITION = 2; 757fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //Caller Name Display 7722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mCnapName; 7822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected int mCnapNamePresentation = PhoneConstants.PRESENTATION_ALLOWED; 79e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected String mAddress; // MAY BE NULL!!! 80e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected String mDialString; // outgoing calls only 81e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected int mNumberPresentation = PhoneConstants.PRESENTATION_ALLOWED; 82e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected boolean mIsIncoming; 83e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam /* 84e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam * These time/timespan values are based on System.currentTimeMillis(), 85e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam * i.e., "wall clock" time. 86e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam */ 87e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected long mCreateTime; 88e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected long mConnectTime; 89e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam /* 90e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam * These time/timespan values are based on SystemClock.elapsedRealTime(), 91e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam * i.e., time since boot. They are appropriate for comparison and 92e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam * calculating deltas. 93e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam */ 94e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected long mConnectTimeReal; 95e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected long mDuration; 96e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected long mHoldingStartTime; // The time when the Connection last transitioned 97e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam // into HOLDING 98e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected Connection mOrigConnection; 990b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton private List<PostDialListener> mPostDialListeners = new ArrayList<>(); 100e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public Set<Listener> mListeners = new CopyOnWriteArraySet<>(); 1010b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton 1022d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying protected boolean mNumberConverted = false; 1032d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying protected String mConvertedNumber; 1042d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying 105cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville private static String LOG_TAG = "Connection"; 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville Object mUserData; 10864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn private int mVideoState; 10964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn private boolean mLocalVideoCapable; 11064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn private boolean mRemoteVideoCapable; 1117fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn private int mAudioQuality; 112dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn private android.telecom.Connection.VideoProvider mVideoProvider; 1134be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam public Call.State mPreHandoverState = Call.State.IDLE; 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* Instance Methods */ 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Gets address (e.g. phone number) associated with connection. 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * TODO: distinguish reasons for unavailability 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return address or null if unavailable 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 124e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public String getAddress() { 125e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mAddress; 126e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Gets CNAP name associated with connection. 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return cnap name or null if unavailable 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCnapName() { 13322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCnapName; 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get original dial string. 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return original dial string or null if unavailable 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getOrigDialString(){ 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Gets CNAP presentation associated with connection. 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return cnap name or null if unavailable 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCnapNamePresentation() { 15022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCnapNamePresentation; 151cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville } 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return Call that owns this Connection, or null if none 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract Call getCall(); 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Connection create time in currentTimeMillis() format 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Basically, set when object is created. 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Effectively, when an incoming call starts ringing or an 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * outgoing call starts dialing 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 164e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public long getCreateTime() { 165e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mCreateTime; 166e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Connection connect time in currentTimeMillis() format. 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * For outgoing calls: Begins at (DIALING|ALERTING) -> ACTIVE transition. 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * For incoming calls: Begins at (INCOMING|WAITING) -> ACTIVE transition. 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns 0 before then. 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 174e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public long getConnectTime() { 175e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mConnectTime; 176e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 17931b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn * Sets the Connection connect time in currentTimeMillis() format. 18031b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn * 18131b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn * @param connectTime the new connect time. 18231b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn */ 18331b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn public void setConnectTime(long connectTime) { 18431b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn mConnectTime = connectTime; 18531b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn } 18631b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn 18731b502cb274be3c20b993d51192b56f0e7a9ae09Tyler Gunn /** 188a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Connection connect time in elapsedRealtime() format. 189a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * For outgoing calls: Begins at (DIALING|ALERTING) -> ACTIVE transition. 190a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * For incoming calls: Begins at (INCOMING|WAITING) -> ACTIVE transition. 191a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Returns 0 before then. 192a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 193e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public long getConnectTimeReal() { 194e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mConnectTimeReal; 195e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 196a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 197a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Disconnect time in currentTimeMillis() format. 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * The time when this Connection makes a transition into ENDED or FAIL. 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns 0 before then. 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract long getDisconnectTime(); 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the number of milliseconds the call has been connected, 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * or 0 if the call has never connected. 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If the call is still connected, then returns the elapsed 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * time since connect. 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 210e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public long getDurationMillis() { 211e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam if (mConnectTimeReal == 0) { 212e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return 0; 213e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } else if (mDuration == 0) { 214e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return SystemClock.elapsedRealtime() - mConnectTimeReal; 215e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } else { 216e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mDuration; 217e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 218e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 221a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * The time when this Connection last transitioned into HOLDING 222a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * in elapsedRealtime() format. 223a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Returns 0, if it has never made a transition into HOLDING. 224a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 225e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public long getHoldingStartTime() { 226e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mHoldingStartTime; 227e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 228a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 229a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If this connection is HOLDING, return the number of milliseconds 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * that it has been on hold for (approximately). 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If this connection is in any other state, return 0. 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract long getHoldDurationMillis(); 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 238b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen * Returns call disconnect cause. Values are defined in 239b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen * {@link android.telephony.DisconnectCause}. If the call is not yet 240b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen * disconnected, NOT_DISCONNECTED is returned. 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 242b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen public abstract int getDisconnectCause(); 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true of this connection originated elsewhere 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * ("MT" or mobile terminated; another party called this terminal) 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * or false if this call originated here (MO or mobile originated). 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 249e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public boolean isIncoming() { 250e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mIsIncoming; 251e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If this Connection is connected, then it is associated with 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a Call. 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns getCall().getState() or Call.State.IDLE if not 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * connected 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Call.State getState() { 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Call c; 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville c = getCall(); 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (c == null) { 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return Call.State.IDLE; 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return c.getState(); 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2734be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam * If this connection went through handover return the state of the 2744be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam * call that contained this connection before handover. 2754be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam */ 2764be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam public Call.State getStateBeforeHandover() { 2774be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam return mPreHandoverState; 2784be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam } 2794be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam 2804be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam /** 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * isAlive() 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the connection isn't disconnected 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (could be active, holding, ringing, dialing, etc) 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isAlive() { 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return getState().isAlive(); 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if Connection is connected and is INCOMING or WAITING 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isRinging() { 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return getState().isRinging(); 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return the userdata set in setUserData() 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Object getUserData() { 30422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mUserData; 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param userdata user can store an any userdata in the Connection object. 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setUserData(Object userdata) { 31222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mUserData = userdata; 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Hangup individual Connection 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract void hangup() throws CallStateException; 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Separate this call from its owner Call and assigns it to a new Call 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (eg if it is currently part of a Conference call 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * TODO: Throw exception? Does GSM require error display on failure here? 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract void separate() throws CallStateException; 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public enum PostDialState { 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville NOT_STARTED, /* The post dial string playback hasn't 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville been started, or this call is not yet 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville connected, or this is an incoming call */ 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville STARTED, /* The post dial string playback has begun */ 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville WAIT, /* The post dial string playback is waiting for a 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville call to proceedAfterWaitChar() */ 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville WILD, /* The post dial string playback is waiting for a 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville call to proceedAfterWildChar() */ 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville COMPLETE, /* The post dial string playback is complete */ 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CANCELLED, /* The post dial string playback was cancelled 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville with cancelPostDial() */ 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PAUSE /* The post dial string playback is pausing for a 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville call to processNextPostDialChar*/ 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void clearUserData(){ 34422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mUserData = null; 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3470b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton public final void addPostDialListener(PostDialListener listener) { 3480b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton if (!mPostDialListeners.contains(listener)) { 3490b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton mPostDialListeners.add(listener); 3500b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton } 3510b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton } 3520b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton 3530b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton protected final void clearPostDialListeners() { 3540b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton mPostDialListeners.clear(); 3550b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton } 3560b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton 3570b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton protected final void notifyPostDialListeners() { 3580b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton if (getPostDialState() == PostDialState.WAIT) { 3590b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton for (PostDialListener listener : new ArrayList<>(mPostDialListeners)) { 3600b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton listener.onPostDialWait(); 3610b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton } 3620b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton } 3630b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton } 3640b9246d6254bed6f625fa9c551f7f9dcc33d4e38Evan Charlton 3654567a0789e9966929c71af9a2c3866582c85c9e0Nancy Chen protected final void notifyPostDialListenersNextChar(char c) { 3664567a0789e9966929c71af9a2c3866582c85c9e0Nancy Chen for (PostDialListener listener : new ArrayList<>(mPostDialListeners)) { 3674567a0789e9966929c71af9a2c3866582c85c9e0Nancy Chen listener.onPostDialChar(c); 3684567a0789e9966929c71af9a2c3866582c85c9e0Nancy Chen } 3694567a0789e9966929c71af9a2c3866582c85c9e0Nancy Chen } 3704567a0789e9966929c71af9a2c3866582c85c9e0Nancy Chen 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract PostDialState getPostDialState(); 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the portion of the post dial string that has not 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * yet been dialed, or "" if none 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract String getRemainingPostDialString(); 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See Phone.setOnPostDialWaitCharacter() 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract void proceedAfterWaitChar(); 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See Phone.setOnPostDialWildCharacter() 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract void proceedAfterWildChar(String str); 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Cancel any post 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract void cancelPostDial(); 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the caller id presentation type for incoming and waiting calls 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return one of PRESENTATION_* 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract int getNumberPresentation(); 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the User to User Signaling (UUS) information associated with 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * incoming and waiting calls 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return UUSInfo containing the UUS userdata. 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract UUSInfo getUUSInfo(); 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4080742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela * Returns the CallFail reason provided by the RIL with the result of 4090742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela * RIL_REQUEST_LAST_CALL_FAIL_CAUSE 4100742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela */ 4110742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela public abstract int getPreciseDisconnectCause(); 4120742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela 4130742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela /** 414a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Returns the original Connection instance associated with 415a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * this Connection 416a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 417e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public Connection getOrigConnection() { 418e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam return mOrigConnection; 419e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 420a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 421a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 422a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Returns whether the original ImsPhoneConnection was a member 423a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * of a conference call 424a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @return valid only when getOrigConnection() is not null 425a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 426a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public abstract boolean isMultiparty(); 427a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 428e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public void migrateFrom(Connection c) { 429e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam if (c == null) return; 430e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mListeners = c.mListeners; 431e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mAddress = c.getAddress(); 432e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mNumberPresentation = c.getNumberPresentation(); 433e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mDialString = c.getOrigDialString(); 434e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mCnapName = c.getCnapName(); 435e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mCnapNamePresentation = c.getCnapNamePresentation(); 436e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mIsIncoming = c.isIncoming(); 437e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mCreateTime = c.getCreateTime(); 438e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mConnectTime = c.getConnectTime(); 439e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mConnectTimeReal = c.getConnectTimeReal(); 440e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mHoldingStartTime = c.getHoldingStartTime(); 441e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mOrigConnection = c.getOrigConnection(); 442e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 443e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam 444a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 44564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Assign a listener to be notified of state changes. 44664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 44764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @param listener A listener. 44864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 44964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public final void addListener(Listener listener) { 45064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn mListeners.add(listener); 45164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 45264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 45364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 45464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Removes a listener. 45564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 45664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @param listener A listener. 45764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 45864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public final void removeListener(Listener listener) { 45964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn mListeners.remove(listener); 46064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 46164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 46264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 46364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Returns the current video state of the connection. 46464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 46564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @return The video state of the connection. 46664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 46764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public int getVideoState() { 46864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn return mVideoState; 46964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 47064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 47164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 47264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Returns the local video capability state for the connection. 47364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 47464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @return {@code True} if the connection has local video capabilities. 47564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 47664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public boolean isLocalVideoCapable() { 47764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn return mLocalVideoCapable; 47864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 47964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 48064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 48164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Returns the remote video capability state for the connection. 48264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 48364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @return {@code True} if the connection has remote video capabilities. 48464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 48564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public boolean isRemoteVideoCapable() { 48664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn return mRemoteVideoCapable; 48764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 48864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 4892999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn /** 490dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn * Returns the {@link android.telecom.Connection.VideoProvider} for the connection. 4912999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn * 492dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn * @return The {@link android.telecom.Connection.VideoProvider}. 4932999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn */ 494dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn public android.telecom.Connection.VideoProvider getVideoProvider() { 495d5c5a168b4f5806701a4d146309c996acca7183dIhab Awad return mVideoProvider; 4962999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn } 49764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 49864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 4997fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn * Returns the audio-quality for the connection. 5007fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn * 5017fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn * @return The audio quality for the connection. 5027fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn */ 5037fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn public int getAudioQuality() { 5047fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn return mAudioQuality; 5057fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn } 5067fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn 5077fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn /** 50864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Sets the videoState for the current connection and reports the changes to all listeners. 509dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn * Valid video states are defined in {@link android.telecom.VideoProfile}. 51064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 51164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @return The video state. 51264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 51364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void setVideoState(int videoState) { 51464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn mVideoState = videoState; 51564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn for (Listener l : mListeners) { 51664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn l.onVideoStateChanged(mVideoState); 51764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 51864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 51964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 52064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 52164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Sets whether video capability is present locally. 52264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 52364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @param capable {@code True} if video capable. 52464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 52564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void setLocalVideoCapable(boolean capable) { 52664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn mLocalVideoCapable = capable; 52764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn for (Listener l : mListeners) { 52864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn l.onLocalVideoCapabilityChanged(mLocalVideoCapable); 52964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 53064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 53164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 53264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 53364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * Sets whether video capability is present remotely. 53464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * 53564e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn * @param capable {@code True} if video capable. 53664e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn */ 53764e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn public void setRemoteVideoCapable(boolean capable) { 53864e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn mRemoteVideoCapable = capable; 53964e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn for (Listener l : mListeners) { 54064e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn l.onRemoteVideoCapabilityChanged(mRemoteVideoCapable); 54164e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 54264e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn } 54364e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn 54464e62340aae85179a6468ccac4a401900eb4dc2fTyler Gunn /** 5457fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn * Set the audio quality for the connection. 5467fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn * 5477fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn * @param audioQuality The audio quality. 5487fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn */ 5497fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn public void setAudioQuality(int audioQuality) { 5507fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn mAudioQuality = audioQuality; 5517fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn for (Listener l : mListeners) { 5527fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn l.onAudioQualityChanged(mAudioQuality); 5537fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn } 5547fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn } 5557fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn 5567fa8ac39602ee9841dfcb0fb5c5f4d401925f8b5Tyler Gunn /** 557dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn * Sets the {@link android.telecom.Connection.VideoProvider} for the connection. 5582999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn * 559d5c5a168b4f5806701a4d146309c996acca7183dIhab Awad * @param videoProvider The video call provider. 5602999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn */ 561dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunn public void setVideoProvider(android.telecom.Connection.VideoProvider videoProvider) { 562d5c5a168b4f5806701a4d146309c996acca7183dIhab Awad mVideoProvider = videoProvider; 5632999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn for (Listener l : mListeners) { 564d5c5a168b4f5806701a4d146309c996acca7183dIhab Awad l.onVideoProviderChanged(mVideoProvider); 5652999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn } 5662999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn } 5672999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn 5682d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying public void setConverted(String oriNumber) { 5692d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying mNumberConverted = true; 5702d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying mConvertedNumber = mAddress; 5712d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying mAddress = oriNumber; 5722d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying mDialString = oriNumber; 5732d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying } 5742d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying 5752999afbcfeab69bf7473e1b9bcabb1c9c6935b19Tyler Gunn /** 576f53559f13dc272115f27f3b23955933da45ce127Tyler Gunn * Notifies listeners of a change to conference participant(s). 577fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn * 578f53559f13dc272115f27f3b23955933da45ce127Tyler Gunn * @param conferenceParticipants The participant(s). 579fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn */ 580f53559f13dc272115f27f3b23955933da45ce127Tyler Gunn public void updateConferenceParticipants(List<ConferenceParticipant> conferenceParticipants) { 581fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn for (Listener l : mListeners) { 582f53559f13dc272115f27f3b23955933da45ce127Tyler Gunn l.onConferenceParticipantsChanged(conferenceParticipants); 583fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn } 584fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn } 585fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn 586fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn /** 587d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn * Notifies this Connection of a request to disconnect a participant of the conference managed 588d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn * by the connection. 589d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn * 590d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn * @param endpoint the {@link Uri} of the participant to disconnect. 591d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn */ 592d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn public void onDisconnectConferenceParticipant(Uri endpoint) { 593d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn } 594d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn 595d7f4ed8ac190763dce7e57b737caa44654b4592aTyler Gunn /** 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Build a human representation of a connection instance, suitable for debugging. 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Don't log personal stuff unless in debug mode. 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return a string representing the internal state of this connection. 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String toString() { 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville StringBuilder str = new StringBuilder(128); 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 60399c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (Rlog.isLoggable(LOG_TAG, Log.DEBUG)) { 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville str.append("addr: " + getAddress()) 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" pres.: " + getNumberPresentation()) 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" dial: " + getOrigDialString()) 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" postdial: " + getRemainingPostDialString()) 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" cnap name: " + getCnapName()) 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append("(" + getCnapNamePresentation() + ")"); 6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville str.append(" incoming: " + isIncoming()) 6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" state: " + getState()) 6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" post dial state: " + getPostDialState()); 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return str.toString(); 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 617