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