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