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