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