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 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties; 2096cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwaltimport android.net.NetworkCapabilities; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Bundle; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RemoteException; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.ServiceManager; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.CellInfo; 25a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.Rlog; 26a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.VoLteServiceState; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState; 28a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.SubscriptionManager; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.TelephonyManager; 300742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuelaimport android.telephony.PreciseCallState; 310742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuelaimport android.telephony.DisconnectCause; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.Call; 34a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.CallManager; 35a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.Phone; 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.ITelephonyRegistry; 37a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.PhoneConstants; 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 39ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport java.util.List; 40ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * broadcast intents 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class DefaultPhoneNotifier implements PhoneNotifier { 45d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville private static final String LOG_TAG = "DefaultPhoneNotifier"; 46d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville private static final boolean DBG = false; // STOPSHIP if true 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 48a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville protected ITelephonyRegistry mRegistry; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 50ec6e2f9f13bac23cdfa0de0a56826b21050b6487fionaxu public DefaultPhoneNotifier() { 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService( 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "telephony.registry")); 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 55cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyPhoneState(Phone sender) { 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Call ringingCall = sender.getRingingCall(); 58b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 59bd3158360ca73324921350a1c61336af7f9c6d8dShishir Agrawal int phoneId = sender.getPhoneId(); 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String incomingNumber = ""; 61bd3158360ca73324921350a1c61336af7f9c6d8dShishir Agrawal if (ringingCall != null && ringingCall.getEarliestConnection() != null) { 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville incomingNumber = ringingCall.getEarliestConnection().getAddress(); 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 657961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 66bd3158360ca73324921350a1c61336af7f9c6d8dShishir Agrawal mRegistry.notifyCallStateForPhoneId(phoneId, subId, 67a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville convertCallState(sender.getState()), incomingNumber); 68a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 69a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } catch (RemoteException ex) { 70a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // system process is dead 71a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 74cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyServiceState(Phone sender) { 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ServiceState ss = sender.getServiceState(); 77d1a60dfe521f376e3500946d5371f126dbd36767xinhe int phoneId = sender.getPhoneId(); 78b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 79d1a60dfe521f376e3500946d5371f126dbd36767xinhe 80a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.d(LOG_TAG, "nofityServiceState: mRegistry=" + mRegistry + " ss=" + ss 81d1a60dfe521f376e3500946d5371f126dbd36767xinhe + " sender=" + sender + " phondId=" + phoneId + " subId=" + subId); 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ss == null) { 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ss = new ServiceState(); 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ss.setStateOutOfService(); 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 877961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 88d1a60dfe521f376e3500946d5371f126dbd36767xinhe mRegistry.notifyServiceStateForPhoneId(phoneId, subId, ss); 897961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 95cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifySignalStrength(Phone sender) { 97bd3158360ca73324921350a1c61336af7f9c6d8dShishir Agrawal int phoneId = sender.getPhoneId(); 98b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 991a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu if (DBG) { 1001a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu // too chatty to log constantly 1011a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu Rlog.d(LOG_TAG, "notifySignalStrength: mRegistry=" + mRegistry 1021a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu + " ss=" + sender.getSignalStrength() + " sender=" + sender); 1031a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu } 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1057961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 106bd3158360ca73324921350a1c61336af7f9c6d8dShishir Agrawal mRegistry.notifySignalStrengthForPhoneId(phoneId, subId, 107bd3158360ca73324921350a1c61336af7f9c6d8dShishir Agrawal sender.getSignalStrength()); 1087961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 114cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyMessageWaitingChanged(Phone sender) { 116d1a60dfe521f376e3500946d5371f126dbd36767xinhe int phoneId = sender.getPhoneId(); 117b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 118d1a60dfe521f376e3500946d5371f126dbd36767xinhe 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1207961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 121d1a60dfe521f376e3500946d5371f126dbd36767xinhe mRegistry.notifyMessageWaitingChangedForPhoneId(phoneId, subId, 122a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sender.getMessageWaitingIndicator()); 1237961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 129cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyCallForwardingChanged(Phone sender) { 131b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1337961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 1346a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville mRegistry.notifyCallForwardingChangedForSubscriber(subId, 135a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sender.getCallForwardingIndicator()); 1367961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 142cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataActivity(Phone sender) { 144b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1467961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 1476a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville mRegistry.notifyDataActivityForSubscriber(subId, 148a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville convertDataActivityState(sender.getDataActivityState())); 1497961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 155cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(Phone sender, String reason, String apnType, 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.DataState state) { 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville doNotifyDataConnection(sender, reason, apnType, state); 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void doNotifyDataConnection(Phone sender, String reason, String apnType, 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.DataState state) { 163b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 164960c250fc2afee078852df1f37a887cec848ec5dShishir Agrawal long dds = SubscriptionManager.getDefaultDataSubscriptionId(); 165d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville if (DBG) log("subId = " + subId + ", DDS = " + dds); 166a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // TODO 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // use apnType as the key to which connection we're talking about. 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // pass apnType back up to fetch particular for this one. 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyManager telephony = TelephonyManager.getDefault(); 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville LinkProperties linkProperties = null; 17296cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt NetworkCapabilities networkCapabilities = null; 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean roaming = false; 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (state == PhoneConstants.DataState.CONNECTED) { 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties = sender.getLinkProperties(apnType); 17796cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt networkCapabilities = sender.getNetworkCapabilities(apnType); 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ServiceState ss = sender.getServiceState(); 180ffdf8ce51e37e5e45791c9ea11604aa00dffc88eJing Zhao if (ss != null) roaming = ss.getDataRoaming(); 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1837961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 1846a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville mRegistry.notifyDataConnectionForSubscriber(subId, 185a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville convertDataState(state), 186a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sender.isDataConnectivityPossible(apnType), reason, 187a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sender.getActiveApnHost(apnType), 188a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville apnType, 189a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville linkProperties, 190a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville networkCapabilities, 1910470315f0ad74e6bf756824cf1cdf62f85feaeabStuart Scott ((telephony!=null) ? telephony.getDataNetworkType(subId) : 192a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville TelephonyManager.NETWORK_TYPE_UNKNOWN), 193a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville roaming); 1947961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 200cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnectionFailed(Phone sender, String reason, String apnType) { 202b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2047961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 2056a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville mRegistry.notifyDataConnectionFailedForSubscriber(subId, reason, apnType); 2067961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 212cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyCellLocation(Phone sender) { 214b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Bundle data = new Bundle(); 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sender.getCellLocation().fillInNotifierBundle(data); 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2187961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 2196a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville mRegistry.notifyCellLocationForSubscriber(subId, data); 2207961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 226cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 227ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public void notifyCellInfo(Phone sender, List<CellInfo> cellInfo) { 228b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville int subId = sender.getSubId(); 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2307961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 2316a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville mRegistry.notifyCellInfoForSubscriber(subId, cellInfo); 2327961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 238cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyOtaspChanged(Phone sender, int otaspMode) { 240a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // FIXME: subId? 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2427961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski if (mRegistry != null) { 2437961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski mRegistry.notifyOtaspChanged(otaspMode); 2447961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski } 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (RemoteException ex) { 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // system process is dead 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2500742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela public void notifyPreciseCallState(Phone sender) { 251a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // FIXME: subId? 2520742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela Call ringingCall = sender.getRingingCall(); 2530742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela Call foregroundCall = sender.getForegroundCall(); 2540742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela Call backgroundCall = sender.getBackgroundCall(); 2550742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela if (ringingCall != null && foregroundCall != null && backgroundCall != null) { 2560742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela try { 2570742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela mRegistry.notifyPreciseCallState( 2580742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela convertPreciseCallState(ringingCall.getState()), 2590742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela convertPreciseCallState(foregroundCall.getState()), 2600742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela convertPreciseCallState(backgroundCall.getState())); 2610742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } catch (RemoteException ex) { 2620742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela // system process is dead 2630742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 2640742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 2650742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 2660742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela 267b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen public void notifyDisconnectCause(int cause, int preciseCause) { 268a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // FIXME: subId? 2690742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela try { 270b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen mRegistry.notifyDisconnectCause(cause, preciseCause); 2710742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } catch (RemoteException ex) { 2720742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela // system process is dead 2730742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 2740742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 2750742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela 2760742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela public void notifyPreciseDataConnectionFailed(Phone sender, String reason, String apnType, 2770742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela String apn, String failCause) { 278a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // FIXME: subId? 2790742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela try { 2800742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela mRegistry.notifyPreciseDataConnectionFailed(reason, apnType, apn, failCause); 2810742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } catch (RemoteException ex) { 2820742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela // system process is dead 2830742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 2840742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 2850742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela 286a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 287a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void notifyVoLteServiceStateChanged(Phone sender, VoLteServiceState lteState) { 288a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // FIXME: subID 289a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville try { 290a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mRegistry.notifyVoLteServiceStateChanged(lteState); 291a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } catch (RemoteException ex) { 292a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // system process is dead 293a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 294a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 295a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 296110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu @Override 297b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville public void notifyOemHookRawEventForSubscriber(int subId, byte[] rawData) { 298110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu try { 299110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu mRegistry.notifyOemHookRawEventForSubscriber(subId, rawData); 300110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu } catch (RemoteException ex) { 301110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu // system process is dead 302110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu } 303110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu } 304110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 306cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * Convert the {@link PhoneConstants.State} enum into the TelephonyManager.CALL_STATE_* 307cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * constants for the public API. 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static int convertCallState(PhoneConstants.State state) { 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (state) { 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case RINGING: 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.CALL_STATE_RINGING; 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case OFFHOOK: 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.CALL_STATE_OFFHOOK; 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.CALL_STATE_IDLE; 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 321cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * Convert the TelephonyManager.CALL_STATE_* constants into the 322cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * {@link PhoneConstants.State} enum for the public API. 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static PhoneConstants.State convertCallState(int state) { 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (state) { 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case TelephonyManager.CALL_STATE_RINGING: 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.State.RINGING; 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case TelephonyManager.CALL_STATE_OFFHOOK: 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.State.OFFHOOK; 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.State.IDLE; 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 336cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * Convert the {@link PhoneConstants.DataState} enum into the TelephonyManager.DATA_* constants 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * for the public API. 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static int convertDataState(PhoneConstants.DataState state) { 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (state) { 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case CONNECTING: 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_CONNECTING; 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case CONNECTED: 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_CONNECTED; 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SUSPENDED: 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_SUSPENDED; 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_DISCONNECTED; 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 353cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * Convert the TelephonyManager.DATA_* constants into {@link PhoneConstants.DataState} enum 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * for the public API. 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static PhoneConstants.DataState convertDataState(int state) { 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (state) { 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case TelephonyManager.DATA_CONNECTING: 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.DataState.CONNECTING; 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case TelephonyManager.DATA_CONNECTED: 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.DataState.CONNECTED; 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case TelephonyManager.DATA_SUSPENDED: 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.DataState.SUSPENDED; 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.DataState.DISCONNECTED; 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 370cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * Convert the {@link Phone.DataActivityState} enum into the TelephonyManager.DATA_* constants 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * for the public API. 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static int convertDataActivityState(Phone.DataActivityState state) { 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (state) { 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DATAIN: 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_ACTIVITY_IN; 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DATAOUT: 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_ACTIVITY_OUT; 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DATAINANDOUT: 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_ACTIVITY_INOUT; 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DORMANT: 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_ACTIVITY_DORMANT; 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return TelephonyManager.DATA_ACTIVITY_NONE; 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 389e36f59c8a17246eb7924ba1d2bf70f6a2eead1e2Amit Mahajan * Convert the {@link Call.State} enum into the PreciseCallState.PRECISE_CALL_STATE_* constants 3900742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela * for the public API. 3910742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela */ 3920742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela public static int convertPreciseCallState(Call.State state) { 3930742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela switch (state) { 3940742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case ACTIVE: 3950742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_ACTIVE; 3960742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case HOLDING: 3970742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_HOLDING; 3980742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case DIALING: 3990742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_DIALING; 4000742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case ALERTING: 4010742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_ALERTING; 4020742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case INCOMING: 4030742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_INCOMING; 4040742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case WAITING: 4050742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_WAITING; 4060742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case DISCONNECTED: 4070742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_DISCONNECTED; 4080742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela case DISCONNECTING: 4090742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_DISCONNECTING; 4100742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela default: 4110742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela return PreciseCallState.PRECISE_CALL_STATE_IDLE; 4120742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 4130742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 4140742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela 415d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville private void log(String s) { 416d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville Rlog.d(LOG_TAG, s); 417d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville } 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 419