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