BaseCommands.java revision a8467dd0c524787104b1ccdddc5e8af10ba729ed
1/*
2 * Copyright (C) 2006 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.content.Context;
21import android.os.Message;
22import android.os.RegistrantList;
23import android.os.Registrant;
24import android.os.Handler;
25import android.os.AsyncResult;
26import android.telephony.TelephonyManager;
27
28/**
29 * {@hide}
30 */
31public abstract class BaseCommands implements CommandsInterface {
32    //***** Instance Variables
33    protected Context mContext;
34    protected RadioState mState = RadioState.RADIO_UNAVAILABLE;
35    protected Object mStateMonitor = new Object();
36
37    protected RegistrantList mRadioStateChangedRegistrants = new RegistrantList();
38    protected RegistrantList mOnRegistrants = new RegistrantList();
39    protected RegistrantList mAvailRegistrants = new RegistrantList();
40    protected RegistrantList mOffOrNotAvailRegistrants = new RegistrantList();
41    protected RegistrantList mNotAvailRegistrants = new RegistrantList();
42    protected RegistrantList mCallStateRegistrants = new RegistrantList();
43    protected RegistrantList mVoiceNetworkStateRegistrants = new RegistrantList();
44    protected RegistrantList mDataNetworkStateRegistrants = new RegistrantList();
45    protected RegistrantList mVoiceRadioTechChangedRegistrants = new RegistrantList();
46    protected RegistrantList mImsNetworkStateChangedRegistrants = new RegistrantList();
47    protected RegistrantList mIccStatusChangedRegistrants = new RegistrantList();
48    protected RegistrantList mVoicePrivacyOnRegistrants = new RegistrantList();
49    protected RegistrantList mVoicePrivacyOffRegistrants = new RegistrantList();
50    protected Registrant mUnsolOemHookRawRegistrant;
51    protected RegistrantList mOtaProvisionRegistrants = new RegistrantList();
52    protected RegistrantList mCallWaitingInfoRegistrants = new RegistrantList();
53    protected RegistrantList mDisplayInfoRegistrants = new RegistrantList();
54    protected RegistrantList mSignalInfoRegistrants = new RegistrantList();
55    protected RegistrantList mNumberInfoRegistrants = new RegistrantList();
56    protected RegistrantList mRedirNumInfoRegistrants = new RegistrantList();
57    protected RegistrantList mLineControlInfoRegistrants = new RegistrantList();
58    protected RegistrantList mT53ClirInfoRegistrants = new RegistrantList();
59    protected RegistrantList mT53AudCntrlInfoRegistrants = new RegistrantList();
60    protected RegistrantList mRingbackToneRegistrants = new RegistrantList();
61    protected RegistrantList mResendIncallMuteRegistrants = new RegistrantList();
62    protected RegistrantList mCdmaSubscriptionChangedRegistrants = new RegistrantList();
63    protected RegistrantList mCdmaPrlChangedRegistrants = new RegistrantList();
64    protected RegistrantList mExitEmergencyCallbackModeRegistrants = new RegistrantList();
65    protected RegistrantList mRilConnectedRegistrants = new RegistrantList();
66    protected RegistrantList mIccRefreshRegistrants = new RegistrantList();
67    protected RegistrantList mRilCellInfoListRegistrants = new RegistrantList();
68    protected RegistrantList mSubscriptionStatusRegistrants = new RegistrantList();
69    protected RegistrantList mSrvccStateRegistrants = new RegistrantList();
70    protected RegistrantList mHardwareConfigChangeRegistrants = new RegistrantList();
71
72    protected Registrant mGsmSmsRegistrant;
73    protected Registrant mCdmaSmsRegistrant;
74    protected Registrant mNITZTimeRegistrant;
75    protected Registrant mSignalStrengthRegistrant;
76    protected Registrant mUSSDRegistrant;
77    protected Registrant mSmsOnSimRegistrant;
78    protected Registrant mSmsStatusRegistrant;
79    protected Registrant mSsnRegistrant;
80    protected Registrant mCatSessionEndRegistrant;
81    protected Registrant mCatProCmdRegistrant;
82    protected Registrant mCatEventRegistrant;
83    protected Registrant mCatCallSetUpRegistrant;
84    protected Registrant mIccSmsFullRegistrant;
85    protected Registrant mEmergencyCallbackModeRegistrant;
86    protected Registrant mRingRegistrant;
87    protected Registrant mRestrictedStateRegistrant;
88    protected Registrant mGsmBroadcastSmsRegistrant;
89
90    // Preferred network type received from PhoneFactory.
91    // This is used when establishing a connection to the
92    // vendor ril so it starts up in the correct mode.
93    protected int mPreferredNetworkType;
94    // CDMA subscription received from PhoneFactory
95    protected int mCdmaSubscription;
96    // Type of Phone, GSM or CDMA. Set by CDMAPhone or GSMPhone.
97    protected int mPhoneType;
98    // RIL Version
99    protected int mRilVersion = -1;
100
101    public BaseCommands(Context context) {
102        mContext = context;  // May be null (if so we won't log statistics)
103    }
104
105    //***** CommandsInterface implementation
106
107    @Override
108    public RadioState getRadioState() {
109        return mState;
110    }
111
112    @Override
113    public void registerForRadioStateChanged(Handler h, int what, Object obj) {
114        Registrant r = new Registrant (h, what, obj);
115
116        synchronized (mStateMonitor) {
117            mRadioStateChangedRegistrants.add(r);
118            r.notifyRegistrant();
119        }
120    }
121
122    @Override
123    public void unregisterForRadioStateChanged(Handler h) {
124        synchronized (mStateMonitor) {
125            mRadioStateChangedRegistrants.remove(h);
126        }
127    }
128
129    public void registerForImsNetworkStateChanged(Handler h, int what, Object obj) {
130        Registrant r = new Registrant (h, what, obj);
131        mImsNetworkStateChangedRegistrants.add(r);
132    }
133
134    public void unregisterForImsNetworkStateChanged(Handler h) {
135        mImsNetworkStateChangedRegistrants.remove(h);
136    }
137
138    @Override
139    public void registerForOn(Handler h, int what, Object obj) {
140        Registrant r = new Registrant (h, what, obj);
141
142        synchronized (mStateMonitor) {
143            mOnRegistrants.add(r);
144
145            if (mState.isOn()) {
146                r.notifyRegistrant(new AsyncResult(null, null, null));
147            }
148        }
149    }
150    @Override
151    public void unregisterForOn(Handler h) {
152        synchronized (mStateMonitor) {
153            mOnRegistrants.remove(h);
154        }
155    }
156
157
158    @Override
159    public void registerForAvailable(Handler h, int what, Object obj) {
160        Registrant r = new Registrant (h, what, obj);
161
162        synchronized (mStateMonitor) {
163            mAvailRegistrants.add(r);
164
165            if (mState.isAvailable()) {
166                r.notifyRegistrant(new AsyncResult(null, null, null));
167            }
168        }
169    }
170
171    @Override
172    public void unregisterForAvailable(Handler h) {
173        synchronized(mStateMonitor) {
174            mAvailRegistrants.remove(h);
175        }
176    }
177
178    @Override
179    public void registerForNotAvailable(Handler h, int what, Object obj) {
180        Registrant r = new Registrant (h, what, obj);
181
182        synchronized (mStateMonitor) {
183            mNotAvailRegistrants.add(r);
184
185            if (!mState.isAvailable()) {
186                r.notifyRegistrant(new AsyncResult(null, null, null));
187            }
188        }
189    }
190
191    @Override
192    public void unregisterForNotAvailable(Handler h) {
193        synchronized (mStateMonitor) {
194            mNotAvailRegistrants.remove(h);
195        }
196    }
197
198    @Override
199    public void registerForOffOrNotAvailable(Handler h, int what, Object obj) {
200        Registrant r = new Registrant (h, what, obj);
201
202        synchronized (mStateMonitor) {
203            mOffOrNotAvailRegistrants.add(r);
204
205            if (mState == RadioState.RADIO_OFF || !mState.isAvailable()) {
206                r.notifyRegistrant(new AsyncResult(null, null, null));
207            }
208        }
209    }
210    @Override
211    public void unregisterForOffOrNotAvailable(Handler h) {
212        synchronized(mStateMonitor) {
213            mOffOrNotAvailRegistrants.remove(h);
214        }
215    }
216
217    @Override
218    public void registerForCallStateChanged(Handler h, int what, Object obj) {
219        Registrant r = new Registrant (h, what, obj);
220
221        mCallStateRegistrants.add(r);
222    }
223
224    @Override
225    public void unregisterForCallStateChanged(Handler h) {
226        mCallStateRegistrants.remove(h);
227    }
228
229    @Override
230    public void registerForVoiceNetworkStateChanged(Handler h, int what, Object obj) {
231        Registrant r = new Registrant (h, what, obj);
232
233        mVoiceNetworkStateRegistrants.add(r);
234    }
235
236    @Override
237    public void unregisterForVoiceNetworkStateChanged(Handler h) {
238        mVoiceNetworkStateRegistrants.remove(h);
239    }
240
241    @Override
242    public void registerForDataNetworkStateChanged(Handler h, int what, Object obj) {
243        Registrant r = new Registrant (h, what, obj);
244
245        mDataNetworkStateRegistrants.add(r);
246    }
247
248    @Override
249    public void unregisterForDataNetworkStateChanged(Handler h) {
250        mDataNetworkStateRegistrants.remove(h);
251    }
252
253    @Override
254    public void registerForVoiceRadioTechChanged(Handler h, int what, Object obj) {
255        Registrant r = new Registrant (h, what, obj);
256        mVoiceRadioTechChangedRegistrants.add(r);
257    }
258
259    @Override
260    public void unregisterForVoiceRadioTechChanged(Handler h) {
261        mVoiceRadioTechChangedRegistrants.remove(h);
262    }
263
264    @Override
265    public void registerForIccStatusChanged(Handler h, int what, Object obj) {
266        Registrant r = new Registrant (h, what, obj);
267        mIccStatusChangedRegistrants.add(r);
268    }
269
270    @Override
271    public void unregisterForIccStatusChanged(Handler h) {
272        mIccStatusChangedRegistrants.remove(h);
273    }
274
275    @Override
276    public void setOnNewGsmSms(Handler h, int what, Object obj) {
277        mGsmSmsRegistrant = new Registrant (h, what, obj);
278    }
279
280    @Override
281    public void unSetOnNewGsmSms(Handler h) {
282        mGsmSmsRegistrant.clear();
283    }
284
285    @Override
286    public void setOnNewCdmaSms(Handler h, int what, Object obj) {
287        mCdmaSmsRegistrant = new Registrant (h, what, obj);
288    }
289
290    @Override
291    public void unSetOnNewCdmaSms(Handler h) {
292        mCdmaSmsRegistrant.clear();
293    }
294
295    @Override
296    public void setOnNewGsmBroadcastSms(Handler h, int what, Object obj) {
297        mGsmBroadcastSmsRegistrant = new Registrant (h, what, obj);
298    }
299
300    @Override
301    public void unSetOnNewGsmBroadcastSms(Handler h) {
302        mGsmBroadcastSmsRegistrant.clear();
303    }
304
305    @Override
306    public void setOnSmsOnSim(Handler h, int what, Object obj) {
307        mSmsOnSimRegistrant = new Registrant (h, what, obj);
308    }
309
310    @Override
311    public void unSetOnSmsOnSim(Handler h) {
312        mSmsOnSimRegistrant.clear();
313    }
314
315    @Override
316    public void setOnSmsStatus(Handler h, int what, Object obj) {
317        mSmsStatusRegistrant = new Registrant (h, what, obj);
318    }
319
320    @Override
321    public void unSetOnSmsStatus(Handler h) {
322        mSmsStatusRegistrant.clear();
323    }
324
325    @Override
326    public void setOnSignalStrengthUpdate(Handler h, int what, Object obj) {
327        mSignalStrengthRegistrant = new Registrant (h, what, obj);
328    }
329
330    @Override
331    public void unSetOnSignalStrengthUpdate(Handler h) {
332        mSignalStrengthRegistrant.clear();
333    }
334
335    @Override
336    public void setOnNITZTime(Handler h, int what, Object obj) {
337        mNITZTimeRegistrant = new Registrant (h, what, obj);
338    }
339
340    @Override
341    public void unSetOnNITZTime(Handler h) {
342        mNITZTimeRegistrant.clear();
343    }
344
345    @Override
346    public void setOnUSSD(Handler h, int what, Object obj) {
347        mUSSDRegistrant = new Registrant (h, what, obj);
348    }
349
350    @Override
351    public void unSetOnUSSD(Handler h) {
352        mUSSDRegistrant.clear();
353    }
354
355    @Override
356    public void setOnSuppServiceNotification(Handler h, int what, Object obj) {
357        mSsnRegistrant = new Registrant (h, what, obj);
358    }
359
360    @Override
361    public void unSetOnSuppServiceNotification(Handler h) {
362        mSsnRegistrant.clear();
363    }
364
365    @Override
366    public void setOnCatSessionEnd(Handler h, int what, Object obj) {
367        mCatSessionEndRegistrant = new Registrant (h, what, obj);
368    }
369
370    @Override
371    public void unSetOnCatSessionEnd(Handler h) {
372        mCatSessionEndRegistrant.clear();
373    }
374
375    @Override
376    public void setOnCatProactiveCmd(Handler h, int what, Object obj) {
377        mCatProCmdRegistrant = new Registrant (h, what, obj);
378    }
379
380    @Override
381    public void unSetOnCatProactiveCmd(Handler h) {
382        mCatProCmdRegistrant.clear();
383    }
384
385    @Override
386    public void setOnCatEvent(Handler h, int what, Object obj) {
387        mCatEventRegistrant = new Registrant (h, what, obj);
388    }
389
390    @Override
391    public void unSetOnCatEvent(Handler h) {
392        mCatEventRegistrant.clear();
393    }
394
395    @Override
396    public void setOnCatCallSetUp(Handler h, int what, Object obj) {
397        mCatCallSetUpRegistrant = new Registrant (h, what, obj);
398    }
399
400    @Override
401    public void unSetOnCatCallSetUp(Handler h) {
402        mCatCallSetUpRegistrant.clear();
403    }
404
405    @Override
406    public void setOnIccSmsFull(Handler h, int what, Object obj) {
407        mIccSmsFullRegistrant = new Registrant (h, what, obj);
408    }
409
410    @Override
411    public void unSetOnIccSmsFull(Handler h) {
412        mIccSmsFullRegistrant.clear();
413    }
414
415    @Override
416    public void registerForIccRefresh(Handler h, int what, Object obj) {
417        Registrant r = new Registrant (h, what, obj);
418        mIccRefreshRegistrants.add(r);
419    }
420    @Override
421    public void setOnIccRefresh(Handler h, int what, Object obj) {
422        registerForIccRefresh(h, what, obj);
423    }
424
425    @Override
426    public void setEmergencyCallbackMode(Handler h, int what, Object obj) {
427        mEmergencyCallbackModeRegistrant = new Registrant (h, what, obj);
428    }
429
430    @Override
431    public void unregisterForIccRefresh(Handler h) {
432        mIccRefreshRegistrants.remove(h);
433    }
434    @Override
435    public void unsetOnIccRefresh(Handler h) {
436        unregisterForIccRefresh(h);
437    }
438
439    @Override
440    public void setOnCallRing(Handler h, int what, Object obj) {
441        mRingRegistrant = new Registrant (h, what, obj);
442    }
443
444    @Override
445    public void unSetOnCallRing(Handler h) {
446        mRingRegistrant.clear();
447    }
448
449    @Override
450    public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj) {
451        Registrant r = new Registrant (h, what, obj);
452        mVoicePrivacyOnRegistrants.add(r);
453    }
454
455    @Override
456    public void unregisterForInCallVoicePrivacyOn(Handler h){
457        mVoicePrivacyOnRegistrants.remove(h);
458    }
459
460    @Override
461    public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj) {
462        Registrant r = new Registrant (h, what, obj);
463        mVoicePrivacyOffRegistrants.add(r);
464    }
465
466    @Override
467    public void unregisterForInCallVoicePrivacyOff(Handler h){
468        mVoicePrivacyOffRegistrants.remove(h);
469    }
470
471    @Override
472    public void setOnRestrictedStateChanged(Handler h, int what, Object obj) {
473        mRestrictedStateRegistrant = new Registrant (h, what, obj);
474    }
475
476    @Override
477    public void unSetOnRestrictedStateChanged(Handler h) {
478        mRestrictedStateRegistrant.clear();
479    }
480
481    @Override
482    public void registerForDisplayInfo(Handler h, int what, Object obj) {
483        Registrant r = new Registrant (h, what, obj);
484        mDisplayInfoRegistrants.add(r);
485    }
486
487    @Override
488    public void unregisterForDisplayInfo(Handler h) {
489        mDisplayInfoRegistrants.remove(h);
490    }
491
492    @Override
493    public void registerForCallWaitingInfo(Handler h, int what, Object obj) {
494        Registrant r = new Registrant (h, what, obj);
495        mCallWaitingInfoRegistrants.add(r);
496    }
497
498    @Override
499    public void unregisterForCallWaitingInfo(Handler h) {
500        mCallWaitingInfoRegistrants.remove(h);
501    }
502
503    @Override
504    public void registerForSignalInfo(Handler h, int what, Object obj) {
505        Registrant r = new Registrant (h, what, obj);
506        mSignalInfoRegistrants.add(r);
507    }
508
509    public void setOnUnsolOemHookRaw(Handler h, int what, Object obj) {
510        mUnsolOemHookRawRegistrant = new Registrant (h, what, obj);
511    }
512
513    public void unSetOnUnsolOemHookRaw(Handler h) {
514        mUnsolOemHookRawRegistrant.clear();
515    }
516
517    @Override
518    public void unregisterForSignalInfo(Handler h) {
519        mSignalInfoRegistrants.remove(h);
520    }
521
522    @Override
523    public void registerForCdmaOtaProvision(Handler h,int what, Object obj){
524        Registrant r = new Registrant (h, what, obj);
525        mOtaProvisionRegistrants.add(r);
526    }
527
528    @Override
529    public void unregisterForCdmaOtaProvision(Handler h){
530        mOtaProvisionRegistrants.remove(h);
531    }
532
533    @Override
534    public void registerForNumberInfo(Handler h,int what, Object obj) {
535        Registrant r = new Registrant (h, what, obj);
536        mNumberInfoRegistrants.add(r);
537    }
538
539    @Override
540    public void unregisterForNumberInfo(Handler h){
541        mNumberInfoRegistrants.remove(h);
542    }
543
544     @Override
545    public void registerForRedirectedNumberInfo(Handler h,int what, Object obj) {
546        Registrant r = new Registrant (h, what, obj);
547        mRedirNumInfoRegistrants.add(r);
548    }
549
550    @Override
551    public void unregisterForRedirectedNumberInfo(Handler h) {
552        mRedirNumInfoRegistrants.remove(h);
553    }
554
555    @Override
556    public void registerForLineControlInfo(Handler h, int what, Object obj) {
557        Registrant r = new Registrant (h, what, obj);
558        mLineControlInfoRegistrants.add(r);
559    }
560
561    @Override
562    public void unregisterForLineControlInfo(Handler h) {
563        mLineControlInfoRegistrants.remove(h);
564    }
565
566    @Override
567    public void registerFoT53ClirlInfo(Handler h,int what, Object obj) {
568        Registrant r = new Registrant (h, what, obj);
569        mT53ClirInfoRegistrants.add(r);
570    }
571
572    @Override
573    public void unregisterForT53ClirInfo(Handler h) {
574        mT53ClirInfoRegistrants.remove(h);
575    }
576
577    @Override
578    public void registerForT53AudioControlInfo(Handler h,int what, Object obj) {
579        Registrant r = new Registrant (h, what, obj);
580        mT53AudCntrlInfoRegistrants.add(r);
581    }
582
583    @Override
584    public void unregisterForT53AudioControlInfo(Handler h) {
585        mT53AudCntrlInfoRegistrants.remove(h);
586    }
587
588    @Override
589    public void registerForRingbackTone(Handler h, int what, Object obj) {
590        Registrant r = new Registrant (h, what, obj);
591        mRingbackToneRegistrants.add(r);
592    }
593
594    @Override
595    public void unregisterForRingbackTone(Handler h) {
596        mRingbackToneRegistrants.remove(h);
597    }
598
599    @Override
600    public void registerForResendIncallMute(Handler h, int what, Object obj) {
601        Registrant r = new Registrant (h, what, obj);
602        mResendIncallMuteRegistrants.add(r);
603    }
604
605    @Override
606    public void unregisterForResendIncallMute(Handler h) {
607        mResendIncallMuteRegistrants.remove(h);
608    }
609
610    @Override
611    public void registerForCdmaSubscriptionChanged(Handler h, int what, Object obj) {
612        Registrant r = new Registrant (h, what, obj);
613        mCdmaSubscriptionChangedRegistrants.add(r);
614    }
615
616    @Override
617    public void unregisterForCdmaSubscriptionChanged(Handler h) {
618        mCdmaSubscriptionChangedRegistrants.remove(h);
619    }
620
621    @Override
622    public void registerForCdmaPrlChanged(Handler h, int what, Object obj) {
623        Registrant r = new Registrant (h, what, obj);
624        mCdmaPrlChangedRegistrants.add(r);
625    }
626
627    @Override
628    public void unregisterForCdmaPrlChanged(Handler h) {
629        mCdmaPrlChangedRegistrants.remove(h);
630    }
631
632    @Override
633    public void registerForExitEmergencyCallbackMode(Handler h, int what, Object obj) {
634        Registrant r = new Registrant (h, what, obj);
635        mExitEmergencyCallbackModeRegistrants.add(r);
636    }
637
638    @Override
639    public void unregisterForExitEmergencyCallbackMode(Handler h) {
640        mExitEmergencyCallbackModeRegistrants.remove(h);
641    }
642
643    @Override
644    public void registerForHardwareConfigChanged(Handler h, int what, Object obj) {
645        Registrant r = new Registrant (h, what, obj);
646        mHardwareConfigChangeRegistrants.add(r);
647    }
648
649    @Override
650    public void unregisterForHardwareConfigChanged(Handler h) {
651        mHardwareConfigChangeRegistrants.remove(h);
652    }
653
654    /**
655     * {@inheritDoc}
656     */
657    @Override
658    public void registerForRilConnected(Handler h, int what, Object obj) {
659        Registrant r = new Registrant (h, what, obj);
660        mRilConnectedRegistrants.add(r);
661        if (mRilVersion != -1) {
662            r.notifyRegistrant(new AsyncResult(null, new Integer(mRilVersion), null));
663        }
664    }
665
666    @Override
667    public void unregisterForRilConnected(Handler h) {
668        mRilConnectedRegistrants.remove(h);
669    }
670
671     public void registerForSubscriptionStatusChanged(Handler h, int what, Object obj) {
672         Registrant r = new Registrant (h, what, obj);
673         mSubscriptionStatusRegistrants.add(r);
674     }
675
676     public void unregisterForSubscriptionStatusChanged(Handler h) {
677         mSubscriptionStatusRegistrants.remove(h);
678     }
679
680    //***** Protected Methods
681    /**
682     * Store new RadioState and send notification based on the changes
683     *
684     * This function is called only by RIL.java when receiving unsolicited
685     * RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED
686     *
687     * RadioState has 3 values : RADIO_OFF, RADIO_UNAVAILABLE, RADIO_ON.
688     *
689     * @param newState new RadioState decoded from RIL_UNSOL_RADIO_STATE_CHANGED
690     */
691    protected void setRadioState(RadioState newState) {
692        RadioState oldState;
693
694        synchronized (mStateMonitor) {
695            oldState = mState;
696            mState = newState;
697
698            if (oldState == mState) {
699                // no state transition
700                return;
701            }
702
703            mRadioStateChangedRegistrants.notifyRegistrants();
704
705            if (mState.isAvailable() && !oldState.isAvailable()) {
706                mAvailRegistrants.notifyRegistrants();
707                onRadioAvailable();
708            }
709
710            if (!mState.isAvailable() && oldState.isAvailable()) {
711                mNotAvailRegistrants.notifyRegistrants();
712            }
713
714            if (mState.isOn() && !oldState.isOn()) {
715                mOnRegistrants.notifyRegistrants();
716            }
717
718            if ((!mState.isOn() || !mState.isAvailable())
719                && !((!oldState.isOn() || !oldState.isAvailable()))
720            ) {
721                mOffOrNotAvailRegistrants.notifyRegistrants();
722            }
723        }
724    }
725
726    protected void onRadioAvailable() {
727    }
728
729    /**
730     * {@inheritDoc}
731     */
732    @Override
733    public int getLteOnCdmaMode() {
734        return TelephonyManager.getLteOnCdmaModeStatic();
735    }
736
737    /**
738     * {@inheritDoc}
739     */
740    @Override
741    public void registerForCellInfoList(Handler h, int what, Object obj) {
742        Registrant r = new Registrant (h, what, obj);
743        mRilCellInfoListRegistrants.add(r);
744    }
745    @Override
746    public void unregisterForCellInfoList(Handler h) {
747        mRilCellInfoListRegistrants.remove(h);
748    }
749
750    @Override
751    public void registerForSrvccStateChanged(Handler h, int what, Object obj) {
752        Registrant r = new Registrant (h, what, obj);
753
754        mSrvccStateRegistrants.add(r);
755    }
756
757    @Override
758    public void unregisterForSrvccStateChanged(Handler h) {
759        mSrvccStateRegistrants.remove(h);
760    }
761
762    @Override
763    public void testingEmergencyCall() {}
764
765    @Override
766    public int getRilVersion() {
767        return mRilVersion;
768    }
769
770    public void setUiccSubscription(int slotId, int appIndex, int subId, int subStatus,
771            Message response) {
772    }
773
774    public void setDataAllowed(boolean allowed, Message response) {
775    }
776}
777