• 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.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.compat.annotation.UnsupportedAppUsage;
23 import android.content.Context;
24 import android.os.AsyncResult;
25 import android.os.Build;
26 import android.os.Handler;
27 import android.os.Message;
28 import android.os.Registrant;
29 import android.os.RegistrantList;
30 import android.telephony.Annotation.RadioPowerState;
31 import android.telephony.BarringInfo;
32 import android.telephony.TelephonyManager;
33 import android.telephony.emergency.EmergencyNumber;
34 
35 import com.android.internal.telephony.uicc.SimPhonebookRecord;
36 
37 import java.util.ArrayList;
38 import java.util.List;
39 
40 /**
41  * {@hide}
42  */
43 public abstract class BaseCommands implements CommandsInterface {
44     //***** Instance Variables
45     @UnsupportedAppUsage
46     protected Context mContext;
47     protected int mState = TelephonyManager.RADIO_POWER_UNAVAILABLE;
48     @UnsupportedAppUsage
49     protected Object mStateMonitor = new Object();
50 
51     protected RegistrantList mRadioStateChangedRegistrants = new RegistrantList();
52     protected RegistrantList mOnRegistrants = new RegistrantList();
53     protected RegistrantList mAvailRegistrants = new RegistrantList();
54     protected RegistrantList mOffOrNotAvailRegistrants = new RegistrantList();
55     protected RegistrantList mNotAvailRegistrants = new RegistrantList();
56     @UnsupportedAppUsage
57     protected RegistrantList mCallStateRegistrants = new RegistrantList();
58     protected RegistrantList mNetworkStateRegistrants = new RegistrantList();
59     protected RegistrantList mDataCallListChangedRegistrants = new RegistrantList();
60     protected RegistrantList mApnUnthrottledRegistrants = new RegistrantList();
61     protected RegistrantList mSlicingConfigChangedRegistrants = new RegistrantList();
62     @UnsupportedAppUsage
63     protected RegistrantList mVoiceRadioTechChangedRegistrants = new RegistrantList();
64     @UnsupportedAppUsage
65     protected RegistrantList mImsNetworkStateChangedRegistrants = new RegistrantList();
66     @UnsupportedAppUsage
67     protected RegistrantList mIccStatusChangedRegistrants = new RegistrantList();
68     protected RegistrantList mIccSlotStatusChangedRegistrants = new RegistrantList();
69     protected RegistrantList mVoicePrivacyOnRegistrants = new RegistrantList();
70     protected RegistrantList mVoicePrivacyOffRegistrants = new RegistrantList();
71     @UnsupportedAppUsage
72     protected Registrant mUnsolOemHookRawRegistrant;
73     @UnsupportedAppUsage
74     protected RegistrantList mOtaProvisionRegistrants = new RegistrantList();
75     @UnsupportedAppUsage
76     protected RegistrantList mCallWaitingInfoRegistrants = new RegistrantList();
77     protected RegistrantList mDisplayInfoRegistrants = new RegistrantList();
78     protected RegistrantList mSignalInfoRegistrants = new RegistrantList();
79     protected RegistrantList mNumberInfoRegistrants = new RegistrantList();
80     protected RegistrantList mRedirNumInfoRegistrants = new RegistrantList();
81     protected RegistrantList mLineControlInfoRegistrants = new RegistrantList();
82     protected RegistrantList mT53ClirInfoRegistrants = new RegistrantList();
83     protected RegistrantList mT53AudCntrlInfoRegistrants = new RegistrantList();
84     @UnsupportedAppUsage
85     protected RegistrantList mRingbackToneRegistrants = new RegistrantList();
86     @UnsupportedAppUsage
87     protected RegistrantList mResendIncallMuteRegistrants = new RegistrantList();
88     @UnsupportedAppUsage
89     protected RegistrantList mCdmaSubscriptionChangedRegistrants = new RegistrantList();
90     @UnsupportedAppUsage
91     protected RegistrantList mCdmaPrlChangedRegistrants = new RegistrantList();
92     @UnsupportedAppUsage
93     protected RegistrantList mExitEmergencyCallbackModeRegistrants = new RegistrantList();
94     protected RegistrantList mRilConnectedRegistrants = new RegistrantList();
95     @UnsupportedAppUsage
96     protected RegistrantList mIccRefreshRegistrants = new RegistrantList();
97     @UnsupportedAppUsage
98     protected RegistrantList mRilCellInfoListRegistrants = new RegistrantList();
99     @UnsupportedAppUsage
100     protected RegistrantList mSubscriptionStatusRegistrants = new RegistrantList();
101     @UnsupportedAppUsage
102     protected RegistrantList mSrvccStateRegistrants = new RegistrantList();
103     @UnsupportedAppUsage
104     protected RegistrantList mHardwareConfigChangeRegistrants = new RegistrantList();
105     @UnsupportedAppUsage
106     protected RegistrantList mPhoneRadioCapabilityChangedRegistrants =
107             new RegistrantList();
108     protected RegistrantList mPcoDataRegistrants = new RegistrantList();
109     protected RegistrantList mCarrierInfoForImsiEncryptionRegistrants = new RegistrantList();
110     protected RegistrantList mRilNetworkScanResultRegistrants = new RegistrantList();
111     protected RegistrantList mModemResetRegistrants = new RegistrantList();
112     protected RegistrantList mNattKeepaliveStatusRegistrants = new RegistrantList();
113     protected RegistrantList mPhysicalChannelConfigurationRegistrants = new RegistrantList();
114     protected RegistrantList mLceInfoRegistrants = new RegistrantList();
115     protected RegistrantList mEmergencyNumberListRegistrants = new RegistrantList();
116     protected RegistrantList mUiccApplicationsEnablementRegistrants = new RegistrantList();
117     protected RegistrantList mBarringInfoChangedRegistrants = new RegistrantList();
118     protected RegistrantList mSimPhonebookChangedRegistrants = new RegistrantList();
119     protected RegistrantList mSimPhonebookRecordsReceivedRegistrants = new RegistrantList();
120     protected RegistrantList mEmergencyNetworkScanRegistrants = new RegistrantList();
121     protected RegistrantList mConnectionSetupFailureRegistrants = new RegistrantList();
122     protected RegistrantList mNotifyAnbrRegistrants = new RegistrantList();
123     protected RegistrantList mTriggerImsDeregistrationRegistrants = new RegistrantList();
124     protected RegistrantList mPendingSatelliteMessageCountRegistrants = new RegistrantList();
125     protected RegistrantList mNewSatelliteMessagesRegistrants = new RegistrantList();
126     protected RegistrantList mSatelliteMessagesTransferCompleteRegistrants = new RegistrantList();
127     protected RegistrantList mSatellitePointingInfoChangedRegistrants = new RegistrantList();
128     protected RegistrantList mSatelliteModeChangedRegistrants = new RegistrantList();
129     protected RegistrantList mSatelliteRadioTechnologyChangedRegistrants = new RegistrantList();
130     protected RegistrantList mSatelliteProvisionStateChangedRegistrants = new RegistrantList();
131 
132     @UnsupportedAppUsage
133     protected Registrant mGsmSmsRegistrant;
134     @UnsupportedAppUsage
135     protected Registrant mCdmaSmsRegistrant;
136     @UnsupportedAppUsage
137     protected Registrant mNITZTimeRegistrant;
138     @UnsupportedAppUsage
139     protected Registrant mSignalStrengthRegistrant;
140     @UnsupportedAppUsage
141     protected Registrant mUSSDRegistrant;
142     @UnsupportedAppUsage
143     protected Registrant mSmsOnSimRegistrant;
144     @UnsupportedAppUsage
145     protected Registrant mSmsStatusRegistrant;
146     @UnsupportedAppUsage
147     protected Registrant mSsnRegistrant;
148     @UnsupportedAppUsage
149     protected Registrant mCatSessionEndRegistrant;
150     @UnsupportedAppUsage
151     protected Registrant mCatProCmdRegistrant;
152     @UnsupportedAppUsage
153     protected Registrant mCatEventRegistrant;
154     @UnsupportedAppUsage
155     protected Registrant mCatCallSetUpRegistrant;
156     @UnsupportedAppUsage
157     protected Registrant mIccSmsFullRegistrant;
158     @UnsupportedAppUsage
159     protected Registrant mEmergencyCallbackModeRegistrant;
160     @UnsupportedAppUsage
161     protected Registrant mRingRegistrant;
162     @UnsupportedAppUsage
163     protected Registrant mRestrictedStateRegistrant;
164     @UnsupportedAppUsage
165     protected Registrant mGsmBroadcastSmsRegistrant;
166     @UnsupportedAppUsage
167     protected Registrant mCatCcAlphaRegistrant;
168     @UnsupportedAppUsage
169     protected Registrant mSsRegistrant;
170     protected Registrant mRegistrationFailedRegistrant;
171 
172     // Lock that mLastEmergencyNumberListIndication uses.
173     private Object mLastEmergencyNumberListIndicationLock = new Object();
174     // Cache last emergency number list indication from radio
175     private final List<EmergencyNumber> mLastEmergencyNumberListIndication = new ArrayList<>();
176 
177     // The last barring information received
178     protected BarringInfo mLastBarringInfo = new BarringInfo();
179     // Preferred network type received from PhoneFactory.
180     // This is used when establishing a connection to the
181     // vendor ril so it starts up in the correct mode.
182     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
183     protected int mAllowedNetworkTypesBitmask;
184     // CDMA subscription received from PhoneFactory
185     protected int mCdmaSubscription;
186     // Type of Phone, GSM or CDMA. Set by GsmCdmaPhone.
187     @UnsupportedAppUsage
188     protected int mPhoneType;
189     // RIL Version
190     protected int mRilVersion = -1;
191 
BaseCommands(Context context)192     public BaseCommands(Context context) {
193         mContext = context;  // May be null (if so we won't log statistics)
194     }
195 
196     //***** CommandsInterface implementation
197 
198     @Override
getRadioState()199     public @RadioPowerState int getRadioState() {
200         return mState;
201     }
202 
203     @Override
registerForRadioStateChanged(Handler h, int what, Object obj)204     public void registerForRadioStateChanged(Handler h, int what, Object obj) {
205         synchronized (mStateMonitor) {
206             mRadioStateChangedRegistrants.addUnique(h, what, obj);
207             Message.obtain(h, what, new AsyncResult(obj, null, null)).sendToTarget();
208         }
209     }
210 
211     @Override
unregisterForRadioStateChanged(Handler h)212     public void unregisterForRadioStateChanged(Handler h) {
213         synchronized (mStateMonitor) {
214             mRadioStateChangedRegistrants.remove(h);
215         }
216     }
217 
registerForImsNetworkStateChanged(Handler h, int what, Object obj)218     public void registerForImsNetworkStateChanged(Handler h, int what, Object obj) {
219         mImsNetworkStateChangedRegistrants.addUnique(h, what, obj);
220     }
221 
unregisterForImsNetworkStateChanged(Handler h)222     public void unregisterForImsNetworkStateChanged(Handler h) {
223         mImsNetworkStateChangedRegistrants.remove(h);
224     }
225 
226     @Override
registerForOn(Handler h, int what, Object obj)227     public void registerForOn(Handler h, int what, Object obj) {
228         synchronized (mStateMonitor) {
229             mOnRegistrants.addUnique(h, what, obj);
230 
231             if (mState == TelephonyManager.RADIO_POWER_ON) {
232                 Message.obtain(h, what, new AsyncResult(obj, null, null)).sendToTarget();
233             }
234         }
235     }
236     @Override
unregisterForOn(Handler h)237     public void unregisterForOn(Handler h) {
238         synchronized (mStateMonitor) {
239             mOnRegistrants.remove(h);
240         }
241     }
242 
243 
244     @Override
registerForAvailable(Handler h, int what, Object obj)245     public void registerForAvailable(Handler h, int what, Object obj) {
246         synchronized (mStateMonitor) {
247             mAvailRegistrants.addUnique(h, what, obj);
248 
249             if (mState != TelephonyManager.RADIO_POWER_UNAVAILABLE) {
250                 Message.obtain(h, what, new AsyncResult(obj, null, null)).sendToTarget();
251             }
252         }
253     }
254 
255     @Override
unregisterForAvailable(Handler h)256     public void unregisterForAvailable(Handler h) {
257         synchronized(mStateMonitor) {
258             mAvailRegistrants.remove(h);
259         }
260     }
261 
262     @Override
registerForNotAvailable(Handler h, int what, Object obj)263     public void registerForNotAvailable(Handler h, int what, Object obj) {
264         synchronized (mStateMonitor) {
265             mNotAvailRegistrants.addUnique(h, what, obj);
266 
267             if (mState == TelephonyManager.RADIO_POWER_UNAVAILABLE) {
268                 Message.obtain(h, what, new AsyncResult(obj, null, null)).sendToTarget();
269             }
270         }
271     }
272 
273     @Override
unregisterForNotAvailable(Handler h)274     public void unregisterForNotAvailable(Handler h) {
275         synchronized (mStateMonitor) {
276             mNotAvailRegistrants.remove(h);
277         }
278     }
279 
280     @Override
registerForOffOrNotAvailable(Handler h, int what, Object obj)281     public void registerForOffOrNotAvailable(Handler h, int what, Object obj) {
282         synchronized (mStateMonitor) {
283             mOffOrNotAvailRegistrants.addUnique(h, what, obj);
284 
285             if (mState == TelephonyManager.RADIO_POWER_OFF
286                     || mState == TelephonyManager.RADIO_POWER_UNAVAILABLE) {
287                 Message.obtain(h, what, new AsyncResult(obj, null, null)).sendToTarget();
288             }
289         }
290     }
291     @Override
unregisterForOffOrNotAvailable(Handler h)292     public void unregisterForOffOrNotAvailable(Handler h) {
293         synchronized(mStateMonitor) {
294             mOffOrNotAvailRegistrants.remove(h);
295         }
296     }
297 
298     @Override
registerForCallStateChanged(Handler h, int what, Object obj)299     public void registerForCallStateChanged(Handler h, int what, Object obj) {
300         mCallStateRegistrants.addUnique(h, what, obj);
301     }
302 
303     @Override
unregisterForCallStateChanged(Handler h)304     public void unregisterForCallStateChanged(Handler h) {
305         mCallStateRegistrants.remove(h);
306     }
307 
308     @Override
registerForNetworkStateChanged(Handler h, int what, Object obj)309     public void registerForNetworkStateChanged(Handler h, int what, Object obj) {
310         mNetworkStateRegistrants.addUnique(h, what, obj);
311     }
312 
313     @Override
unregisterForNetworkStateChanged(Handler h)314     public void unregisterForNetworkStateChanged(Handler h) {
315         mNetworkStateRegistrants.remove(h);
316     }
317 
318     @Override
registerForDataCallListChanged(Handler h, int what, Object obj)319     public void registerForDataCallListChanged(Handler h, int what, Object obj) {
320         mDataCallListChangedRegistrants.addUnique(h, what, obj);
321     }
322 
323     @Override
unregisterForDataCallListChanged(Handler h)324     public void unregisterForDataCallListChanged(Handler h) {
325         mDataCallListChangedRegistrants.remove(h);
326     }
327 
328     @Override
registerForApnUnthrottled(Handler h, int what, Object obj)329     public void registerForApnUnthrottled(Handler h, int what, Object obj) {
330         mApnUnthrottledRegistrants.addUnique(h, what, obj);
331     }
332 
333     @Override
unregisterForApnUnthrottled(Handler h)334     public void unregisterForApnUnthrottled(Handler h) {
335         mApnUnthrottledRegistrants.remove(h);
336     }
337 
338     @Override
registerForSlicingConfigChanged(Handler h, int what, Object obj)339     public void registerForSlicingConfigChanged(Handler h, int what, Object obj) {
340         mSlicingConfigChangedRegistrants.addUnique(h, what, obj);
341     }
342 
343     @Override
unregisterForSlicingConfigChanged(Handler h)344     public void unregisterForSlicingConfigChanged(Handler h) {
345         mSlicingConfigChangedRegistrants.remove(h);
346     }
347 
348     @Override
registerForVoiceRadioTechChanged(Handler h, int what, Object obj)349     public void registerForVoiceRadioTechChanged(Handler h, int what, Object obj) {
350         mVoiceRadioTechChangedRegistrants.addUnique(h, what, obj);
351     }
352 
353     @Override
unregisterForVoiceRadioTechChanged(Handler h)354     public void unregisterForVoiceRadioTechChanged(Handler h) {
355         mVoiceRadioTechChangedRegistrants.remove(h);
356     }
357 
358     @Override
registerForIccStatusChanged(Handler h, int what, Object obj)359     public void registerForIccStatusChanged(Handler h, int what, Object obj) {
360         mIccStatusChangedRegistrants.addUnique(h, what, obj);
361     }
362 
363     @Override
unregisterForIccStatusChanged(Handler h)364     public void unregisterForIccStatusChanged(Handler h) {
365         mIccStatusChangedRegistrants.remove(h);
366     }
367 
368     @Override
registerForIccSlotStatusChanged(Handler h, int what, Object obj)369     public void registerForIccSlotStatusChanged(Handler h, int what, Object obj) {
370         mIccSlotStatusChangedRegistrants.addUnique(h, what, obj);
371     }
372 
373     @Override
unregisterForIccSlotStatusChanged(Handler h)374     public void unregisterForIccSlotStatusChanged(Handler h) {
375         mIccSlotStatusChangedRegistrants.remove(h);
376     }
377 
378     @Override
setOnNewGsmSms(Handler h, int what, Object obj)379     public void setOnNewGsmSms(Handler h, int what, Object obj) {
380         mGsmSmsRegistrant = new Registrant (h, what, obj);
381     }
382 
383     @Override
unSetOnNewGsmSms(Handler h)384     public void unSetOnNewGsmSms(Handler h) {
385         if (mGsmSmsRegistrant != null && mGsmSmsRegistrant.getHandler() == h) {
386             mGsmSmsRegistrant.clear();
387             mGsmSmsRegistrant = null;
388         }
389     }
390 
391     @Override
setOnNewCdmaSms(Handler h, int what, Object obj)392     public void setOnNewCdmaSms(Handler h, int what, Object obj) {
393         mCdmaSmsRegistrant = new Registrant (h, what, obj);
394     }
395 
396     @Override
unSetOnNewCdmaSms(Handler h)397     public void unSetOnNewCdmaSms(Handler h) {
398         if (mCdmaSmsRegistrant != null && mCdmaSmsRegistrant.getHandler() == h) {
399             mCdmaSmsRegistrant.clear();
400             mCdmaSmsRegistrant = null;
401         }
402     }
403 
404     @Override
setOnNewGsmBroadcastSms(Handler h, int what, Object obj)405     public void setOnNewGsmBroadcastSms(Handler h, int what, Object obj) {
406         mGsmBroadcastSmsRegistrant = new Registrant (h, what, obj);
407     }
408 
409     @Override
unSetOnNewGsmBroadcastSms(Handler h)410     public void unSetOnNewGsmBroadcastSms(Handler h) {
411         if (mGsmBroadcastSmsRegistrant != null && mGsmBroadcastSmsRegistrant.getHandler() == h) {
412             mGsmBroadcastSmsRegistrant.clear();
413             mGsmBroadcastSmsRegistrant = null;
414         }
415     }
416 
417     @Override
setOnSmsOnSim(Handler h, int what, Object obj)418     public void setOnSmsOnSim(Handler h, int what, Object obj) {
419         mSmsOnSimRegistrant = new Registrant (h, what, obj);
420     }
421 
422     @Override
unSetOnSmsOnSim(Handler h)423     public void unSetOnSmsOnSim(Handler h) {
424         if (mSmsOnSimRegistrant != null && mSmsOnSimRegistrant.getHandler() == h) {
425             mSmsOnSimRegistrant.clear();
426             mSmsOnSimRegistrant = null;
427         }
428     }
429 
430     @Override
setOnSmsStatus(Handler h, int what, Object obj)431     public void setOnSmsStatus(Handler h, int what, Object obj) {
432         mSmsStatusRegistrant = new Registrant (h, what, obj);
433     }
434 
435     @Override
unSetOnSmsStatus(Handler h)436     public void unSetOnSmsStatus(Handler h) {
437         if (mSmsStatusRegistrant != null && mSmsStatusRegistrant.getHandler() == h) {
438             mSmsStatusRegistrant.clear();
439             mSmsStatusRegistrant = null;
440         }
441     }
442 
443     @Override
setOnSignalStrengthUpdate(Handler h, int what, Object obj)444     public void setOnSignalStrengthUpdate(Handler h, int what, Object obj) {
445         mSignalStrengthRegistrant = new Registrant (h, what, obj);
446     }
447 
448     @Override
unSetOnSignalStrengthUpdate(Handler h)449     public void unSetOnSignalStrengthUpdate(Handler h) {
450         if (mSignalStrengthRegistrant != null && mSignalStrengthRegistrant.getHandler() == h) {
451             mSignalStrengthRegistrant.clear();
452             mSignalStrengthRegistrant = null;
453         }
454     }
455 
456     @Override
setOnNITZTime(Handler h, int what, Object obj)457     public void setOnNITZTime(Handler h, int what, Object obj) {
458         mNITZTimeRegistrant = new Registrant (h, what, obj);
459     }
460 
461     @Override
unSetOnNITZTime(Handler h)462     public void unSetOnNITZTime(Handler h) {
463         if (mNITZTimeRegistrant != null && mNITZTimeRegistrant.getHandler() == h) {
464             mNITZTimeRegistrant.clear();
465             mNITZTimeRegistrant = null;
466         }
467     }
468 
469     @Override
setOnUSSD(Handler h, int what, Object obj)470     public void setOnUSSD(Handler h, int what, Object obj) {
471         mUSSDRegistrant = new Registrant (h, what, obj);
472     }
473 
474     @Override
unSetOnUSSD(Handler h)475     public void unSetOnUSSD(Handler h) {
476         if (mUSSDRegistrant != null && mUSSDRegistrant.getHandler() == h) {
477             mUSSDRegistrant.clear();
478             mUSSDRegistrant = null;
479         }
480     }
481 
482     @Override
setOnSuppServiceNotification(Handler h, int what, Object obj)483     public void setOnSuppServiceNotification(Handler h, int what, Object obj) {
484         mSsnRegistrant = new Registrant (h, what, obj);
485     }
486 
487     @Override
unSetOnSuppServiceNotification(Handler h)488     public void unSetOnSuppServiceNotification(Handler h) {
489         if (mSsnRegistrant != null && mSsnRegistrant.getHandler() == h) {
490             mSsnRegistrant.clear();
491             mSsnRegistrant = null;
492         }
493     }
494 
495     @Override
setOnCatSessionEnd(Handler h, int what, Object obj)496     public void setOnCatSessionEnd(Handler h, int what, Object obj) {
497         mCatSessionEndRegistrant = new Registrant (h, what, obj);
498     }
499 
500     @Override
unSetOnCatSessionEnd(Handler h)501     public void unSetOnCatSessionEnd(Handler h) {
502         if (mCatSessionEndRegistrant != null && mCatSessionEndRegistrant.getHandler() == h) {
503             mCatSessionEndRegistrant.clear();
504             mCatSessionEndRegistrant = null;
505         }
506     }
507 
508     @Override
setOnCatProactiveCmd(Handler h, int what, Object obj)509     public void setOnCatProactiveCmd(Handler h, int what, Object obj) {
510         mCatProCmdRegistrant = new Registrant (h, what, obj);
511     }
512 
513     @Override
unSetOnCatProactiveCmd(Handler h)514     public void unSetOnCatProactiveCmd(Handler h) {
515         if (mCatProCmdRegistrant != null && mCatProCmdRegistrant.getHandler() == h) {
516             mCatProCmdRegistrant.clear();
517             mCatProCmdRegistrant = null;
518         }
519     }
520 
521     @Override
setOnCatEvent(Handler h, int what, Object obj)522     public void setOnCatEvent(Handler h, int what, Object obj) {
523         mCatEventRegistrant = new Registrant (h, what, obj);
524     }
525 
526     @Override
unSetOnCatEvent(Handler h)527     public void unSetOnCatEvent(Handler h) {
528         if (mCatEventRegistrant != null && mCatEventRegistrant.getHandler() == h) {
529             mCatEventRegistrant.clear();
530             mCatEventRegistrant = null;
531         }
532     }
533 
534     @Override
setOnCatCallSetUp(Handler h, int what, Object obj)535     public void setOnCatCallSetUp(Handler h, int what, Object obj) {
536         mCatCallSetUpRegistrant = new Registrant (h, what, obj);
537     }
538 
539     @Override
unSetOnCatCallSetUp(Handler h)540     public void unSetOnCatCallSetUp(Handler h) {
541         if (mCatCallSetUpRegistrant != null && mCatCallSetUpRegistrant.getHandler() == h) {
542             mCatCallSetUpRegistrant.clear();
543             mCatCallSetUpRegistrant = null;
544         }
545     }
546 
547     @Override
setOnIccSmsFull(Handler h, int what, Object obj)548     public void setOnIccSmsFull(Handler h, int what, Object obj) {
549         mIccSmsFullRegistrant = new Registrant (h, what, obj);
550     }
551 
552     @Override
unSetOnIccSmsFull(Handler h)553     public void unSetOnIccSmsFull(Handler h) {
554         if (mIccSmsFullRegistrant != null && mIccSmsFullRegistrant.getHandler() == h) {
555             mIccSmsFullRegistrant.clear();
556             mIccSmsFullRegistrant = null;
557         }
558     }
559 
560     @Override
registerForIccRefresh(Handler h, int what, Object obj)561     public void registerForIccRefresh(Handler h, int what, Object obj) {
562         mIccRefreshRegistrants.addUnique(h, what, obj);
563     }
564     @Override
setOnIccRefresh(Handler h, int what, Object obj)565     public void setOnIccRefresh(Handler h, int what, Object obj) {
566         registerForIccRefresh(h, what, obj);
567     }
568 
569     @Override
setEmergencyCallbackMode(Handler h, int what, Object obj)570     public void setEmergencyCallbackMode(Handler h, int what, Object obj) {
571         mEmergencyCallbackModeRegistrant = new Registrant (h, what, obj);
572     }
573 
574     @Override
unregisterForIccRefresh(Handler h)575     public void unregisterForIccRefresh(Handler h) {
576         mIccRefreshRegistrants.remove(h);
577     }
578     @Override
unsetOnIccRefresh(Handler h)579     public void unsetOnIccRefresh(Handler h) {
580         unregisterForIccRefresh(h);
581     }
582 
583     @Override
setOnCallRing(Handler h, int what, Object obj)584     public void setOnCallRing(Handler h, int what, Object obj) {
585         mRingRegistrant = new Registrant (h, what, obj);
586     }
587 
588     @Override
unSetOnCallRing(Handler h)589     public void unSetOnCallRing(Handler h) {
590         if (mRingRegistrant != null && mRingRegistrant.getHandler() == h) {
591             mRingRegistrant.clear();
592             mRingRegistrant = null;
593         }
594     }
595 
596     @Override
setOnSs(Handler h, int what, Object obj)597     public void setOnSs(Handler h, int what, Object obj) {
598         mSsRegistrant = new Registrant (h, what, obj);
599     }
600 
601     @Override
unSetOnSs(Handler h)602     public void unSetOnSs(Handler h) {
603         mSsRegistrant.clear();
604     }
605 
606     @Override
setOnCatCcAlphaNotify(Handler h, int what, Object obj)607     public void setOnCatCcAlphaNotify(Handler h, int what, Object obj) {
608         mCatCcAlphaRegistrant = new Registrant (h, what, obj);
609     }
610 
611     @Override
unSetOnCatCcAlphaNotify(Handler h)612     public void unSetOnCatCcAlphaNotify(Handler h) {
613         mCatCcAlphaRegistrant.clear();
614     }
615 
616     @Override
setOnRegistrationFailed(Handler h, int what, Object obj)617     public void setOnRegistrationFailed(Handler h, int what, Object obj) {
618         mRegistrationFailedRegistrant = new Registrant(h, what, obj);
619     }
620 
621     @Override
unSetOnRegistrationFailed(Handler h)622     public void unSetOnRegistrationFailed(Handler h) {
623         mRegistrationFailedRegistrant.clear();
624     }
625 
626     @Override
registerForInCallVoicePrivacyOn(Handler h, int what, Object obj)627     public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj) {
628         mVoicePrivacyOnRegistrants.addUnique(h, what, obj);
629     }
630 
631     @Override
unregisterForInCallVoicePrivacyOn(Handler h)632     public void unregisterForInCallVoicePrivacyOn(Handler h){
633         mVoicePrivacyOnRegistrants.remove(h);
634     }
635 
636     @Override
registerForInCallVoicePrivacyOff(Handler h, int what, Object obj)637     public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj) {
638         mVoicePrivacyOffRegistrants.addUnique(h, what, obj);
639     }
640 
641     @Override
unregisterForInCallVoicePrivacyOff(Handler h)642     public void unregisterForInCallVoicePrivacyOff(Handler h){
643         mVoicePrivacyOffRegistrants.remove(h);
644     }
645 
646     @Override
setOnRestrictedStateChanged(Handler h, int what, Object obj)647     public void setOnRestrictedStateChanged(Handler h, int what, Object obj) {
648         mRestrictedStateRegistrant = new Registrant (h, what, obj);
649     }
650 
651     @Override
unSetOnRestrictedStateChanged(Handler h)652     public void unSetOnRestrictedStateChanged(Handler h) {
653         if (mRestrictedStateRegistrant != null && mRestrictedStateRegistrant.getHandler() == h) {
654             mRestrictedStateRegistrant.clear();
655             mRestrictedStateRegistrant = null;
656         }
657     }
658 
659     @Override
registerForDisplayInfo(Handler h, int what, Object obj)660     public void registerForDisplayInfo(Handler h, int what, Object obj) {
661         mDisplayInfoRegistrants.addUnique(h, what, obj);
662     }
663 
664     @Override
unregisterForDisplayInfo(Handler h)665     public void unregisterForDisplayInfo(Handler h) {
666         mDisplayInfoRegistrants.remove(h);
667     }
668 
669     @Override
registerForCallWaitingInfo(Handler h, int what, Object obj)670     public void registerForCallWaitingInfo(Handler h, int what, Object obj) {
671         mCallWaitingInfoRegistrants.addUnique(h, what, obj);
672     }
673 
674     @Override
unregisterForCallWaitingInfo(Handler h)675     public void unregisterForCallWaitingInfo(Handler h) {
676         mCallWaitingInfoRegistrants.remove(h);
677     }
678 
679     @Override
registerForSignalInfo(Handler h, int what, Object obj)680     public void registerForSignalInfo(Handler h, int what, Object obj) {
681         mSignalInfoRegistrants.addUnique(h, what, obj);
682     }
683 
setOnUnsolOemHookRaw(Handler h, int what, Object obj)684     public void setOnUnsolOemHookRaw(Handler h, int what, Object obj) {
685         mUnsolOemHookRawRegistrant = new Registrant (h, what, obj);
686     }
687 
unSetOnUnsolOemHookRaw(Handler h)688     public void unSetOnUnsolOemHookRaw(Handler h) {
689         if (mUnsolOemHookRawRegistrant != null && mUnsolOemHookRawRegistrant.getHandler() == h) {
690             mUnsolOemHookRawRegistrant.clear();
691             mUnsolOemHookRawRegistrant = null;
692         }
693     }
694 
695     @Override
unregisterForSignalInfo(Handler h)696     public void unregisterForSignalInfo(Handler h) {
697         mSignalInfoRegistrants.remove(h);
698     }
699 
700     @Override
registerForCdmaOtaProvision(Handler h,int what, Object obj)701     public void registerForCdmaOtaProvision(Handler h,int what, Object obj){
702         mOtaProvisionRegistrants.addUnique(h, what, obj);
703     }
704 
705     @Override
unregisterForCdmaOtaProvision(Handler h)706     public void unregisterForCdmaOtaProvision(Handler h){
707         mOtaProvisionRegistrants.remove(h);
708     }
709 
710     @Override
registerForNumberInfo(Handler h,int what, Object obj)711     public void registerForNumberInfo(Handler h,int what, Object obj) {
712         mNumberInfoRegistrants.addUnique(h, what, obj);
713     }
714 
715     @Override
unregisterForNumberInfo(Handler h)716     public void unregisterForNumberInfo(Handler h){
717         mNumberInfoRegistrants.remove(h);
718     }
719 
720      @Override
registerForRedirectedNumberInfo(Handler h,int what, Object obj)721     public void registerForRedirectedNumberInfo(Handler h,int what, Object obj) {
722         mRedirNumInfoRegistrants.addUnique(h, what, obj);
723     }
724 
725     @Override
unregisterForRedirectedNumberInfo(Handler h)726     public void unregisterForRedirectedNumberInfo(Handler h) {
727         mRedirNumInfoRegistrants.remove(h);
728     }
729 
730     @Override
registerForLineControlInfo(Handler h, int what, Object obj)731     public void registerForLineControlInfo(Handler h, int what, Object obj) {
732         mLineControlInfoRegistrants.addUnique(h, what, obj);
733     }
734 
735     @Override
unregisterForLineControlInfo(Handler h)736     public void unregisterForLineControlInfo(Handler h) {
737         mLineControlInfoRegistrants.remove(h);
738     }
739 
740     @Override
registerFoT53ClirlInfo(Handler h,int what, Object obj)741     public void registerFoT53ClirlInfo(Handler h,int what, Object obj) {
742         mT53ClirInfoRegistrants.addUnique(h, what, obj);
743     }
744 
745     @Override
unregisterForT53ClirInfo(Handler h)746     public void unregisterForT53ClirInfo(Handler h) {
747         mT53ClirInfoRegistrants.remove(h);
748     }
749 
750     @Override
registerForT53AudioControlInfo(Handler h,int what, Object obj)751     public void registerForT53AudioControlInfo(Handler h,int what, Object obj) {
752         mT53AudCntrlInfoRegistrants.addUnique(h, what, obj);
753     }
754 
755     @Override
unregisterForT53AudioControlInfo(Handler h)756     public void unregisterForT53AudioControlInfo(Handler h) {
757         mT53AudCntrlInfoRegistrants.remove(h);
758     }
759 
760     @Override
registerForRingbackTone(Handler h, int what, Object obj)761     public void registerForRingbackTone(Handler h, int what, Object obj) {
762         mRingbackToneRegistrants.addUnique(h, what, obj);
763     }
764 
765     @Override
unregisterForRingbackTone(Handler h)766     public void unregisterForRingbackTone(Handler h) {
767         mRingbackToneRegistrants.remove(h);
768     }
769 
770     @Override
registerForResendIncallMute(Handler h, int what, Object obj)771     public void registerForResendIncallMute(Handler h, int what, Object obj) {
772         mResendIncallMuteRegistrants.addUnique(h, what, obj);
773     }
774 
775     @Override
unregisterForResendIncallMute(Handler h)776     public void unregisterForResendIncallMute(Handler h) {
777         mResendIncallMuteRegistrants.remove(h);
778     }
779 
780     @Override
registerForCdmaSubscriptionChanged(Handler h, int what, Object obj)781     public void registerForCdmaSubscriptionChanged(Handler h, int what, Object obj) {
782         mCdmaSubscriptionChangedRegistrants.addUnique(h, what, obj);
783     }
784 
785     @Override
unregisterForCdmaSubscriptionChanged(Handler h)786     public void unregisterForCdmaSubscriptionChanged(Handler h) {
787         mCdmaSubscriptionChangedRegistrants.remove(h);
788     }
789 
790     @Override
registerForCdmaPrlChanged(Handler h, int what, Object obj)791     public void registerForCdmaPrlChanged(Handler h, int what, Object obj) {
792         mCdmaPrlChangedRegistrants.addUnique(h, what, obj);
793     }
794 
795     @Override
unregisterForCdmaPrlChanged(Handler h)796     public void unregisterForCdmaPrlChanged(Handler h) {
797         mCdmaPrlChangedRegistrants.remove(h);
798     }
799 
800     @Override
registerForExitEmergencyCallbackMode(Handler h, int what, Object obj)801     public void registerForExitEmergencyCallbackMode(Handler h, int what, Object obj) {
802         mExitEmergencyCallbackModeRegistrants.addUnique(h, what, obj);
803     }
804 
805     @Override
unregisterForExitEmergencyCallbackMode(Handler h)806     public void unregisterForExitEmergencyCallbackMode(Handler h) {
807         mExitEmergencyCallbackModeRegistrants.remove(h);
808     }
809 
810     @Override
registerForHardwareConfigChanged(Handler h, int what, Object obj)811     public void registerForHardwareConfigChanged(Handler h, int what, Object obj) {
812         mHardwareConfigChangeRegistrants.addUnique(h, what, obj);
813     }
814 
815     @Override
unregisterForHardwareConfigChanged(Handler h)816     public void unregisterForHardwareConfigChanged(Handler h) {
817         mHardwareConfigChangeRegistrants.remove(h);
818     }
819 
820     @Override
registerForNetworkScanResult(Handler h, int what, Object obj)821     public void registerForNetworkScanResult(Handler h, int what, Object obj) {
822         mRilNetworkScanResultRegistrants.addUnique(h, what, obj);
823     }
824 
825     @Override
unregisterForNetworkScanResult(Handler h)826     public void unregisterForNetworkScanResult(Handler h) {
827         mRilNetworkScanResultRegistrants.remove(h);
828     }
829 
830     /**
831      * {@inheritDoc}
832      */
833     @Override
registerForRilConnected(Handler h, int what, Object obj)834     public void registerForRilConnected(Handler h, int what, Object obj) {
835         mRilConnectedRegistrants.addUnique(h, what, obj);
836         if (mRilVersion != -1) {
837             Message.obtain(h, what, new AsyncResult(obj, new Integer(mRilVersion), null))
838                     .sendToTarget();
839         }
840     }
841 
842     @Override
unregisterForRilConnected(Handler h)843     public void unregisterForRilConnected(Handler h) {
844         mRilConnectedRegistrants.remove(h);
845     }
846 
registerForSubscriptionStatusChanged(Handler h, int what, Object obj)847     public void registerForSubscriptionStatusChanged(Handler h, int what, Object obj) {
848         mSubscriptionStatusRegistrants.addUnique(h, what, obj);
849     }
850 
unregisterForSubscriptionStatusChanged(Handler h)851     public void unregisterForSubscriptionStatusChanged(Handler h) {
852         mSubscriptionStatusRegistrants.remove(h);
853     }
854 
855     @Override
registerForEmergencyNumberList(Handler h, int what, Object obj)856     public void registerForEmergencyNumberList(Handler h, int what, Object obj) {
857         mEmergencyNumberListRegistrants.addUnique(h, what, obj);
858         // Notify the last emergency number list from radio to new registrants because they may
859         // miss the latest indication (e.g. constructed in a delay after HAL is registrated).
860         List<EmergencyNumber> lastEmergencyNumberListIndication =
861                 getLastEmergencyNumberListIndication();
862         if (lastEmergencyNumberListIndication != null) {
863             mEmergencyNumberListRegistrants.notifyRegistrants(new AsyncResult(
864                     null, lastEmergencyNumberListIndication, null));
865         }
866     }
867 
868     @Override
unregisterForEmergencyNumberList(Handler h)869     public void unregisterForEmergencyNumberList(Handler h) {
870         mEmergencyNumberListRegistrants.remove(h);
871     }
872 
873     //***** Protected Methods
874     /**
875      * Store new RadioState and send notification based on the changes
876      *
877      * This function is called only by RIL.java when receiving unsolicited
878      * RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED
879      *
880      * RadioState has 3 values : RADIO_OFF, RADIO_UNAVAILABLE, RADIO_ON.
881      *
882      * @param newState new RadioState decoded from RIL_UNSOL_RADIO_STATE_CHANGED
883      * @param forceNotifyRegistrants boolean indicating if registrants should be notified even if
884      * there is no change in state
885      */
setRadioState(int newState, boolean forceNotifyRegistrants)886     protected void setRadioState(int newState, boolean forceNotifyRegistrants) {
887         int oldState;
888 
889         synchronized (mStateMonitor) {
890             oldState = mState;
891             mState = newState;
892 
893             if (oldState == mState && !forceNotifyRegistrants) {
894                 // no state transition
895                 return;
896             }
897 
898             mRadioStateChangedRegistrants.notifyRegistrants();
899 
900             if (mState != TelephonyManager.RADIO_POWER_UNAVAILABLE
901                     && oldState == TelephonyManager.RADIO_POWER_UNAVAILABLE) {
902                 mAvailRegistrants.notifyRegistrants();
903             }
904 
905             if (mState == TelephonyManager.RADIO_POWER_UNAVAILABLE
906                     && oldState != TelephonyManager.RADIO_POWER_UNAVAILABLE) {
907                 mNotAvailRegistrants.notifyRegistrants();
908             }
909 
910             if (mState == TelephonyManager.RADIO_POWER_ON
911                     && oldState != TelephonyManager.RADIO_POWER_ON) {
912                 mOnRegistrants.notifyRegistrants();
913             }
914 
915             if ((mState == TelephonyManager.RADIO_POWER_OFF
916                     || mState == TelephonyManager.RADIO_POWER_UNAVAILABLE)
917                     && (oldState == TelephonyManager.RADIO_POWER_ON)) {
918                 mOffOrNotAvailRegistrants.notifyRegistrants();
919                 mLastBarringInfo = new BarringInfo();
920             }
921         }
922     }
923 
cacheEmergencyNumberListIndication( List<EmergencyNumber> emergencyNumberListIndication)924     protected void cacheEmergencyNumberListIndication(
925             List<EmergencyNumber> emergencyNumberListIndication) {
926         synchronized (mLastEmergencyNumberListIndicationLock) {
927             mLastEmergencyNumberListIndication.clear();
928             mLastEmergencyNumberListIndication.addAll(emergencyNumberListIndication);
929         }
930     }
931 
getLastEmergencyNumberListIndication()932     private List<EmergencyNumber> getLastEmergencyNumberListIndication() {
933         synchronized (mLastEmergencyNumberListIndicationLock) {
934             return new ArrayList<>(mLastEmergencyNumberListIndication);
935         }
936     }
937 
938     /** {@inheritDoc} */
939     @Override
getLastBarringInfo()940     public @NonNull BarringInfo getLastBarringInfo() {
941         return mLastBarringInfo;
942     }
943 
944     /**
945      * {@inheritDoc}
946      */
947     @Override
registerForCellInfoList(Handler h, int what, Object obj)948     public void registerForCellInfoList(Handler h, int what, Object obj) {
949         mRilCellInfoListRegistrants.addUnique(h, what, obj);
950     }
951     @Override
unregisterForCellInfoList(Handler h)952     public void unregisterForCellInfoList(Handler h) {
953         mRilCellInfoListRegistrants.remove(h);
954     }
955 
956     @Override
registerForPhysicalChannelConfiguration(Handler h, int what, Object obj)957     public void registerForPhysicalChannelConfiguration(Handler h, int what, Object obj) {
958         mPhysicalChannelConfigurationRegistrants.addUnique(h, what, obj);
959     }
960 
961     @Override
unregisterForPhysicalChannelConfiguration(Handler h)962     public void unregisterForPhysicalChannelConfiguration(Handler h) {
963         mPhysicalChannelConfigurationRegistrants.remove(h);
964     }
965 
966     @Override
registerForSrvccStateChanged(Handler h, int what, Object obj)967     public void registerForSrvccStateChanged(Handler h, int what, Object obj) {
968         mSrvccStateRegistrants.addUnique(h, what, obj);
969     }
970 
971     @Override
unregisterForSrvccStateChanged(Handler h)972     public void unregisterForSrvccStateChanged(Handler h) {
973         mSrvccStateRegistrants.remove(h);
974     }
975 
976     @Override
testingEmergencyCall()977     public void testingEmergencyCall() {}
978 
979     @Override
getRilVersion()980     public int getRilVersion() {
981         return mRilVersion;
982     }
983 
setUiccSubscription(int slotId, int appIndex, int subId, int subStatus, Message response)984     public void setUiccSubscription(int slotId, int appIndex, int subId, int subStatus,
985             Message response) {
986     }
987 
setDataAllowed(boolean allowed, Message response)988     public void setDataAllowed(boolean allowed, Message response) {
989     }
990 
991     @Override
requestShutdown(Message result)992     public void requestShutdown(Message result) {
993     }
994 
995     @Override
getRadioCapability(Message result)996     public void getRadioCapability(Message result) {
997     }
998 
999     @Override
setRadioCapability(RadioCapability rc, Message response)1000     public void setRadioCapability(RadioCapability rc, Message response) {
1001     }
1002 
1003     @Override
registerForRadioCapabilityChanged(Handler h, int what, Object obj)1004     public void registerForRadioCapabilityChanged(Handler h, int what, Object obj) {
1005         mPhoneRadioCapabilityChangedRegistrants.addUnique(h, what, obj);
1006     }
1007 
1008     @Override
unregisterForRadioCapabilityChanged(Handler h)1009     public void unregisterForRadioCapabilityChanged(Handler h) {
1010         mPhoneRadioCapabilityChangedRegistrants.remove(h);
1011     }
1012 
1013     @Override
startLceService(int reportIntervalMs, boolean pullMode, Message result)1014     public void startLceService(int reportIntervalMs, boolean pullMode, Message result) {
1015     }
1016 
1017     @Override
stopLceService(Message result)1018     public void stopLceService(Message result) {
1019     }
1020 
1021     @Override
pullLceData(Message result)1022     public void pullLceData(Message result) {
1023     }
1024 
1025     @Override
registerForLceInfo(Handler h, int what, Object obj)1026     public void registerForLceInfo(Handler h, int what, Object obj) {
1027         synchronized (mStateMonitor) {
1028             mLceInfoRegistrants.addUnique(h, what, obj);
1029         }
1030     }
1031 
1032     @Override
unregisterForLceInfo(Handler h)1033     public void unregisterForLceInfo(Handler h) {
1034         synchronized (mStateMonitor) {
1035             mLceInfoRegistrants.remove(h);
1036         }
1037     }
1038 
1039     @Override
registerForModemReset(Handler h, int what, Object obj)1040     public void registerForModemReset(Handler h, int what, Object obj) {
1041         mModemResetRegistrants.addUnique(h, what, obj);
1042     }
1043 
1044     @Override
unregisterForModemReset(Handler h)1045     public void unregisterForModemReset(Handler h) {
1046         mModemResetRegistrants.remove(h);
1047     }
1048 
1049     @Override
registerForPcoData(Handler h, int what, Object obj)1050     public void registerForPcoData(Handler h, int what, Object obj) {
1051         mPcoDataRegistrants.addUnique(h, what, obj);
1052     }
1053 
1054     @Override
unregisterForPcoData(Handler h)1055     public void unregisterForPcoData(Handler h) {
1056         mPcoDataRegistrants.remove(h);
1057     }
1058 
1059     @Override
registerForCarrierInfoForImsiEncryption(Handler h, int what, Object obj)1060     public void registerForCarrierInfoForImsiEncryption(Handler h, int what, Object obj) {
1061         mCarrierInfoForImsiEncryptionRegistrants.addUnique(h, what, obj);
1062     }
1063 
1064     @Override
unregisterForCarrierInfoForImsiEncryption(Handler h)1065     public void unregisterForCarrierInfoForImsiEncryption(Handler h) {
1066         mCarrierInfoForImsiEncryptionRegistrants.remove(h);
1067     }
1068 
1069     @Override
registerForNattKeepaliveStatus(Handler h, int what, Object obj)1070     public void registerForNattKeepaliveStatus(Handler h, int what, Object obj) {
1071         synchronized (mStateMonitor) {
1072             mNattKeepaliveStatusRegistrants.addUnique(h, what, obj);
1073         }
1074     }
1075 
1076     @Override
unregisterForNattKeepaliveStatus(Handler h)1077     public void unregisterForNattKeepaliveStatus(Handler h) {
1078         synchronized (mStateMonitor) {
1079             mNattKeepaliveStatusRegistrants.remove(h);
1080         }
1081     }
1082 
1083     /**
1084      * Registers the handler for RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED events.
1085      *
1086      * @param h Handler for notification message.
1087      * @param what User-defined message code.
1088      * @param obj User object.
1089      */
1090     @Override
registerUiccApplicationEnablementChanged(Handler h, int what, Object obj)1091     public void registerUiccApplicationEnablementChanged(Handler h, int what, Object obj) {
1092         mUiccApplicationsEnablementRegistrants.addUnique(h, what, obj);
1093     }
1094 
1095     /**
1096      * Unregisters the handler for RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED events.
1097      *
1098      * @param h Handler for notification message.
1099      */
1100     @Override
unregisterUiccApplicationEnablementChanged(Handler h)1101     public void unregisterUiccApplicationEnablementChanged(Handler h) {
1102         mUiccApplicationsEnablementRegistrants.remove(h);
1103     }
1104 
1105     /**
1106      * Registers the handler for RIL_UNSOL_BARRING_INFO_CHANGED events.
1107      *
1108      * @param h Handler for notification message.
1109      * @param what User-defined message code.
1110      * @param obj User object.
1111      */
1112     @Override
registerForBarringInfoChanged(Handler h, int what, Object obj)1113     public void registerForBarringInfoChanged(Handler h, int what, Object obj) {
1114         mBarringInfoChangedRegistrants.addUnique(h, what, obj);
1115     }
1116 
1117     /**
1118      * Unregisters the handler for RIL_UNSOL_BARRING_INFO_CHANGED events.
1119      *
1120      * @param h Handler for notification message.
1121      */
1122     @Override
unregisterForBarringInfoChanged(Handler h)1123     public void unregisterForBarringInfoChanged(Handler h) {
1124         mBarringInfoChangedRegistrants.remove(h);
1125     }
1126 
1127     @Override
registerForSimPhonebookChanged(Handler h, int what, Object obj)1128     public void registerForSimPhonebookChanged(Handler h, int what, Object obj) {
1129         mSimPhonebookChangedRegistrants.addUnique(h, what, obj);
1130     }
1131 
1132     @Override
unregisterForSimPhonebookChanged(Handler h)1133     public void unregisterForSimPhonebookChanged(Handler h) {
1134         mSimPhonebookChangedRegistrants.remove(h);
1135     }
1136 
1137     @Override
registerForSimPhonebookRecordsReceived(Handler h, int what, Object obj)1138     public void registerForSimPhonebookRecordsReceived(Handler h, int what, Object obj) {
1139         mSimPhonebookRecordsReceivedRegistrants.addUnique(h, what, obj);
1140     }
1141 
1142     @Override
unregisterForSimPhonebookRecordsReceived(Handler h)1143     public void unregisterForSimPhonebookRecordsReceived(Handler h) {
1144         mSimPhonebookRecordsReceivedRegistrants.remove(h);
1145     }
1146 
1147     @Override
getSimPhonebookRecords(Message result)1148     public void getSimPhonebookRecords(Message result) {
1149     }
1150 
1151     @Override
getSimPhonebookCapacity(Message result)1152     public void getSimPhonebookCapacity(Message result) {
1153     }
1154 
1155     @Override
updateSimPhonebookRecord(SimPhonebookRecord phonebookRecord, Message result)1156     public void updateSimPhonebookRecord(SimPhonebookRecord phonebookRecord, Message result) {
1157     }
1158 
1159     /**
1160      * Register for Emergency network scan result.
1161      *
1162      * @param h Handler for notification message.
1163      * @param what User-defined message code.
1164      * @param obj User object.
1165      */
1166     @Override
registerForEmergencyNetworkScan(Handler h, int what, Object obj)1167     public void registerForEmergencyNetworkScan(Handler h, int what, Object obj) {
1168         mEmergencyNetworkScanRegistrants.add(h, what, obj);
1169     }
1170 
1171     /**
1172      * Unregister for Emergency network scan result.
1173      *
1174      * @param h Handler to be removed from the registrant list.
1175      */
1176     @Override
unregisterForEmergencyNetworkScan(Handler h)1177     public void unregisterForEmergencyNetworkScan(Handler h) {
1178         mEmergencyNetworkScanRegistrants.remove(h);
1179     }
1180 
1181     @Override
registerForConnectionSetupFailure(Handler h, int what, Object obj)1182     public void registerForConnectionSetupFailure(Handler h, int what, Object obj) {
1183         mConnectionSetupFailureRegistrants.addUnique(h, what, obj);
1184     }
1185 
1186     @Override
unregisterForConnectionSetupFailure(Handler h)1187     public void unregisterForConnectionSetupFailure(Handler h) {
1188         mConnectionSetupFailureRegistrants.remove(h);
1189     }
1190 
1191     @Override
registerForNotifyAnbr(Handler h, int what, Object obj)1192     public void registerForNotifyAnbr(Handler h, int what, Object obj) {
1193         mNotifyAnbrRegistrants.addUnique(h, what, obj);
1194     }
1195 
1196     @Override
unregisterForNotifyAnbr(Handler h)1197     public void unregisterForNotifyAnbr(Handler h) {
1198         mNotifyAnbrRegistrants.remove(h);
1199     }
1200 
1201     @Override
registerForTriggerImsDeregistration(Handler h, int what, Object obj)1202     public void registerForTriggerImsDeregistration(Handler h, int what, Object obj) {
1203         mTriggerImsDeregistrationRegistrants.add(h, what, obj);
1204     }
1205 
1206     @Override
unregisterForTriggerImsDeregistration(Handler h)1207     public void unregisterForTriggerImsDeregistration(Handler h) {
1208         mTriggerImsDeregistrationRegistrants.remove(h);
1209     }
1210 
1211     @Override
registerForPendingSatelliteMessageCount( @onNull Handler h, int what, @Nullable Object obj)1212     public void registerForPendingSatelliteMessageCount(
1213             @NonNull Handler h, int what, @Nullable Object obj) {
1214         mPendingSatelliteMessageCountRegistrants.add(h, what, obj);
1215     }
1216 
1217     @Override
unregisterForPendingSatelliteMessageCount(@onNull Handler h)1218     public void unregisterForPendingSatelliteMessageCount(@NonNull Handler h) {
1219         mPendingSatelliteMessageCountRegistrants.remove(h);
1220     }
1221 
1222     @Override
registerForNewSatelliteMessages( @onNull Handler h, int what, @Nullable Object obj)1223     public void registerForNewSatelliteMessages(
1224             @NonNull Handler h, int what, @Nullable Object obj) {
1225         mNewSatelliteMessagesRegistrants.add(h, what, obj);
1226     }
1227 
1228     @Override
unregisterForNewSatelliteMessages(@onNull Handler h)1229     public void unregisterForNewSatelliteMessages(@NonNull Handler h) {
1230         mNewSatelliteMessagesRegistrants.remove(h);
1231     }
1232 
1233     @Override
registerForSatelliteMessagesTransferComplete(@onNull Handler h, int what, @Nullable Object obj)1234     public void registerForSatelliteMessagesTransferComplete(@NonNull Handler h,
1235             int what, @Nullable Object obj) {
1236         mSatelliteMessagesTransferCompleteRegistrants.add(h, what, obj);
1237     }
1238 
1239     @Override
unregisterForSatelliteMessagesTransferComplete(@onNull Handler h)1240     public void unregisterForSatelliteMessagesTransferComplete(@NonNull Handler h) {
1241         mSatelliteMessagesTransferCompleteRegistrants.remove(h);
1242     }
1243 
1244     @Override
registerForSatellitePointingInfoChanged(@onNull Handler h, int what, @Nullable Object obj)1245     public void registerForSatellitePointingInfoChanged(@NonNull Handler h,
1246             int what, @Nullable Object obj) {
1247         mSatellitePointingInfoChangedRegistrants.add(h, what, obj);
1248     }
1249 
1250     @Override
unregisterForSatellitePointingInfoChanged(@onNull Handler h)1251     public void unregisterForSatellitePointingInfoChanged(@NonNull Handler h) {
1252         mSatellitePointingInfoChangedRegistrants.remove(h);
1253     }
1254 
1255     @Override
registerForSatelliteModeChanged(@onNull Handler h, int what, @Nullable Object obj)1256     public void registerForSatelliteModeChanged(@NonNull Handler h,
1257             int what, @Nullable Object obj) {
1258         mSatelliteModeChangedRegistrants.add(h, what, obj);
1259     }
1260 
1261     @Override
unregisterForSatelliteModeChanged(@onNull Handler h)1262     public void unregisterForSatelliteModeChanged(@NonNull Handler h) {
1263         mSatelliteModeChangedRegistrants.remove(h);
1264     }
1265 
1266     @Override
registerForSatelliteRadioTechnologyChanged(@onNull Handler h, int what, @Nullable Object obj)1267     public void registerForSatelliteRadioTechnologyChanged(@NonNull Handler h,
1268             int what, @Nullable Object obj) {
1269         mSatelliteRadioTechnologyChangedRegistrants.add(h, what, obj);
1270     }
1271 
1272     @Override
unregisterForSatelliteRadioTechnologyChanged(@onNull Handler h)1273     public void unregisterForSatelliteRadioTechnologyChanged(@NonNull Handler h) {
1274         mSatelliteRadioTechnologyChangedRegistrants.remove(h);
1275     }
1276 
1277     @Override
registerForSatelliteProvisionStateChanged(@onNull Handler h, int what, @Nullable Object obj)1278     public void registerForSatelliteProvisionStateChanged(@NonNull Handler h,
1279             int what, @Nullable Object obj) {
1280         mSatelliteProvisionStateChangedRegistrants.add(h, what, obj);
1281     }
1282 
1283     @Override
unregisterForSatelliteProvisionStateChanged(@onNull Handler h)1284     public void unregisterForSatelliteProvisionStateChanged(@NonNull Handler h) {
1285         mSatelliteProvisionStateChangedRegistrants.remove(h);
1286     }
1287 }
1288