DefaultPhoneNotifier.java revision d1a60dfe521f376e3500946d5371f126dbd36767
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        }
73a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        notifyCallStateToTelephonyRegistry(sender);
74a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
75a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
76a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    /*
77a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville     *  Suppose, some third party app e.g. FM app registers for a call state changed indication
78a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville     *  through TelephonyManager/PhoneStateListener and an incoming call is received on sub1 or
79a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville     *  sub2. Then ir-respective of sub1/sub2 FM app should be informed of call state
80a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville     *  changed(onCallStateChanged()) indication so that FM app can be paused.
81a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville     *  Hence send consolidated call state information to apps. (i.e. sub1 or sub2 active
82a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville     *  call state,  in priority order RINGING > OFFHOOK > IDLE)
83a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville     */
84a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public void notifyCallStateToTelephonyRegistry(Phone sender) {
85a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        Call ringingCall = null;
86a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        CallManager cm = CallManager.getInstance();
87a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        PhoneConstants.State state = sender.getState();
88a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        String incomingNumber = "";
89a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        for (Phone phone : cm.getAllPhones()) {
90a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            if (phone.getState() == PhoneConstants.State.RINGING) {
91a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                ringingCall = phone.getRingingCall();
92a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (ringingCall != null && ringingCall.getEarliestConnection() != null) {
93a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    incomingNumber = ringingCall.getEarliestConnection().getAddress();
94a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                }
95a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                sender = phone;
96a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                state = PhoneConstants.State.RINGING;
97a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                break;
98a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            } else if (phone.getState() == PhoneConstants.State.OFFHOOK) {
99a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (state == PhoneConstants.State.IDLE) {
100a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    state = PhoneConstants.State.OFFHOOK;
101a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    sender = phone;
102a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                }
103a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
104a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        }
105d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville        if (DBG) log("notifyCallStateToTelephonyRegistry, subId = " + sender.getSubId()
106a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                + " state = " + state);
107a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        try {
108a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            if (mRegistry != null) {
109a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                mRegistry.notifyCallState(convertCallState(state), incomingNumber);
1107961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
116cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyServiceState(Phone sender) {
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ServiceState ss = sender.getServiceState();
119d1a60dfe521f376e3500946d5371f126dbd36767xinhe        int phoneId = sender.getPhoneId();
120a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
121d1a60dfe521f376e3500946d5371f126dbd36767xinhe
122a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        Rlog.d(LOG_TAG, "nofityServiceState: mRegistry=" + mRegistry + " ss=" + ss
123d1a60dfe521f376e3500946d5371f126dbd36767xinhe                + " sender=" + sender + " phondId=" + phoneId + " subId=" + subId);
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ss == null) {
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ss = new ServiceState();
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ss.setStateOutOfService();
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1297961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
130d1a60dfe521f376e3500946d5371f126dbd36767xinhe                mRegistry.notifyServiceStateForPhoneId(phoneId, subId, ss);
1317961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
137cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifySignalStrength(Phone sender) {
139a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
140a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        Rlog.d(LOG_TAG, "notifySignalStrength: mRegistry=" + mRegistry
141a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                + " ss=" + sender.getSignalStrength() + " sender=" + sender);
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1437961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
1446a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifySignalStrengthForSubscriber(subId, sender.getSignalStrength());
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 notifyMessageWaitingChanged(Phone sender) {
153d1a60dfe521f376e3500946d5371f126dbd36767xinhe        int phoneId = sender.getPhoneId();
154a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
155d1a60dfe521f376e3500946d5371f126dbd36767xinhe
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1577961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
158d1a60dfe521f376e3500946d5371f126dbd36767xinhe                mRegistry.notifyMessageWaitingChangedForPhoneId(phoneId, subId,
159a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                        sender.getMessageWaitingIndicator());
1607961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
166cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyCallForwardingChanged(Phone sender) {
168a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1707961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
1716a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyCallForwardingChangedForSubscriber(subId,
172a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                        sender.getCallForwardingIndicator());
1737961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
179cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataActivity(Phone sender) {
181a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
1837961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
1846a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyDataActivityForSubscriber(subId,
185a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                        convertDataActivityState(sender.getDataActivityState()));
1867961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
192cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnection(Phone sender, String reason, String apnType,
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            PhoneConstants.DataState state) {
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        doNotifyDataConnection(sender, reason, apnType, state);
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void doNotifyDataConnection(Phone sender, String reason, String apnType,
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            PhoneConstants.DataState state) {
200a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
201a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long dds = SubscriptionManager.getDefaultDataSubId();
202d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville        if (DBG) log("subId = " + subId + ", DDS = " + dds);
203a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // TODO
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // use apnType as the key to which connection we're talking about.
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // pass apnType back up to fetch particular for this one.
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        TelephonyManager telephony = TelephonyManager.getDefault();
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        LinkProperties linkProperties = null;
20996cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt        NetworkCapabilities networkCapabilities = null;
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean roaming = false;
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (state == PhoneConstants.DataState.CONNECTED) {
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            linkProperties = sender.getLinkProperties(apnType);
21496cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt            networkCapabilities = sender.getNetworkCapabilities(apnType);
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ServiceState ss = sender.getServiceState();
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ss != null) roaming = ss.getRoaming();
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2207961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2216a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyDataConnectionForSubscriber(subId,
222a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    convertDataState(state),
223a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    sender.isDataConnectivityPossible(apnType), reason,
224a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    sender.getActiveApnHost(apnType),
225a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    apnType,
226a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    linkProperties,
227a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    networkCapabilities,
228a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    ((telephony!=null) ? telephony.getNetworkType() :
229a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    TelephonyManager.NETWORK_TYPE_UNKNOWN),
230a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    roaming);
2317961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
237cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnectionFailed(Phone sender, String reason, String apnType) {
239a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2417961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2426a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyDataConnectionFailedForSubscriber(subId, reason, apnType);
2437961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
249cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyCellLocation(Phone sender) {
251a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Bundle data = new Bundle();
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sender.getCellLocation().fillInNotifierBundle(data);
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2557961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2566a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyCellLocationForSubscriber(subId, data);
2577961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
263cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
264ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    public void notifyCellInfo(Phone sender, List<CellInfo> cellInfo) {
265a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        long subId = sender.getSubId();
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2677961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2686a5ef38e6ae3d3a3ad90ae180388fe85de0495a2Wink Saville                mRegistry.notifyCellInfoForSubscriber(subId, cellInfo);
2697961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
275cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2768758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville    public void notifyDataConnectionRealTimeInfo(Phone sender,
2778758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville                                                 DataConnectionRealTimeInfo dcRtInfo) {
2788758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville        try {
2798758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville            mRegistry.notifyDataConnectionRealTimeInfo(dcRtInfo);
2808758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville        } catch (RemoteException ex) {
2818758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville
2828758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville        }
2838758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville    }
2848758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville
2858758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville    @Override
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyOtaspChanged(Phone sender, int otaspMode) {
287a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2897961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            if (mRegistry != null) {
2907961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski                mRegistry.notifyOtaspChanged(otaspMode);
2917961ac2c8d2e50d879bc6d5b272b7d972a335c0eAdam Lesinski            }
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (RemoteException ex) {
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // system process is dead
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2970742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public void notifyPreciseCallState(Phone sender) {
298a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
2990742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        Call ringingCall = sender.getRingingCall();
3000742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        Call foregroundCall = sender.getForegroundCall();
3010742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        Call backgroundCall = sender.getBackgroundCall();
3020742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        if (ringingCall != null && foregroundCall != null && backgroundCall != null) {
3030742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            try {
3040742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                mRegistry.notifyPreciseCallState(
3050742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                        convertPreciseCallState(ringingCall.getState()),
3060742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                        convertPreciseCallState(foregroundCall.getState()),
3070742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                        convertPreciseCallState(backgroundCall.getState()));
3080742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            } catch (RemoteException ex) {
3090742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                // system process is dead
3100742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            }
3110742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
3120742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
3130742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
314b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen    public void notifyDisconnectCause(int cause, int preciseCause) {
315a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
3160742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        try {
317b7b7a62112b79571adf74372c5f5366fd62d0031Anders Kristensen            mRegistry.notifyDisconnectCause(cause, preciseCause);
3180742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        } catch (RemoteException ex) {
3190742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            // system process is dead
3200742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
3210742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
3220742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
3230742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public void notifyPreciseDataConnectionFailed(Phone sender, String reason, String apnType,
3240742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            String apn, String failCause) {
325a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subId?
3260742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        try {
3270742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            mRegistry.notifyPreciseDataConnectionFailed(reason, apnType, apn, failCause);
3280742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        } catch (RemoteException ex) {
3290742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            // system process is dead
3300742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
3310742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
3320742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
333a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    @Override
334a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public void notifyVoLteServiceStateChanged(Phone sender, VoLteServiceState lteState) {
335a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        // FIXME: subID
336a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        try {
337a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            mRegistry.notifyVoLteServiceStateChanged(lteState);
338a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        } catch (RemoteException ex) {
339a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            // system process is dead
340a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        }
341a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
342a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
344cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the {@link PhoneConstants.State} enum into the TelephonyManager.CALL_STATE_*
345cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * constants for the public API.
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static int convertCallState(PhoneConstants.State state) {
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RINGING:
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.CALL_STATE_RINGING;
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case OFFHOOK:
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.CALL_STATE_OFFHOOK;
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.CALL_STATE_IDLE;
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
359cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the TelephonyManager.CALL_STATE_* constants into the
360cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * {@link PhoneConstants.State} enum for the public API.
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static PhoneConstants.State convertCallState(int state) {
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.CALL_STATE_RINGING:
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.State.RINGING;
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.CALL_STATE_OFFHOOK:
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.State.OFFHOOK;
3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.State.IDLE;
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
374cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the {@link PhoneConstants.DataState} enum into the TelephonyManager.DATA_* constants
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static int convertDataState(PhoneConstants.DataState state) {
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case CONNECTING:
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_CONNECTING;
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case CONNECTED:
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_CONNECTED;
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SUSPENDED:
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_SUSPENDED;
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_DISCONNECTED;
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
391cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the TelephonyManager.DATA_* constants into {@link PhoneConstants.DataState} enum
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static PhoneConstants.DataState convertDataState(int state) {
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_CONNECTING:
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.CONNECTING;
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_CONNECTED:
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.CONNECTED;
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_SUSPENDED:
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.SUSPENDED;
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return PhoneConstants.DataState.DISCONNECTED;
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
408cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the {@link Phone.DataActivityState} enum into the TelephonyManager.DATA_* constants
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static int convertDataActivityState(Phone.DataActivityState state) {
4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DATAIN:
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_IN;
4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DATAOUT:
4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_OUT;
4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DATAINANDOUT:
4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_INOUT;
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case DORMANT:
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_DORMANT;
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return TelephonyManager.DATA_ACTIVITY_NONE;
4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
427cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     * Convert the TelephonyManager.DATA_* constants into the {@link Phone.DataActivityState} enum
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * for the public API.
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static Phone.DataActivityState convertDataActivityState(int state) {
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (state) {
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_IN:
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DATAIN;
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_OUT:
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DATAOUT;
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_INOUT:
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DATAINANDOUT;
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case TelephonyManager.DATA_ACTIVITY_DORMANT:
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.DORMANT;
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return Phone.DataActivityState.NONE;
4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4440742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
4450742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    /**
4460742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * Convert the {@link State} enum into the PreciseCallState.PRECISE_CALL_STATE_* constants
4470742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * for the public API.
4480742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     */
4490742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public static int convertPreciseCallState(Call.State state) {
4500742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        switch (state) {
4510742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case ACTIVE:
4520742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_ACTIVE;
4530742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case HOLDING:
4540742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_HOLDING;
4550742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case DIALING:
4560742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_DIALING;
4570742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case ALERTING:
4580742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_ALERTING;
4590742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case INCOMING:
4600742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_INCOMING;
4610742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case WAITING:
4620742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_WAITING;
4630742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case DISCONNECTED:
4640742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_DISCONNECTED;
4650742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case DISCONNECTING:
4660742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_DISCONNECTING;
4670742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            default:
4680742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return PreciseCallState.PRECISE_CALL_STATE_IDLE;
4690742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
4700742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
4710742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela
4720742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    /**
4730742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * Convert the Call.State.* constants into the {@link State} enum
4740742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     * for the public API.
4750742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela     */
4760742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    public static Call.State convertPreciseCallState(int state) {
4770742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        switch (state) {
4780742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_ACTIVE:
4790742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.ACTIVE;
4800742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_HOLDING:
4810742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.HOLDING;
4820742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_DIALING:
4830742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.DIALING;
4840742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_ALERTING:
4850742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.ALERTING;
4860742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_INCOMING:
4870742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.INCOMING;
4880742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_WAITING:
4890742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.WAITING;
4900742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_DISCONNECTED:
4910742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.DISCONNECTED;
4920742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            case PreciseCallState.PRECISE_CALL_STATE_DISCONNECTING:
4930742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.DISCONNECTING;
4940742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela            default:
4950742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela                return Call.State.IDLE;
4960742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela        }
4970742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela    }
498a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
499a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public interface IDataStateChangedCallback {
500a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        void onDataStateChanged(long subId, String state, String reason, String apnName,
501a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            String apnType, boolean unavailable);
502a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
503d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville
504d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville    private void log(String s) {
505d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville        Rlog.d(LOG_TAG, s);
506d2c79d28884203ad4f13ebdf443b3899d56b93d6Wink Saville    }
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
508