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;
258758315661d65c14d0e10d354a14f80ec1f65db7Wink Savilleimport android.telephony.DataConnectionRealTimeInfo;
26a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.Rlog;
27a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.VoLteServiceState;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState;
29a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.SubscriptionManager;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.TelephonyManager;
310742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuelaimport android.telephony.PreciseCallState;
320742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuelaimport android.telephony.DisconnectCause;
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.Call;
35a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.CallManager;
36a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.Phone;
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.ITelephonyRegistry;
38a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.PhoneConstants;
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport java.util.List;
41ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * broadcast intents
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class DefaultPhoneNotifier implements PhoneNotifier {
46d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville    private static final String LOG_TAG = "DefaultPhoneNotifier";
47d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville    private static final boolean DBG = false; // STOPSHIP if true
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
49a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    protected ITelephonyRegistry mRegistry;
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /*package*/
52a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    protected DefaultPhoneNotifier() {
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    "telephony.registry"));
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
57cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyPhoneState(Phone sender) {
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Call ringingCall = sender.getRingingCall();
60a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String incomingNumber = "";
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ringingCall != null && ringingCall.getEarliestConnection() != null){
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            incomingNumber = ringingCall.getEarliestConnection().getAddress();
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
667961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
676a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                  mRegistry.notifyCallStateForSubscriber(subId,
68a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                        convertCallState(sender.getState()), incomingNumber);
69a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
70a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        } catch (RemoteException ex) {
71a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            // system process is dead
72a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        }
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
75cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyServiceState(Phone sender) {
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ServiceState ss = sender.getServiceState();
78d1a60dfe521f376e3500946d5371f126dbd36767xinhe        int phoneId = sender.getPhoneId();
79a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
80d1a60dfe521f376e3500946d5371f126dbd36767xinhe
81a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        Rlog.d(LOG_TAG, "nofityServiceState: mRegistry=" + mRegistry + " ss=" + ss
82d1a60dfe521f376e3500946d5371f126dbd36767xinhe                + " sender=" + sender + " phondId=" + phoneId + " subId=" + subId);
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ss == null) {
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ss = new ServiceState();
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ss.setStateOutOfService();
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
887961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
89d1a60dfe521f376e3500946d5371f126dbd36767xinhe                mRegistry.notifyServiceStateForPhoneId(phoneId, subId, ss);
907961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
96cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifySignalStrength(Phone sender) {
98a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
99a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        Rlog.d(LOG_TAG, "notifySignalStrength: mRegistry=" + mRegistry
100a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                + " ss=" + sender.getSignalStrength() + " sender=" + sender);
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1027961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
1036a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifySignalStrengthForSubscriber(subId, sender.getSignalStrength());
1047961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
110cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyMessageWaitingChanged(Phone sender) {
112d1a60dfe521f376e3500946d5371f126dbd36767xinhe        int phoneId = sender.getPhoneId();
113a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
114d1a60dfe521f376e3500946d5371f126dbd36767xinhe
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1167961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
117d1a60dfe521f376e3500946d5371f126dbd36767xinhe                mRegistry.notifyMessageWaitingChangedForPhoneId(phoneId, subId,
118a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                        sender.getMessageWaitingIndicator());
1197961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
125cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyCallForwardingChanged(Phone sender) {
127a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1297961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
1306a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyCallForwardingChangedForSubscriber(subId,
131a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                        sender.getCallForwardingIndicator());
1327961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
138cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataActivity(Phone sender) {
140a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1427961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
1436a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyDataActivityForSubscriber(subId,
144a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                        convertDataActivityState(sender.getDataActivityState()));
1457961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
151cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnection(Phone sender, String reason, String apnType,
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            PhoneConstants.DataState state) {
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        doNotifyDataConnection(sender, reason, apnType, state);
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void doNotifyDataConnection(Phone sender, String reason, String apnType,
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            PhoneConstants.DataState state) {
159a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
160a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long dds = SubscriptionManager.getDefaultDataSubId();
161d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville        if (DBG) log("subId = " + subId + ", DDS = " + dds);
162a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // TODO
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // use apnType as the key to which connection we're talking about.
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // pass apnType back up to fetch particular for this one.
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        TelephonyManager telephony = TelephonyManager.getDefault();
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        LinkProperties linkProperties = null;
16896cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt        NetworkCapabilities networkCapabilities = null;
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean roaming = false;
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (state == PhoneConstants.DataState.CONNECTED) {
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            linkProperties = sender.getLinkProperties(apnType);
17396cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt            networkCapabilities = sender.getNetworkCapabilities(apnType);
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ServiceState ss = sender.getServiceState();
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ss != null) roaming = ss.getRoaming();
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1797961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
1806a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyDataConnectionForSubscriber(subId,
181a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    convertDataState(state),
182a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    sender.isDataConnectivityPossible(apnType), reason,
183a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    sender.getActiveApnHost(apnType),
184a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    apnType,
185a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    linkProperties,
186a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    networkCapabilities,
187a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    ((telephony!=null) ? telephony.getNetworkType() :
188a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    TelephonyManager.NETWORK_TYPE_UNKNOWN),
189a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    roaming);
1907961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
196cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnectionFailed(Phone sender, String reason, String apnType) {
198a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2007961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2016a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyDataConnectionFailedForSubscriber(subId, reason, apnType);
2027961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
208cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyCellLocation(Phone sender) {
210a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Bundle data = new Bundle();
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sender.getCellLocation().fillInNotifierBundle(data);
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2147961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2156a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyCellLocationForSubscriber(subId, data);
2167961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
222cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
223ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    public void notifyCellInfo(Phone sender, List<CellInfo> cellInfo) {
224a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2267961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2276a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyCellInfoForSubscriber(subId, cellInfo);
2287961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
234cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2358758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville    public void notifyDataConnectionRealTimeInfo(Phone sender,
2368758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville                                                 DataConnectionRealTimeInfo dcRtInfo) {
2378758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville        try {
2388758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville            mRegistry.notifyDataConnectionRealTimeInfo(dcRtInfo);
2398758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville        } catch (RemoteException ex) {
2408758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville
2418758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville        }
2428758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville    }
2438758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville
2448758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville    @Override
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyOtaspChanged(Phone sender, int otaspMode) {
246a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2487961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2497961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski                mRegistry.notifyOtaspChanged(otaspMode);
2507961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2560742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public void notifyPreciseCallState(Phone sender) {
257a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
2580742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        Call ringingCall = sender.getRingingCall();
2590742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        Call foregroundCall = sender.getForegroundCall();
2600742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        Call backgroundCall = sender.getBackgroundCall();
2610742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        if (ringingCall != null && foregroundCall != null && backgroundCall != null) {
2620742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            try {
2630742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                mRegistry.notifyPreciseCallState(
2640742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                        convertPreciseCallState(ringingCall.getState()),
2650742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                        convertPreciseCallState(foregroundCall.getState()),
2660742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                        convertPreciseCallState(backgroundCall.getState()));
2670742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            } catch (RemoteException ex) {
2680742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                // system process is dead
2690742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            }
2700742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
2710742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
2720742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
273b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen    public void notifyDisconnectCause(int cause, int preciseCause) {
274a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
2750742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        try {
276b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen            mRegistry.notifyDisconnectCause(cause, preciseCause);
2770742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        } catch (RemoteException ex) {
2780742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            // system process is dead
2790742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
2800742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
2810742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
2820742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public void notifyPreciseDataConnectionFailed(Phone sender, String reason, String apnType,
2830742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            String apn, String failCause) {
284a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
2850742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        try {
2860742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            mRegistry.notifyPreciseDataConnectionFailed(reason, apnType, apn, failCause);
2870742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        } catch (RemoteException ex) {
2880742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            // system process is dead
2890742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
2900742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
2910742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
292a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    @Override
293a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public void notifyVoLteServiceStateChanged(Phone sender, VoLteServiceState lteState) {
294a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subID
295a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        try {
296a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            mRegistry.notifyVoLteServiceStateChanged(lteState);
297a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        } catch (RemoteException ex) {
298a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            // system process is dead
299a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        }
300a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
301a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
302ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu    @Override
303ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu    public void notifyOemHookRawEventForSubscriber(long subId, byte[] rawData) {
304ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu        try {
305ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu            mRegistry.notifyOemHookRawEventForSubscriber(subId, rawData);
306ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu        } catch (RemoteException ex) {
307ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu            // system process is dead
308ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu        }
309ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu    }
310ca117227299fb662cbd2c0cfe41d17ff0f903befNew Author Steven Liu
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
312cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the {@link PhoneConstants.State} enum into the TelephonyManager.CALL_STATE_*
313cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * constants for the public API.
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static int convertCallState(PhoneConstants.State state) {
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RINGING:
3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.CALL_STATE_RINGING;
3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case OFFHOOK:
3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.CALL_STATE_OFFHOOK;
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.CALL_STATE_IDLE;
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
327cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the TelephonyManager.CALL_STATE_* constants into the
328cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * {@link PhoneConstants.State} enum for the public API.
3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static PhoneConstants.State convertCallState(int state) {
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.CALL_STATE_RINGING:
3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.State.RINGING;
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.CALL_STATE_OFFHOOK:
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.State.OFFHOOK;
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.State.IDLE;
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
342cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the {@link PhoneConstants.DataState} enum into the TelephonyManager.DATA_* constants
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static int convertDataState(PhoneConstants.DataState state) {
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case CONNECTING:
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_CONNECTING;
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case CONNECTED:
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_CONNECTED;
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SUSPENDED:
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_SUSPENDED;
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_DISCONNECTED;
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
359cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the TelephonyManager.DATA_* constants into {@link PhoneConstants.DataState} enum
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static PhoneConstants.DataState convertDataState(int state) {
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_CONNECTING:
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.CONNECTING;
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_CONNECTED:
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.CONNECTED;
3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_SUSPENDED:
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.SUSPENDED;
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.DISCONNECTED;
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
376cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the {@link Phone.DataActivityState} enum into the TelephonyManager.DATA_* constants
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static int convertDataActivityState(Phone.DataActivityState state) {
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DATAIN:
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_IN;
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DATAOUT:
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_OUT;
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DATAINANDOUT:
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_INOUT;
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DORMANT:
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_DORMANT;
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_NONE;
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
395cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the TelephonyManager.DATA_* constants into the {@link Phone.DataActivityState} enum
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static Phone.DataActivityState convertDataActivityState(int state) {
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_IN:
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DATAIN;
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_OUT:
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DATAOUT;
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_INOUT:
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DATAINANDOUT;
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_DORMANT:
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DORMANT;
4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.NONE;
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4120742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
4130742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    /**
4140742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * Convert the {@link State} enum into the PreciseCallState.PRECISE_CALL_STATE_* constants
4150742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * for the public API.
4160742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     */
4170742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public static int convertPreciseCallState(Call.State state) {
4180742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        switch (state) {
4190742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case ACTIVE:
4200742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_ACTIVE;
4210742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case HOLDING:
4220742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_HOLDING;
4230742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case DIALING:
4240742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_DIALING;
4250742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case ALERTING:
4260742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_ALERTING;
4270742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case INCOMING:
4280742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_INCOMING;
4290742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case WAITING:
4300742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_WAITING;
4310742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case DISCONNECTED:
4320742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_DISCONNECTED;
4330742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case DISCONNECTING:
4340742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_DISCONNECTING;
4350742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            default:
4360742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_IDLE;
4370742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
4380742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
4390742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
4400742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    /**
4410742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * Convert the Call.State.* constants into the {@link State} enum
4420742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * for the public API.
4430742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     */
4440742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public static Call.State convertPreciseCallState(int state) {
4450742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        switch (state) {
4460742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_ACTIVE:
4470742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.ACTIVE;
4480742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_HOLDING:
4490742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.HOLDING;
4500742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_DIALING:
4510742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.DIALING;
4520742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_ALERTING:
4530742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.ALERTING;
4540742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_INCOMING:
4550742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.INCOMING;
4560742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_WAITING:
4570742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.WAITING;
4580742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_DISCONNECTED:
4590742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.DISCONNECTED;
4600742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_DISCONNECTING:
4610742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.DISCONNECTING;
4620742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            default:
4630742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.IDLE;
4640742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
4650742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
466a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
467a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public interface IDataStateChangedCallback {
468a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        void onDataStateChanged(long subId, String state, String reason, String apnName,
469a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            String apnType, boolean unavailable);
470a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
471d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville
472d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville    private void log(String s) {
473d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville        Rlog.d(LOG_TAG, s);
474d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville    }
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
476