PhoneProxy.java revision d7d6fb39470e212ce53b05fdc1c4dd8a724e9db7
1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.internal.telephony;
18
19
20import android.app.ActivityManagerNative;
21import android.content.Context;
22import android.content.Intent;
23import android.content.SharedPreferences;
24import android.os.Handler;
25import android.os.Message;
26import android.os.SystemProperties;
27import android.preference.PreferenceManager;
28import android.telephony.CellLocation;
29import android.telephony.PhoneStateListener;
30import android.telephony.ServiceState;
31import android.telephony.SignalStrength;
32import android.util.Log;
33
34import com.android.internal.telephony.cdma.CDMAPhone;
35import com.android.internal.telephony.gsm.GSMPhone;
36import com.android.internal.telephony.gsm.NetworkInfo;
37import com.android.internal.telephony.gsm.PdpConnection;
38import com.android.internal.telephony.test.SimulatedRadioControl;
39
40import java.util.List;
41
42public class PhoneProxy extends Handler implements Phone {
43    public final static Object lockForRadioTechnologyChange = new Object();
44
45    private Phone mActivePhone;
46    private String mOutgoingPhone;
47    private CommandsInterface mCommandsInterface;
48    private IccSmsInterfaceManagerProxy mIccSmsInterfaceManagerProxy;
49    private IccPhoneBookInterfaceManagerProxy mIccPhoneBookInterfaceManagerProxy;
50    private PhoneSubInfoProxy mPhoneSubInfoProxy;
51
52    private boolean mResetModemOnRadioTechnologyChange = false;
53
54    private static final int EVENT_RADIO_TECHNOLOGY_CHANGED = 1;
55    private static final String LOG_TAG = "PHONE";
56
57    //***** Class Methods
58    public PhoneProxy(Phone phone) {
59        mActivePhone = phone;
60        mResetModemOnRadioTechnologyChange = SystemProperties.getBoolean(
61                TelephonyProperties.PROPERTY_RESET_ON_RADIO_TECH_CHANGE, false);
62        mIccSmsInterfaceManagerProxy = new IccSmsInterfaceManagerProxy(
63                phone.getIccSmsInterfaceManager());
64        mIccPhoneBookInterfaceManagerProxy = new IccPhoneBookInterfaceManagerProxy(
65                phone.getIccPhoneBookInterfaceManager());
66        mPhoneSubInfoProxy = new PhoneSubInfoProxy(phone.getPhoneSubInfo());
67        mCommandsInterface = ((PhoneBase)mActivePhone).mCM;
68        mCommandsInterface.registerForRadioTechnologyChanged(
69                this, EVENT_RADIO_TECHNOLOGY_CHANGED, null);
70    }
71
72    @Override
73    public void handleMessage(Message msg) {
74        switch(msg.what) {
75        case EVENT_RADIO_TECHNOLOGY_CHANGED:
76            //switch Phone from CDMA to GSM or vice versa
77            mOutgoingPhone = ((PhoneBase)mActivePhone).getPhoneName();
78            logd("Switching phone from " + mOutgoingPhone + "Phone to " +
79                    (mOutgoingPhone.equals("GSM") ? "CDMAPhone" : "GSMPhone") );
80            boolean oldPowerState = false; // old power state to off
81            if (mResetModemOnRadioTechnologyChange) {
82                if (mCommandsInterface.getRadioState().isOn()) {
83                    oldPowerState = true;
84                    logd("Setting Radio Power to Off");
85                    mCommandsInterface.setRadioPower(false, null);
86                }
87            }
88
89            if(mOutgoingPhone.equals("GSM")) {
90                logd("Make a new CDMAPhone and destroy the old GSMPhone.");
91
92                ((GSMPhone)mActivePhone).dispose();
93                Phone oldPhone = mActivePhone;
94
95                //Give the garbage collector a hint to start the garbage collection asap
96                // NOTE this has been disabled since radio technology change could happen during
97                //   e.g. a multimedia playing and could slow the system. Tests needs to be done
98                //   to see the effects of the GC call here when system is busy.
99                //System.gc();
100
101                mActivePhone = PhoneFactory.getCdmaPhone();
102                ((GSMPhone)oldPhone).removeReferences();
103                oldPhone = null;
104            } else {
105                logd("Make a new GSMPhone and destroy the old CDMAPhone.");
106
107                ((CDMAPhone)mActivePhone).dispose();
108                //mActivePhone = null;
109                Phone oldPhone = mActivePhone;
110
111                // Give the GC a hint to start the garbage collection asap
112                // NOTE this has been disabled since radio technology change could happen during
113                //   e.g. a multimedia playing and could slow the system. Tests needs to be done
114                //   to see the effects of the GC call here when system is busy.
115                //System.gc();
116
117                mActivePhone = PhoneFactory.getGsmPhone();
118                ((CDMAPhone)oldPhone).removeReferences();
119                oldPhone = null;
120            }
121
122            if (mResetModemOnRadioTechnologyChange) {
123                logd("Resetting Radio");
124                mCommandsInterface.setRadioPower(oldPowerState, null);
125            }
126
127            //Set the new interfaces in the proxy's
128            mIccSmsInterfaceManagerProxy.setmIccSmsInterfaceManager(
129                    mActivePhone.getIccSmsInterfaceManager());
130            mIccPhoneBookInterfaceManagerProxy.setmIccPhoneBookInterfaceManager(
131                    mActivePhone.getIccPhoneBookInterfaceManager());
132            mPhoneSubInfoProxy.setmPhoneSubInfo(this.mActivePhone.getPhoneSubInfo());
133            mCommandsInterface = ((PhoneBase)mActivePhone).mCM;
134
135            //Send an Intent to the PhoneApp that we had a radio technology change
136            Intent intent = new Intent(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
137            intent.putExtra(Phone.PHONE_NAME_KEY, mActivePhone.getPhoneName());
138            ActivityManagerNative.broadcastStickyIntent(intent, null);
139            break;
140        default:
141            Log.e(LOG_TAG,"Error! This handler was not registered for this message type. Message: "
142                    + msg.what);
143        break;
144        }
145        super.handleMessage(msg);
146    }
147
148    private void logv(String msg) {
149        Log.v(LOG_TAG, "[PhoneProxy] " + msg);
150    }
151
152    private void logd(String msg) {
153        Log.d(LOG_TAG, "[PhoneProxy] " + msg);
154    }
155
156    private void logw(String msg) {
157        Log.w(LOG_TAG, "[PhoneProxy] " + msg);
158    }
159
160    private void loge(String msg) {
161        Log.e(LOG_TAG, "[PhoneProxy] " + msg);
162    }
163
164
165    public ServiceState getServiceState() {
166        return mActivePhone.getServiceState();
167    }
168
169    public CellLocation getCellLocation() {
170        return mActivePhone.getCellLocation();
171    }
172
173    public DataState getDataConnectionState() {
174        return mActivePhone.getDataConnectionState();
175    }
176
177    public DataActivityState getDataActivityState() {
178        return mActivePhone.getDataActivityState();
179    }
180
181    public Context getContext() {
182        return mActivePhone.getContext();
183    }
184
185    public void disableDnsCheck(boolean b) {
186        mActivePhone.disableDnsCheck(b);
187    }
188
189    public boolean isDnsCheckDisabled() {
190        return mActivePhone.isDnsCheckDisabled();
191    }
192
193    public State getState() {
194        return mActivePhone.getState();
195    }
196
197    public String getPhoneName() {
198        return mActivePhone.getPhoneName();
199    }
200
201    public int getPhoneType() {
202        return mActivePhone.getPhoneType();
203    }
204
205    public String[] getActiveApnTypes() {
206        return mActivePhone.getActiveApnTypes();
207    }
208
209    public String getActiveApn() {
210        return mActivePhone.getActiveApn();
211    }
212
213    public SignalStrength getSignalStrength() {
214        return mActivePhone.getSignalStrength();
215    }
216
217    public void registerForUnknownConnection(Handler h, int what, Object obj) {
218        mActivePhone.registerForUnknownConnection(h, what, obj);
219    }
220
221    public void unregisterForUnknownConnection(Handler h) {
222        mActivePhone.unregisterForUnknownConnection(h);
223    }
224
225    public void registerForPreciseCallStateChanged(Handler h, int what, Object obj) {
226        mActivePhone.registerForPreciseCallStateChanged(h, what, obj);
227    }
228
229    public void unregisterForPreciseCallStateChanged(Handler h) {
230        mActivePhone.unregisterForPreciseCallStateChanged(h);
231    }
232
233    public void registerForNewRingingConnection(Handler h, int what, Object obj) {
234        mActivePhone.registerForNewRingingConnection(h, what, obj);
235    }
236
237    public void unregisterForNewRingingConnection(Handler h) {
238        mActivePhone.unregisterForNewRingingConnection(h);
239    }
240
241    public void registerForIncomingRing(Handler h, int what, Object obj) {
242        mActivePhone.registerForIncomingRing(h, what, obj);
243    }
244
245    public void unregisterForIncomingRing(Handler h) {
246        mActivePhone.unregisterForIncomingRing(h);
247    }
248
249    public void registerForDisconnect(Handler h, int what, Object obj) {
250        mActivePhone.registerForDisconnect(h, what, obj);
251    }
252
253    public void unregisterForDisconnect(Handler h) {
254        mActivePhone.unregisterForDisconnect(h);
255    }
256
257    public void registerForMmiInitiate(Handler h, int what, Object obj) {
258        mActivePhone.registerForMmiInitiate(h, what, obj);
259    }
260
261    public void unregisterForMmiInitiate(Handler h) {
262        mActivePhone.unregisterForMmiInitiate(h);
263    }
264
265    public void registerForMmiComplete(Handler h, int what, Object obj) {
266        mActivePhone.registerForMmiComplete(h, what, obj);
267    }
268
269    public void unregisterForMmiComplete(Handler h) {
270        mActivePhone.unregisterForMmiComplete(h);
271    }
272
273    public List<? extends MmiCode> getPendingMmiCodes() {
274        return mActivePhone.getPendingMmiCodes();
275    }
276
277    public void sendUssdResponse(String ussdMessge) {
278        mActivePhone.sendUssdResponse(ussdMessge);
279    }
280
281    public void registerForServiceStateChanged(Handler h, int what, Object obj) {
282        mActivePhone.registerForServiceStateChanged(h, what, obj);
283    }
284
285    public void unregisterForServiceStateChanged(Handler h) {
286        mActivePhone.unregisterForServiceStateChanged(h);
287    }
288
289    public void registerForSuppServiceNotification(Handler h, int what, Object obj) {
290        mActivePhone.registerForSuppServiceNotification(h, what, obj);
291    }
292
293    public void unregisterForSuppServiceNotification(Handler h) {
294        mActivePhone.unregisterForSuppServiceNotification(h);
295    }
296
297    public void registerForSuppServiceFailed(Handler h, int what, Object obj) {
298        mActivePhone.registerForSuppServiceFailed(h, what, obj);
299    }
300
301    public void unregisterForSuppServiceFailed(Handler h) {
302        mActivePhone.unregisterForSuppServiceFailed(h);
303    }
304
305    public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj){
306        mActivePhone.registerForInCallVoicePrivacyOn(h,what,obj);
307    }
308
309    public void unregisterForInCallVoicePrivacyOn(Handler h){
310        mActivePhone.unregisterForInCallVoicePrivacyOn(h);
311    }
312
313    public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj){
314        mActivePhone.registerForInCallVoicePrivacyOff(h,what,obj);
315    }
316
317    public void unregisterForInCallVoicePrivacyOff(Handler h){
318        mActivePhone.unregisterForInCallVoicePrivacyOff(h);
319    }
320
321    public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) {
322        mActivePhone.registerForCdmaOtaStatusChange(h,what,obj);
323    }
324
325    public void unregisterForCdmaOtaStatusChange(Handler h) {
326         mActivePhone.unregisterForCdmaOtaStatusChange(h);
327    }
328
329    public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) {
330        mActivePhone.registerForSubscriptionInfoReady(h, what, obj);
331    }
332
333    public void unregisterForSubscriptionInfoReady(Handler h) {
334        mActivePhone.unregisterForSubscriptionInfoReady(h);
335    }
336
337    public void registerForEcmTimerReset(Handler h, int what, Object obj) {
338        mActivePhone.registerForEcmTimerReset(h,what,obj);
339    }
340
341    public void unregisterForEcmTimerReset(Handler h) {
342        mActivePhone.unregisterForEcmTimerReset(h);
343    }
344
345    public void registerForRingbackTone(Handler h, int what, Object obj) {
346        mActivePhone.registerForRingbackTone(h,what,obj);
347    }
348
349    public void unregisterForRingbackTone(Handler h) {
350        mActivePhone.unregisterForRingbackTone(h);
351    }
352
353    public boolean getIccRecordsLoaded() {
354        return mActivePhone.getIccRecordsLoaded();
355    }
356
357    public IccCard getIccCard() {
358        return mActivePhone.getIccCard();
359    }
360
361    public void acceptCall() throws CallStateException {
362        mActivePhone.acceptCall();
363    }
364
365    public void rejectCall() throws CallStateException {
366        mActivePhone.rejectCall();
367    }
368
369    public void switchHoldingAndActive() throws CallStateException {
370        mActivePhone.switchHoldingAndActive();
371    }
372
373    public boolean canConference() {
374        return mActivePhone.canConference();
375    }
376
377    public void conference() throws CallStateException {
378        mActivePhone.conference();
379    }
380
381    public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) {
382        mActivePhone.enableEnhancedVoicePrivacy(enable, onComplete);
383    }
384
385    public void getEnhancedVoicePrivacy(Message onComplete) {
386        mActivePhone.getEnhancedVoicePrivacy(onComplete);
387    }
388
389    public boolean canTransfer() {
390        return mActivePhone.canTransfer();
391    }
392
393    public void explicitCallTransfer() throws CallStateException {
394        mActivePhone.explicitCallTransfer();
395    }
396
397    public void clearDisconnected() {
398        mActivePhone.clearDisconnected();
399    }
400
401    public Call getForegroundCall() {
402        return mActivePhone.getForegroundCall();
403    }
404
405    public Call getBackgroundCall() {
406        return mActivePhone.getBackgroundCall();
407    }
408
409    public Call getRingingCall() {
410        return mActivePhone.getRingingCall();
411    }
412
413    public Connection dial(String dialString) throws CallStateException {
414        return mActivePhone.dial(dialString);
415    }
416
417    public boolean handlePinMmi(String dialString) {
418        return mActivePhone.handlePinMmi(dialString);
419    }
420
421    public boolean handleInCallMmiCommands(String command) throws CallStateException {
422        return mActivePhone.handleInCallMmiCommands(command);
423    }
424
425    public void sendDtmf(char c) {
426        mActivePhone.sendDtmf(c);
427    }
428
429    public void startDtmf(char c) {
430        mActivePhone.startDtmf(c);
431    }
432
433    public void stopDtmf() {
434        mActivePhone.stopDtmf();
435    }
436
437    public void setRadioPower(boolean power) {
438        mActivePhone.setRadioPower(power);
439    }
440
441    public boolean getMessageWaitingIndicator() {
442        return mActivePhone.getMessageWaitingIndicator();
443    }
444
445    public boolean getCallForwardingIndicator() {
446        return mActivePhone.getCallForwardingIndicator();
447    }
448
449    public String getLine1Number() {
450        return mActivePhone.getLine1Number();
451    }
452
453    public String getCdmaMin() {
454        return mActivePhone.getCdmaMin();
455    }
456
457    public boolean isMinInfoReady() {
458        return mActivePhone.isMinInfoReady();
459    }
460
461    public String getCdmaPrlVersion() {
462        return mActivePhone.getCdmaPrlVersion();
463    }
464
465    public String getLine1AlphaTag() {
466        return mActivePhone.getLine1AlphaTag();
467    }
468
469    public void setLine1Number(String alphaTag, String number, Message onComplete) {
470        mActivePhone.setLine1Number(alphaTag, number, onComplete);
471    }
472
473    public String getVoiceMailNumber() {
474        return mActivePhone.getVoiceMailNumber();
475    }
476
477     /** @hide */
478    public int getVoiceMessageCount(){
479        return mActivePhone.getVoiceMessageCount();
480    }
481
482    public String getVoiceMailAlphaTag() {
483        return mActivePhone.getVoiceMailAlphaTag();
484    }
485
486    public void setVoiceMailNumber(String alphaTag,String voiceMailNumber,
487            Message onComplete) {
488        mActivePhone.setVoiceMailNumber(alphaTag, voiceMailNumber, onComplete);
489    }
490
491    public void getCallForwardingOption(int commandInterfaceCFReason,
492            Message onComplete) {
493        mActivePhone.getCallForwardingOption(commandInterfaceCFReason,
494                onComplete);
495    }
496
497    public void setCallForwardingOption(int commandInterfaceCFReason,
498            int commandInterfaceCFAction, String dialingNumber,
499            int timerSeconds, Message onComplete) {
500        mActivePhone.setCallForwardingOption(commandInterfaceCFReason,
501            commandInterfaceCFAction, dialingNumber, timerSeconds, onComplete);
502    }
503
504    public void getOutgoingCallerIdDisplay(Message onComplete) {
505        mActivePhone.getOutgoingCallerIdDisplay(onComplete);
506    }
507
508    public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode,
509            Message onComplete) {
510        mActivePhone.setOutgoingCallerIdDisplay(commandInterfaceCLIRMode,
511                onComplete);
512    }
513
514    public void getCallWaiting(Message onComplete) {
515        mActivePhone.getCallWaiting(onComplete);
516    }
517
518    public void setCallWaiting(boolean enable, Message onComplete) {
519        mActivePhone.setCallWaiting(enable, onComplete);
520    }
521
522    public void getAvailableNetworks(Message response) {
523        mActivePhone.getAvailableNetworks(response);
524    }
525
526    public void setNetworkSelectionModeAutomatic(Message response) {
527        mActivePhone.setNetworkSelectionModeAutomatic(response);
528    }
529
530    public void selectNetworkManually(NetworkInfo network, Message response) {
531        mActivePhone.selectNetworkManually(network, response);
532    }
533
534    public void setPreferredNetworkType(int networkType, Message response) {
535        mActivePhone.setPreferredNetworkType(networkType, response);
536    }
537
538    public void getPreferredNetworkType(Message response) {
539        mActivePhone.getPreferredNetworkType(response);
540    }
541
542    public void getNeighboringCids(Message response) {
543        mActivePhone.getNeighboringCids(response);
544    }
545
546    public void setOnPostDialCharacter(Handler h, int what, Object obj) {
547        mActivePhone.setOnPostDialCharacter(h, what, obj);
548    }
549
550    public void setMute(boolean muted) {
551        mActivePhone.setMute(muted);
552    }
553
554    public boolean getMute() {
555        return mActivePhone.getMute();
556    }
557
558    public void invokeOemRilRequestRaw(byte[] data, Message response) {
559        mActivePhone.invokeOemRilRequestRaw(data, response);
560    }
561
562    public void invokeOemRilRequestStrings(String[] strings, Message response) {
563        mActivePhone.invokeOemRilRequestStrings(strings, response);
564    }
565
566    /**
567     * @deprecated
568     */
569    public void getPdpContextList(Message response) {
570        mActivePhone.getPdpContextList(response);
571    }
572
573    public void getDataCallList(Message response) {
574        mActivePhone.getDataCallList(response);
575    }
576
577    /**
578     * @deprecated
579     */
580    public List<PdpConnection> getCurrentPdpList() {
581        return mActivePhone.getCurrentPdpList();
582    }
583
584    public List<DataConnection> getCurrentDataConnectionList() {
585        return mActivePhone.getCurrentDataConnectionList();
586    }
587
588    public void updateServiceLocation() {
589        mActivePhone.updateServiceLocation();
590    }
591
592    public void enableLocationUpdates() {
593        mActivePhone.enableLocationUpdates();
594    }
595
596    public void disableLocationUpdates() {
597        mActivePhone.disableLocationUpdates();
598    }
599
600    public void setUnitTestMode(boolean f) {
601        mActivePhone.setUnitTestMode(f);
602    }
603
604    public boolean getUnitTestMode() {
605        return mActivePhone.getUnitTestMode();
606    }
607
608    public void setBandMode(int bandMode, Message response) {
609        mActivePhone.setBandMode(bandMode, response);
610    }
611
612    public void queryAvailableBandMode(Message response) {
613        mActivePhone.queryAvailableBandMode(response);
614    }
615
616    public boolean getDataRoamingEnabled() {
617        return mActivePhone.getDataRoamingEnabled();
618    }
619
620    public void setDataRoamingEnabled(boolean enable) {
621        mActivePhone.setDataRoamingEnabled(enable);
622    }
623
624    public void queryCdmaRoamingPreference(Message response) {
625        mActivePhone.queryCdmaRoamingPreference(response);
626    }
627
628    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
629        mActivePhone.setCdmaRoamingPreference(cdmaRoamingType, response);
630    }
631
632    public void setCdmaSubscription(int cdmaSubscriptionType, Message response) {
633        mActivePhone.setCdmaSubscription(cdmaSubscriptionType, response);
634    }
635
636    public SimulatedRadioControl getSimulatedRadioControl() {
637        return mActivePhone.getSimulatedRadioControl();
638    }
639
640    public boolean enableDataConnectivity() {
641        return mActivePhone.enableDataConnectivity();
642    }
643
644    public boolean disableDataConnectivity() {
645        return mActivePhone.disableDataConnectivity();
646    }
647
648    public int enableApnType(String type) {
649        return mActivePhone.enableApnType(type);
650    }
651
652    public int disableApnType(String type) {
653        return mActivePhone.disableApnType(type);
654    }
655
656    public boolean isDataConnectivityEnabled() {
657        return mActivePhone.isDataConnectivityEnabled();
658    }
659
660    public boolean isDataConnectivityPossible() {
661        return mActivePhone.isDataConnectivityPossible();
662    }
663
664    public String getInterfaceName(String apnType) {
665        return mActivePhone.getInterfaceName(apnType);
666    }
667
668    public String getIpAddress(String apnType) {
669        return mActivePhone.getIpAddress(apnType);
670    }
671
672    public String getGateway(String apnType) {
673        return mActivePhone.getGateway(apnType);
674    }
675
676    public String[] getDnsServers(String apnType) {
677        return mActivePhone.getDnsServers(apnType);
678    }
679
680    public String getDeviceId() {
681        return mActivePhone.getDeviceId();
682    }
683
684    public String getDeviceSvn() {
685        return mActivePhone.getDeviceSvn();
686    }
687
688    public String getSubscriberId() {
689        return mActivePhone.getSubscriberId();
690    }
691
692    public String getIccSerialNumber() {
693        return mActivePhone.getIccSerialNumber();
694    }
695
696    public String getEsn() {
697        return mActivePhone.getEsn();
698    }
699
700    public String getMeid() {
701        return mActivePhone.getMeid();
702    }
703
704    public PhoneSubInfo getPhoneSubInfo(){
705        return mActivePhone.getPhoneSubInfo();
706    }
707
708    public IccSmsInterfaceManager getIccSmsInterfaceManager(){
709        return mActivePhone.getIccSmsInterfaceManager();
710    }
711
712    public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager(){
713        return mActivePhone.getIccPhoneBookInterfaceManager();
714    }
715
716    public void setTTYMode(int ttyMode, Message onComplete) {
717        mActivePhone.setTTYMode(ttyMode, onComplete);
718    }
719
720    public void queryTTYMode(Message onComplete) {
721        mActivePhone.queryTTYMode(onComplete);
722    }
723
724    public void activateCellBroadcastSms(int activate, Message response) {
725        mActivePhone.activateCellBroadcastSms(activate, response);
726    }
727
728    public void getCellBroadcastSmsConfig(Message response) {
729        mActivePhone.getCellBroadcastSmsConfig(response);
730    }
731
732    public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) {
733        mActivePhone.setCellBroadcastSmsConfig(configValuesArray, response);
734    }
735
736    public void notifyDataActivity() {
737         mActivePhone.notifyDataActivity();
738    }
739
740    public void getSmscAddress(Message result) {
741        mActivePhone.getSmscAddress(result);
742    }
743
744    public void setSmscAddress(String address, Message result) {
745        mActivePhone.setSmscAddress(address, result);
746    }
747
748    public int getCdmaEriIconIndex() {
749         return mActivePhone.getCdmaEriIconIndex();
750    }
751
752     public String getCdmaEriText() {
753         return mActivePhone.getCdmaEriText();
754     }
755
756    public int getCdmaEriIconMode() {
757         return mActivePhone.getCdmaEriIconMode();
758    }
759
760    public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete){
761        mActivePhone.sendBurstDtmf(dtmfString, on, off, onComplete);
762    }
763
764    public void exitEmergencyCallbackMode(){
765        mActivePhone.exitEmergencyCallbackMode();
766    }
767
768    public boolean isOtaSpNumber(String dialStr){
769        return mActivePhone.isOtaSpNumber(dialStr);
770    }
771
772    public void registerForCallWaiting(Handler h, int what, Object obj){
773        mActivePhone.registerForCallWaiting(h,what,obj);
774    }
775
776    public void unregisterForCallWaiting(Handler h){
777        mActivePhone.unregisterForCallWaiting(h);
778    }
779
780    public void registerForSignalInfo(Handler h, int what, Object obj) {
781        mActivePhone.registerForSignalInfo(h,what,obj);
782    }
783
784    public void unregisterForSignalInfo(Handler h) {
785        mActivePhone.unregisterForSignalInfo(h);
786    }
787
788    public void registerForDisplayInfo(Handler h, int what, Object obj) {
789        mActivePhone.registerForDisplayInfo(h,what,obj);
790    }
791
792    public void unregisterForDisplayInfo(Handler h) {
793        mActivePhone.unregisterForDisplayInfo(h);
794    }
795
796    public void registerForNumberInfo(Handler h, int what, Object obj) {
797        mActivePhone.registerForNumberInfo(h, what, obj);
798    }
799
800    public void unregisterForNumberInfo(Handler h) {
801        mActivePhone.unregisterForNumberInfo(h);
802    }
803
804    public void registerForRedirectedNumberInfo(Handler h, int what, Object obj) {
805        mActivePhone.registerForRedirectedNumberInfo(h, what, obj);
806    }
807
808    public void unregisterForRedirectedNumberInfo(Handler h) {
809        mActivePhone.unregisterForRedirectedNumberInfo(h);
810    }
811
812    public void registerForLineControlInfo(Handler h, int what, Object obj) {
813        mActivePhone.registerForLineControlInfo( h, what, obj);
814    }
815
816    public void unregisterForLineControlInfo(Handler h) {
817        mActivePhone.unregisterForLineControlInfo(h);
818    }
819
820    public void registerFoT53ClirlInfo(Handler h, int what, Object obj) {
821        mActivePhone.registerFoT53ClirlInfo(h, what, obj);
822    }
823
824    public void unregisterForT53ClirInfo(Handler h) {
825        mActivePhone.unregisterForT53ClirInfo(h);
826    }
827
828    public void registerForT53AudioControlInfo(Handler h, int what, Object obj) {
829        mActivePhone.registerForT53AudioControlInfo( h, what, obj);
830    }
831
832    public void unregisterForT53AudioControlInfo(Handler h) {
833        mActivePhone.unregisterForT53AudioControlInfo(h);
834    }
835
836    public void setOnEcbModeExitResponse(Handler h, int what, Object obj){
837        mActivePhone.setOnEcbModeExitResponse(h,what,obj);
838    }
839
840    public void unsetOnEcbModeExitResponse(Handler h){
841        mActivePhone.unsetOnEcbModeExitResponse(h);
842    }
843}
844