Connection.java revision 4567a0789e9966929c71af9a2c3866582c85c9e0
1e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee/* 2e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Copyright (C) 2006 The Android Open Source Project 3e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 4e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Licensed under the Apache License, Version 2.0 (the "License"); 5e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * you may not use this file except in compliance with the License. 6e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * You may obtain a copy of the License at 7e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 8e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * http://www.apache.org/licenses/LICENSE-2.0 9e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 10e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Unless required by applicable law or agreed to in writing, software 11e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * distributed under the License is distributed on an "AS IS" BASIS, 12e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * See the License for the specific language governing permissions and 14e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * limitations under the License. 15e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee */ 16e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 177940e44f4517de5e2634a7e07d58d0fb26160513Brian Carlstrompackage com.android.internal.telephony; 184f6ad8ab428038129b2d0d6c40b7fd625cca15e1Ian Rogers 190c7abda482f53db3d153c073d1c7a145f84e0626Ian Rogersimport android.net.Uri; 2092cf83e001357329cbf41fa15a6e053fab6f4933Nicolas Geoffrayimport android.os.SystemClock; 2196faf5b363d922ae91cf25404dee0e87c740c7c5Ian Rogersimport android.telecom.ConferenceParticipant; 228d3a117b374352a1853fae9b7306afeaaa9e3b91Ian Rogersimport android.telephony.Rlog; 235816ed48bc339c983b40dc493e96b97821ce7966Vladimir Markoimport android.util.Log; 245816ed48bc339c983b40dc493e96b97821ce7966Vladimir Marko 25c7f832061fea59fd6abd125f26c8ca1faec695a5Vladimir Markoimport java.lang.Override; 262730db03beee4d6687ddfb5000c33c0370fbc6ebVladimir Markoimport java.util.ArrayList; 270c7abda482f53db3d153c073d1c7a145f84e0626Ian Rogersimport java.util.List; 280c7abda482f53db3d153c073d1c7a145f84e0626Ian Rogersimport java.util.Set; 292e589aa58a1372909f95e731fd6b8895f6359c3aVladimir Markoimport java.util.concurrent.CopyOnWriteArraySet; 300c7abda482f53db3d153c073d1c7a145f84e0626Ian Rogers 31e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee/** 32e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * {@hide} 3306606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko */ 3406606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Markopublic abstract class Connection { 3506606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public interface PostDialListener { 3606606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko void onPostDialWait(); 3706606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko void onPostDialChar(char c); 3806606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko } 3906606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko 40107c31e598b649a8bb8d959d6a0377937e63e624Ian Rogers /** 4106606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko * Listener interface for events related to the connection which should be reported to the 4206606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko * {@link android.telecom.Connection}. 4306606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko */ 4406606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public interface Listener { 4506606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public void onVideoStateChanged(int videoState); 4606606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public void onLocalVideoCapabilityChanged(boolean capable); 4706606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public void onRemoteVideoCapabilityChanged(boolean capable); 4806606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public void onVideoProviderChanged( 4906606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko android.telecom.Connection.VideoProvider videoProvider); 5006606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public void onAudioQualityChanged(int audioQuality); 5106606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko public void onConferenceParticipantsChanged(List<ConferenceParticipant> participants); 5206606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko } 5306606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko 5406606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko /** 552ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom * Base listener implementation. 564ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee */ 574ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public abstract static class ListenerBase implements Listener { 584ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee @Override 594ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public void onVideoStateChanged(int videoState) {} 601fd3346740dfb7f47be9922312b68a4227fada96buzbee @Override 614ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public void onLocalVideoCapabilityChanged(boolean capable) {} 621fd3346740dfb7f47be9922312b68a4227fada96buzbee @Override 634ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public void onRemoteVideoCapabilityChanged(boolean capable) {} 644ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee @Override 654ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public void onVideoProviderChanged( 661fd3346740dfb7f47be9922312b68a4227fada96buzbee android.telecom.Connection.VideoProvider videoProvider) {} 674ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee @Override 681fd3346740dfb7f47be9922312b68a4227fada96buzbee public void onAudioQualityChanged(int audioQuality) {} 694ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee @Override 704ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public void onConferenceParticipantsChanged(List<ConferenceParticipant> participants) {} 714ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee } 724ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee 734ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public static final int AUDIO_QUALITY_STANDARD = 1; 744ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public static final int AUDIO_QUALITY_HIGH_DEFINITION = 2; 752ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom 76b48819db07f9a0992a72173380c24249d7fc648abuzbee //Caller Name Display 778dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko protected String mCnapName; 781fd3346740dfb7f47be9922312b68a4227fada96buzbee protected int mCnapNamePresentation = PhoneConstants.PRESENTATION_ALLOWED; 798dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko protected String mAddress; // MAY BE NULL!!! 8002031b185b4653e6c72e21f7a51238b903f6d638buzbee protected String mDialString; // outgoing calls only 8102031b185b4653e6c72e21f7a51238b903f6d638buzbee protected int mNumberPresentation = PhoneConstants.PRESENTATION_ALLOWED; 823c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe protected boolean mIsIncoming; 833c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe /* 843c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe * These time/timespan values are based on System.currentTimeMillis(), 853c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe * i.e., "wall clock" time. 863c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe */ 873c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe protected long mCreateTime; 883c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe protected long mConnectTime; 893c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe /* 903c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe * These time/timespan values are based on SystemClock.elapsedRealTime(), 913c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe * i.e., time since boot. They are appropriate for comparison and 923c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe * calculating deltas. 933c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe */ 943c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe protected long mConnectTimeReal; 953c12c512faf6837844d5465b23b9410889e5eb11Andreas Gampe protected long mDuration; 96252254b130067cd7a5071865e793966871ae0246buzbee protected long mHoldingStartTime; // The time when the Connection last transitioned 97252254b130067cd7a5071865e793966871ae0246buzbee // into HOLDING 98252254b130067cd7a5071865e793966871ae0246buzbee protected Connection mOrigConnection; 99252254b130067cd7a5071865e793966871ae0246buzbee private List<PostDialListener> mPostDialListeners = new ArrayList<>(); 100252254b130067cd7a5071865e793966871ae0246buzbee public Set<Listener> mListeners = new CopyOnWriteArraySet<>(); 101252254b130067cd7a5071865e793966871ae0246buzbee 102252254b130067cd7a5071865e793966871ae0246buzbee protected boolean mNumberConverted = false; 103252254b130067cd7a5071865e793966871ae0246buzbee protected String mConvertedNumber; 104252254b130067cd7a5071865e793966871ae0246buzbee 105252254b130067cd7a5071865e793966871ae0246buzbee private static String LOG_TAG = "Connection"; 106252254b130067cd7a5071865e793966871ae0246buzbee 107252254b130067cd7a5071865e793966871ae0246buzbee Object mUserData; 108252254b130067cd7a5071865e793966871ae0246buzbee private int mVideoState; 109252254b130067cd7a5071865e793966871ae0246buzbee private boolean mLocalVideoCapable; 110252254b130067cd7a5071865e793966871ae0246buzbee private boolean mRemoteVideoCapable; 111252254b130067cd7a5071865e793966871ae0246buzbee private int mAudioQuality; 112252254b130067cd7a5071865e793966871ae0246buzbee private android.telecom.Connection.VideoProvider mVideoProvider; 113252254b130067cd7a5071865e793966871ae0246buzbee public Call.State mPreHandoverState = Call.State.IDLE; 114252254b130067cd7a5071865e793966871ae0246buzbee 115252254b130067cd7a5071865e793966871ae0246buzbee /* Instance Methods */ 116cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee 117df62950e7a32031b82360c407d46a37b94188fbbBrian Carlstrom /** 118fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * Gets address (e.g. phone number) associated with connection. 119252254b130067cd7a5071865e793966871ae0246buzbee * TODO: distinguish reasons for unavailability 120252254b130067cd7a5071865e793966871ae0246buzbee * 121252254b130067cd7a5071865e793966871ae0246buzbee * @return address or null if unavailable 122cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee */ 123cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee 1242ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom public String getAddress() { 1251fd3346740dfb7f47be9922312b68a4227fada96buzbee return mAddress; 126b48819db07f9a0992a72173380c24249d7fc648abuzbee } 1278dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko 1288dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko /** 1298dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko * Gets CNAP name associated with connection. 130fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * @return cnap name or null if unavailable 131b48819db07f9a0992a72173380c24249d7fc648abuzbee */ 132a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public String getCnapName() { 133b48819db07f9a0992a72173380c24249d7fc648abuzbee return mCnapName; 134a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1358dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko 136a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 1378dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko * Get original dial string. 138a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * @return original dial string or null if unavailable 139fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee */ 1408dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko public String getOrigDialString(){ 141fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee return null; 1428dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko } 143a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 1448dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko /** 1458dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko * Gets CNAP presentation associated with connection. 146a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * @return cnap name or null if unavailable 1478dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko */ 1488dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko 149a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public int getCnapNamePresentation() { 1508dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko return mCnapNamePresentation; 151a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1521fd3346740dfb7f47be9922312b68a4227fada96buzbee 1538dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko /** 154a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * @return Call that owns this Connection, or null if none 155a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 156fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee public abstract Call getCall(); 157a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 1588dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko /** 15931a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * Connection create time in currentTimeMillis() format 16031a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * Basically, set when object is created. 16131a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * Effectively, when an incoming call starts ringing or an 162b5d09b2f87202bc132ac3991d4b6d71f4f6d9264Ian Rogers * outgoing call starts dialing 16331a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee */ 1641fd3346740dfb7f47be9922312b68a4227fada96buzbee public long getCreateTime() { 1652ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom return mCreateTime; 1668dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko } 1678dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko 16831a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee /** 169a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Connection connect time in currentTimeMillis() format. 170fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * For outgoing calls: Begins at (DIALING|ALERTING) -> ACTIVE transition. 171a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * For incoming calls: Begins at (INCOMING|WAITING) -> ACTIVE transition. 172a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns 0 before then. 173b48819db07f9a0992a72173380c24249d7fc648abuzbee */ 17431a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee public long getConnectTime() { 17531a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee return mConnectTime; 17631a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee } 1775de3494e4297c0d480409da3fecee39173f1d4e1buzbee 1785de3494e4297c0d480409da3fecee39173f1d4e1buzbee /** 1795de3494e4297c0d480409da3fecee39173f1d4e1buzbee * Connection connect time in elapsedRealtime() format. 1805de3494e4297c0d480409da3fecee39173f1d4e1buzbee * For outgoing calls: Begins at (DIALING|ALERTING) -> ACTIVE transition. 1815de3494e4297c0d480409da3fecee39173f1d4e1buzbee * For incoming calls: Begins at (INCOMING|WAITING) -> ACTIVE transition. 1822ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom * Returns 0 before then. 183a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 184a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public long getConnectTimeReal() { 1851fd3346740dfb7f47be9922312b68a4227fada96buzbee return mConnectTimeReal; 186a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 187a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 188a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 189a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Disconnect time in currentTimeMillis() format. 190a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * The time when this Connection makes a transition into ENDED or FAIL. 1911fd3346740dfb7f47be9922312b68a4227fada96buzbee * Returns 0 before then. 192a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 193a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public abstract long getDisconnectTime(); 194a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 195a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 196a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns the number of milliseconds the call has been connected, 197a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * or 0 if the call has never connected. 198a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * If the call is still connected, then returns the elapsed 199a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * time since connect. 200a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 201a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public long getDurationMillis() { 202a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (mConnectTimeReal == 0) { 2034ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee return 0; 2040d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee } else if (mDuration == 0) { 2050d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee return SystemClock.elapsedRealtime() - mConnectTimeReal; 2064ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee } else { 207a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee return mDuration; 2080b1191cfece83f6f8d4101575a06555a2d13387aBill Buzbee } 2090b1191cfece83f6f8d4101575a06555a2d13387aBill Buzbee } 210a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 211a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 212a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * The time when this Connection last transitioned into HOLDING 213a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * in elapsedRealtime() format. 214a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns 0, if it has never made a transition into HOLDING. 215fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee */ 216a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public long getHoldingStartTime() { 217a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee return mHoldingStartTime; 218a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 219a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 220a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 221a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * If this connection is HOLDING, return the number of milliseconds 222a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * that it has been on hold for (approximately). 223cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * If this connection is in any other state, return 0. 224a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 225a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 226cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee public abstract long getHoldDurationMillis(); 227a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 228a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 229cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * Returns call disconnect cause. Values are defined in 230a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * {@link android.telephony.DisconnectCause}. If the call is not yet 231a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * disconnected, NOT_DISCONNECTED is returned. 232cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee */ 233a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public abstract int getDisconnectCause(); 2348320f3867c02bae9bef6cdab267820cb7b412781buzbee 235fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /** 2368320f3867c02bae9bef6cdab267820cb7b412781buzbee * Returns true of this connection originated elsewhere 237a5b3024aed77a8204d5fb48ba7f763fb8c60fa76Bill Buzbee * ("MT" or mobile terminated; another party called this terminal) 238fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * or false if this call originated here (MO or mobile originated). 239a5b3024aed77a8204d5fb48ba7f763fb8c60fa76Bill Buzbee */ 240a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public boolean isIncoming() { 241cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee return mIsIncoming; 242a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 243a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 244a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 245a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * If this Connection is connected, then it is associated with 246fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * a Call. 247a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * 248a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns getCall().getState() or Call.State.IDLE if not 2491fd3346740dfb7f47be9922312b68a4227fada96buzbee * connected 25002031b185b4653e6c72e21f7a51238b903f6d638buzbee */ 2511fd3346740dfb7f47be9922312b68a4227fada96buzbee public Call.State getState() { 25202031b185b4653e6c72e21f7a51238b903f6d638buzbee Call c; 253107c31e598b649a8bb8d959d6a0377937e63e624Ian Rogers 254107c31e598b649a8bb8d959d6a0377937e63e624Ian Rogers c = getCall(); 255a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 256fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee if (c == null) { 257a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee return Call.State.IDLE; 258a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else { 259a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee return c.getState(); 260a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 261b48819db07f9a0992a72173380c24249d7fc648abuzbee } 2628dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko 263a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 264b48819db07f9a0992a72173380c24249d7fc648abuzbee * If this connection went through handover return the state of the 2658dea81ca9c0201ceaa88086b927a5838a06a3e69Vladimir Marko * call that contained this connection before handover. 266a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 2675de3494e4297c0d480409da3fecee39173f1d4e1buzbee public Call.State getStateBeforeHandover() { 2685de3494e4297c0d480409da3fecee39173f1d4e1buzbee return mPreHandoverState; 2692ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom } 270da7a69b3fa7bb22d087567364b7eb5a75824efd8Razvan A Lupusoru 271fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /** 2721fd3346740dfb7f47be9922312b68a4227fada96buzbee * isAlive() 273a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * 274fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * @return true if the connection isn't disconnected 275b5860fb459f1ed71f39d8a87b45bee6727d79fe8buzbee * (could be active, holding, ringing, dialing, etc) 276a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 2779c044ce5f76e9bfa17c4c1979e9f8c99ae100695buzbee public boolean 278a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee isAlive() { 2791fd3346740dfb7f47be9922312b68a4227fada96buzbee return getState().isAlive(); 280a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 2811fd3346740dfb7f47be9922312b68a4227fada96buzbee 282a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 283a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns true if Connection is connected and is INCOMING or WAITING 2841fd3346740dfb7f47be9922312b68a4227fada96buzbee */ 2855de3494e4297c0d480409da3fecee39173f1d4e1buzbee public boolean 286a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee isRinging() { 287a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee return getState().isRinging(); 288fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 289fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee 2901fd3346740dfb7f47be9922312b68a4227fada96buzbee /** 291a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * 292a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * @return the userdata set in setUserData() 2935de3494e4297c0d480409da3fecee39173f1d4e1buzbee */ 2945de3494e4297c0d480409da3fecee39173f1d4e1buzbee public Object getUserData() { 2957a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee return mUserData; 2967a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee } 2977a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee 2987a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee /** 2997a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee * 3007a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee * @param userdata user can store an any userdata in the Connection object. 3017a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee */ 3027a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee public void setUserData(Object userdata) { 3037a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee mUserData = userdata; 3047a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee } 3057a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee 3067a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee /** 3077a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee * Hangup individual Connection 3085de3494e4297c0d480409da3fecee39173f1d4e1buzbee */ 3092ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom public abstract void hangup() throws CallStateException; 310a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 3111fd3346740dfb7f47be9922312b68a4227fada96buzbee /** 312fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * Separate this call from its owner Call and assigns it to a new Call 3131fd3346740dfb7f47be9922312b68a4227fada96buzbee * (eg if it is currently part of a Conference call 3141fd3346740dfb7f47be9922312b68a4227fada96buzbee * TODO: Throw exception? Does GSM require error display on failure here? 3151fd3346740dfb7f47be9922312b68a4227fada96buzbee */ 3161fd3346740dfb7f47be9922312b68a4227fada96buzbee public abstract void separate() throws CallStateException; 3171fd3346740dfb7f47be9922312b68a4227fada96buzbee 3181fd3346740dfb7f47be9922312b68a4227fada96buzbee public enum PostDialState { 3191fd3346740dfb7f47be9922312b68a4227fada96buzbee NOT_STARTED, /* The post dial string playback hasn't 320da7a69b3fa7bb22d087567364b7eb5a75824efd8Razvan A Lupusoru been started, or this call is not yet 3211fd3346740dfb7f47be9922312b68a4227fada96buzbee connected, or this is an incoming call */ 3221fd3346740dfb7f47be9922312b68a4227fada96buzbee STARTED, /* The post dial string playback has begun */ 323fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee WAIT, /* The post dial string playback is waiting for a 324a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee call to proceedAfterWaitChar() */ 3251fd3346740dfb7f47be9922312b68a4227fada96buzbee WILD, /* The post dial string playback is waiting for a 3261fd3346740dfb7f47be9922312b68a4227fada96buzbee call to proceedAfterWildChar() */ 3277a11ab09f93f54b1c07c0bf38dd65ed322e86bc6buzbee COMPLETE, /* The post dial string playback is complete */ 3281fd3346740dfb7f47be9922312b68a4227fada96buzbee CANCELLED, /* The post dial string playback was cancelled 3291fd3346740dfb7f47be9922312b68a4227fada96buzbee with cancelPostDial() */ 330a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee PAUSE /* The post dial string playback is pausing for a 3311fd3346740dfb7f47be9922312b68a4227fada96buzbee call to processNextPostDialChar*/ 332fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 333fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee 334a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public void clearUserData(){ 335a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee mUserData = null; 336a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 3371fd3346740dfb7f47be9922312b68a4227fada96buzbee 338d91d6d6a80748f277fd938a412211e5af28913b1Ian Rogers public final void addPostDialListener(PostDialListener listener) { 339d91d6d6a80748f277fd938a412211e5af28913b1Ian Rogers if (!mPostDialListeners.contains(listener)) { 340d91d6d6a80748f277fd938a412211e5af28913b1Ian Rogers mPostDialListeners.add(listener); 341a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 342a5b3024aed77a8204d5fb48ba7f763fb8c60fa76Bill Buzbee } 34306606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko 34406606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko protected final void clearPostDialListeners() { 34506606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko mPostDialListeners.clear(); 34606606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko } 34706606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko 34806606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko protected final void notifyPostDialListeners() { 34906606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko if (getPostDialState() == PostDialState.WAIT) { 3505de3494e4297c0d480409da3fecee39173f1d4e1buzbee for (PostDialListener listener : new ArrayList<>(mPostDialListeners)) { 3515de3494e4297c0d480409da3fecee39173f1d4e1buzbee listener.onPostDialWait(); 35231a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee } 35331a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee } 35431a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee } 35531a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee 3562ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom protected final void notifyPostDialListenersNextChar(char c) { 357fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee for (PostDialListener listener : new ArrayList<>(mPostDialListeners)) { 358fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee listener.onPostDialChar(c); 359fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 360fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 361a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 362a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public abstract PostDialState getPostDialState(); 36331a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee 36431a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee /** 36531a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * Returns the portion of the post dial string that has not 3662ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom * yet been dialed, or "" if none 367fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee */ 368fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee public abstract String getRemainingPostDialString(); 369fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee 370fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /** 3714ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee * See Phone.setOnPostDialWaitCharacter() 3724ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee */ 373fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee 37431a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee public abstract void proceedAfterWaitChar(); 375fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee 376fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /** 377fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * See Phone.setOnPostDialWildCharacter() 378fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee */ 379a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public abstract void proceedAfterWildChar(String str); 380fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /** 381a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Cancel any post 382a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 38331a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee public abstract void cancelPostDial(); 38431a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee 385a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko /** 386a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko * Returns the caller id presentation type for incoming and waiting calls 387a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko * @return one of PRESENTATION_* 388a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko */ 389a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko public abstract int getNumberPresentation(); 390a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko 391a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko /** 392a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko * Returns the User to User Signaling (UUS) information associated with 393a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko * incoming and waiting calls 394a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko * @return UUSInfo containing the UUS userdata. 395a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko */ 396a51a0b0300268b605e3ad71b0e87ff394032c5e7Vladimir Marko public abstract UUSInfo getUUSInfo(); 39731a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee 39831a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee /** 39931a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * Returns the CallFail reason provided by the RIL with the result of 40031a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * RIL_REQUEST_LAST_CALL_FAIL_CAUSE 40131a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee */ 4024ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee public abstract int getPreciseDisconnectCause(); 4032ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom 404a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 405fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * Returns the original Connection instance associated with 40683cc7ae96d4176533dd0391a1591d321b0a87f4fVladimir Marko * this Connection 407fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee */ 408fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee public Connection getOrigConnection() { 409fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee return mOrigConnection; 410b48819db07f9a0992a72173380c24249d7fc648abuzbee } 411fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee 412a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 413a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns whether the original ImsPhoneConnection was a member 41431a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * of a conference call 41531a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee * @return valid only when getOrigConnection() is not null 41631a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee */ 4172ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom public abstract boolean isMultiparty(); 4181fd3346740dfb7f47be9922312b68a4227fada96buzbee 4191fd3346740dfb7f47be9922312b68a4227fada96buzbee public void migrateFrom(Connection c) { 42031a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee if (c == null) return; 42131a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee mListeners = c.mListeners; 4222da882315a61072664f7ce3c212307342e907207Andreas Gampe mAddress = c.getAddress(); 423df62950e7a32031b82360c407d46a37b94188fbbBrian Carlstrom mNumberPresentation = c.getNumberPresentation(); 424df62950e7a32031b82360c407d46a37b94188fbbBrian Carlstrom mDialString = c.getOrigDialString(); 425df62950e7a32031b82360c407d46a37b94188fbbBrian Carlstrom mCnapName = c.getCnapName(); 426df62950e7a32031b82360c407d46a37b94188fbbBrian Carlstrom mCnapNamePresentation = c.getCnapNamePresentation(); 427e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee mIsIncoming = c.isIncoming(); 428e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee mCreateTime = c.getCreateTime(); 4292da882315a61072664f7ce3c212307342e907207Andreas Gampe mConnectTime = c.getConnectTime(); 4302da882315a61072664f7ce3c212307342e907207Andreas Gampe mConnectTimeReal = c.getConnectTimeReal(); 4312da882315a61072664f7ce3c212307342e907207Andreas Gampe mHoldingStartTime = c.getHoldingStartTime(); 4322da882315a61072664f7ce3c212307342e907207Andreas Gampe mOrigConnection = c.getOrigConnection(); 4332da882315a61072664f7ce3c212307342e907207Andreas Gampe } 4342da882315a61072664f7ce3c212307342e907207Andreas Gampe 4350d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee /** 4362da882315a61072664f7ce3c212307342e907207Andreas Gampe * Assign a listener to be notified of state changes. 4370d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee * 4380d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee * @param listener A listener. 4390d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee */ 440aad94383fc41e8f8770f0b2144f766a2ffa772e7buzbee public final void addListener(Listener listener) { 441a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee mListeners.add(listener); 442a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 443a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 444e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee /** 445e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Removes a listener. 446e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 4472ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom * @param listener A listener. 4481fd3346740dfb7f47be9922312b68a4227fada96buzbee */ 4491fd3346740dfb7f47be9922312b68a4227fada96buzbee public final void removeListener(Listener listener) { 450fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee mListeners.remove(listener); 4512da882315a61072664f7ce3c212307342e907207Andreas Gampe } 452fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee 453a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 454a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns the current video state of the connection. 4551fd3346740dfb7f47be9922312b68a4227fada96buzbee * 456fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * @return The video state of the connection. 45749161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao */ 45849161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao public int getVideoState() { 45949161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao return mVideoState; 4601fd3346740dfb7f47be9922312b68a4227fada96buzbee } 4618b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers 4628b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers /** 4638b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers * Returns the local video capability state for the connection. 46449161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao * 46549161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao * @return {@code True} if the connection has local video capabilities. 46649161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao */ 4678b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers public boolean isLocalVideoCapable() { 46849161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao return mLocalVideoCapable; 4690d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee } 47049161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao 471fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /** 472137e88f798857321f4007631fdf052d2830ec2c4Ian Rogers * Returns the remote video capability state for the connection. 4731fd3346740dfb7f47be9922312b68a4227fada96buzbee * 474fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * @return {@code True} if the connection has remote video capabilities. 47549161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao */ 47649161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao public boolean isRemoteVideoCapable() { 47749161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao return mRemoteVideoCapable; 4781fd3346740dfb7f47be9922312b68a4227fada96buzbee } 4798b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers 4808b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers /** 4818b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers * Returns the {@link android.telecom.Connection.VideoProvider} for the connection. 48249161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao * 48349161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao * @return The {@link android.telecom.Connection.VideoProvider}. 48449161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao */ 4858b2c0b9abc3f520495f4387ea040132ba85cae69Ian Rogers public android.telecom.Connection.VideoProvider getVideoProvider() { 48649161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao return mVideoProvider; 4870d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee } 48849161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao 489fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /** 490a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Returns the audio-quality for the connection. 491be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi * 492be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi * @return The audio quality for the connection. 493be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi */ 49449161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao public int getAudioQuality() { 495be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi return mAudioQuality; 496be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi } 497be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi 49849161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao /** 499be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi * Sets the videoState for the current connection and reports the changes to all listeners. 50049161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao * Valid video states are defined in {@link android.telecom.VideoProfile}. 501be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi * 50249161cef10a308aedada18e9aa742498d6e6c8c7Jeff Hao * @return The video state. 503be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi */ 504be1ca55db3362f5b100c4c65da5342fd299520bbHiroshi Yamauchi public void setVideoState(int videoState) { 505e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee mVideoState = videoState; 506e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee for (Listener l : mListeners) { 507e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee l.onVideoStateChanged(mVideoState); 5082ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom } 509862a76027076c341c26aa6cd4a30a7cdd6dc2143buzbee } 510a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 511862a76027076c341c26aa6cd4a30a7cdd6dc2143buzbee /** 512fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * Sets whether video capability is present locally. 5131fd3346740dfb7f47be9922312b68a4227fada96buzbee * 514a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * @param capable {@code True} if video capable. 515a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 516a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public void setLocalVideoCapable(boolean capable) { 517a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee mLocalVideoCapable = capable; 518a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee for (Listener l : mListeners) { 519a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee l.onLocalVideoCapabilityChanged(mLocalVideoCapable); 520fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 5211fd3346740dfb7f47be9922312b68a4227fada96buzbee } 522b046e16d8b8da318d6055f9308950131f1255e08buzbee 523b48819db07f9a0992a72173380c24249d7fc648abuzbee /** 524fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * Sets whether video capability is present remotely. 525b046e16d8b8da318d6055f9308950131f1255e08buzbee * 526b046e16d8b8da318d6055f9308950131f1255e08buzbee * @param capable {@code True} if video capable. 5276a58cb16d803c9a7b3a75ccac8be19dd9d4e520dDmitry Petrochenko */ 528fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee public void setRemoteVideoCapable(boolean capable) { 529b046e16d8b8da318d6055f9308950131f1255e08buzbee mRemoteVideoCapable = capable; 530e45fb9e7976c8462b94a58ad60b006b0eacec49fMatteo Franchin for (Listener l : mListeners) { 531b046e16d8b8da318d6055f9308950131f1255e08buzbee l.onRemoteVideoCapabilityChanged(mRemoteVideoCapable); 532fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 533b046e16d8b8da318d6055f9308950131f1255e08buzbee } 5341fd3346740dfb7f47be9922312b68a4227fada96buzbee 535b046e16d8b8da318d6055f9308950131f1255e08buzbee /** 5361fd3346740dfb7f47be9922312b68a4227fada96buzbee * Set the audio quality for the connection. 537fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * 538a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * @param audioQuality The audio quality. 539fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee */ 5400d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee public void setAudioQuality(int audioQuality) { 541fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee mAudioQuality = audioQuality; 542fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee for (Listener l : mListeners) { 5431fd3346740dfb7f47be9922312b68a4227fada96buzbee l.onAudioQualityChanged(mAudioQuality); 544a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 545a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 546a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 547e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee /** 5482da882315a61072664f7ce3c212307342e907207Andreas Gampe * Sets the {@link android.telecom.Connection.VideoProvider} for the connection. 5492da882315a61072664f7ce3c212307342e907207Andreas Gampe * 550fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * @param videoProvider The video call provider. 551a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 552a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public void setVideoProvider(android.telecom.Connection.VideoProvider videoProvider) { 553fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee mVideoProvider = videoProvider; 554a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee for (Listener l : mListeners) { 555fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee l.onVideoProviderChanged(mVideoProvider); 556fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 5571fd3346740dfb7f47be9922312b68a4227fada96buzbee } 558a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 559a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public void setConverted(String oriNumber) { 560e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee mNumberConverted = true; 5612da882315a61072664f7ce3c212307342e907207Andreas Gampe mConvertedNumber = mAddress; 562a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee mAddress = oriNumber; 563e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee mDialString = oriNumber; 564a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 565e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 566e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee /** 567e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Notifies listeners of a change to conference participant(s). 5682ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom * 569862a76027076c341c26aa6cd4a30a7cdd6dc2143buzbee * @param conferenceParticipants The participant(s). 570a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 571862a76027076c341c26aa6cd4a30a7cdd6dc2143buzbee public void updateConferenceParticipants(List<ConferenceParticipant> conferenceParticipants) { 572fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee for (Listener l : mListeners) { 5731fd3346740dfb7f47be9922312b68a4227fada96buzbee l.onConferenceParticipantsChanged(conferenceParticipants); 574fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee } 575df62950e7a32031b82360c407d46a37b94188fbbBrian Carlstrom } 576df62950e7a32031b82360c407d46a37b94188fbbBrian Carlstrom 577e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee /** 578a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Notifies this Connection of a request to disconnect a participant of the conference managed 579e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * by the connection. 580e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 5810d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee * @param endpoint the {@link Uri} of the participant to disconnect. 58202c8cc6d1312a2b55533f02f6369dc7c94672f90Brian Carlstrom */ 583a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee public void onDisconnectConferenceParticipant(Uri endpoint) { 584a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 585a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 586a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /** 587e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Build a human representation of a connection instance, suitable for debugging. 588e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Don't log personal stuff unless in debug mode. 589ff093b31d75658c3404f9b51ee45760f346f06d9Ian Rogers * @return a string representing the internal state of this connection. 590ff093b31d75658c3404f9b51ee45760f346f06d9Ian Rogers */ 5910d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee public String toString() { 592660188264dee3c8f3510e2e24c11816c6b60f197Andreas Gampe StringBuilder str = new StringBuilder(128); 5930d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee 5940d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee if (Rlog.isLoggable(LOG_TAG, Log.DEBUG)) { 5950d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee str.append("addr: " + getAddress()) 5960d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee .append(" pres.: " + getNumberPresentation()) 5970d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee .append(" dial: " + getOrigDialString()) 5980d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee .append(" postdial: " + getRemainingPostDialString()) 5990d82948094d9a198e01aa95f64012bdedd5b6fc9buzbee .append(" cnap name: " + getCnapName()) 6006459e7cb35ca83ffc2f266dddeb83673bc07ecd4buzbee .append("(" + getCnapNamePresentation() + ")"); 6012ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstrom } 60206606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko str.append(" incoming: " + isIncoming()) 60306606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko .append(" state: " + getState()) 60406606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko .append(" post dial state: " + getPostDialState()); 60506606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko return str.toString(); 60606606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko } 60706606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko} 60806606b9c4a1c00154ed15f719ad8ea994e54ee8eVladimir Marko