1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.telephony; 18 19 import android.os.Bundle; 20 import android.os.Parcel; 21 import android.os.Parcelable; 22 import android.telephony.Rlog; 23 import android.text.TextUtils; 24 25 /** 26 * Contains phone state and service related information. 27 * 28 * The following phone information is included in returned ServiceState: 29 * 30 * <ul> 31 * <li>Service state: IN_SERVICE, OUT_OF_SERVICE, EMERGENCY_ONLY, POWER_OFF 32 * <li>Roaming indicator 33 * <li>Operator name, short name and numeric id 34 * <li>Network selection mode 35 * </ul> 36 */ 37 public class ServiceState implements Parcelable { 38 39 static final String LOG_TAG = "PHONE"; 40 static final boolean DBG = false; 41 static final boolean VDBG = false; // STOPSHIP if true 42 43 /** 44 * Normal operation condition, the phone is registered 45 * with an operator either in home network or in roaming. 46 */ 47 public static final int STATE_IN_SERVICE = 0; 48 49 /** 50 * Phone is not registered with any operator, the phone 51 * can be currently searching a new operator to register to, or not 52 * searching to registration at all, or registration is denied, or radio 53 * signal is not available. 54 */ 55 public static final int STATE_OUT_OF_SERVICE = 1; 56 57 /** 58 * The phone is registered and locked. Only emergency numbers are allowed. {@more} 59 */ 60 public static final int STATE_EMERGENCY_ONLY = 2; 61 62 /** 63 * Radio of telephony is explicitly powered off. 64 */ 65 public static final int STATE_POWER_OFF = 3; 66 67 /** 68 * RIL level registration state values from ril.h 69 * ((const char **)response)[0] is registration state 0-6, 70 * 0 - Not registered, MT is not currently searching 71 * a new operator to register 72 * 1 - Registered, home network 73 * 2 - Not registered, but MT is currently searching 74 * a new operator to register 75 * 3 - Registration denied 76 * 4 - Unknown 77 * 5 - Registered, roaming 78 * 10 - Same as 0, but indicates that emergency calls 79 * are enabled. 80 * 12 - Same as 2, but indicates that emergency calls 81 * are enabled. 82 * 13 - Same as 3, but indicates that emergency calls 83 * are enabled. 84 * 14 - Same as 4, but indicates that emergency calls 85 * are enabled. 86 * @hide 87 */ 88 public static final int RIL_REG_STATE_NOT_REG = 0; 89 /** @hide */ 90 public static final int RIL_REG_STATE_HOME = 1; 91 /** @hide */ 92 public static final int RIL_REG_STATE_SEARCHING = 2; 93 /** @hide */ 94 public static final int RIL_REG_STATE_DENIED = 3; 95 /** @hide */ 96 public static final int RIL_REG_STATE_UNKNOWN = 4; 97 /** @hide */ 98 public static final int RIL_REG_STATE_ROAMING = 5; 99 /** @hide */ 100 public static final int RIL_REG_STATE_NOT_REG_EMERGENCY_CALL_ENABLED = 10; 101 /** @hide */ 102 public static final int RIL_REG_STATE_SEARCHING_EMERGENCY_CALL_ENABLED = 12; 103 /** @hide */ 104 public static final int RIL_REG_STATE_DENIED_EMERGENCY_CALL_ENABLED = 13; 105 /** @hide */ 106 public static final int RIL_REG_STATE_UNKNOWN_EMERGENCY_CALL_ENABLED = 14; 107 108 /** 109 * Available radio technologies for GSM, UMTS and CDMA. 110 * Duplicates the constants from hardware/radio/include/ril.h 111 * This should only be used by agents working with the ril. Others 112 * should use the equivalent TelephonyManager.NETWORK_TYPE_* 113 */ 114 /** @hide */ 115 public static final int RIL_RADIO_TECHNOLOGY_UNKNOWN = 0; 116 /** @hide */ 117 public static final int RIL_RADIO_TECHNOLOGY_GPRS = 1; 118 /** @hide */ 119 public static final int RIL_RADIO_TECHNOLOGY_EDGE = 2; 120 /** @hide */ 121 public static final int RIL_RADIO_TECHNOLOGY_UMTS = 3; 122 /** @hide */ 123 public static final int RIL_RADIO_TECHNOLOGY_IS95A = 4; 124 /** @hide */ 125 public static final int RIL_RADIO_TECHNOLOGY_IS95B = 5; 126 /** @hide */ 127 public static final int RIL_RADIO_TECHNOLOGY_1xRTT = 6; 128 /** @hide */ 129 public static final int RIL_RADIO_TECHNOLOGY_EVDO_0 = 7; 130 /** @hide */ 131 public static final int RIL_RADIO_TECHNOLOGY_EVDO_A = 8; 132 /** @hide */ 133 public static final int RIL_RADIO_TECHNOLOGY_HSDPA = 9; 134 /** @hide */ 135 public static final int RIL_RADIO_TECHNOLOGY_HSUPA = 10; 136 /** @hide */ 137 public static final int RIL_RADIO_TECHNOLOGY_HSPA = 11; 138 /** @hide */ 139 public static final int RIL_RADIO_TECHNOLOGY_EVDO_B = 12; 140 /** @hide */ 141 public static final int RIL_RADIO_TECHNOLOGY_EHRPD = 13; 142 /** @hide */ 143 public static final int RIL_RADIO_TECHNOLOGY_LTE = 14; 144 /** @hide */ 145 public static final int RIL_RADIO_TECHNOLOGY_HSPAP = 15; 146 /** 147 * GSM radio technology only supports voice. It does not support data. 148 * @hide 149 */ 150 public static final int RIL_RADIO_TECHNOLOGY_GSM = 16; 151 /** @hide */ 152 public static final int RIL_RADIO_TECHNOLOGY_TD_SCDMA = 17; 153 /** 154 * IWLAN 155 * @hide 156 */ 157 public static final int RIL_RADIO_TECHNOLOGY_IWLAN = 18; 158 159 /** 160 * LTE_CA 161 * @hide 162 */ 163 public static final int RIL_RADIO_TECHNOLOGY_LTE_CA = 19; 164 165 /** @hide */ 166 public static final int RIL_RADIO_CDMA_TECHNOLOGY_BITMASK = 167 (1 << (RIL_RADIO_TECHNOLOGY_IS95A - 1)) 168 | (1 << (RIL_RADIO_TECHNOLOGY_IS95B - 1)) 169 | (1 << (RIL_RADIO_TECHNOLOGY_1xRTT - 1)) 170 | (1 << (RIL_RADIO_TECHNOLOGY_EVDO_0 - 1)) 171 | (1 << (RIL_RADIO_TECHNOLOGY_EVDO_A - 1)) 172 | (1 << (RIL_RADIO_TECHNOLOGY_EVDO_B - 1)) 173 | (1 << (RIL_RADIO_TECHNOLOGY_EHRPD - 1)); 174 175 /** 176 * Available registration states for GSM, UMTS and CDMA. 177 */ 178 /** @hide */ 179 public static final int REGISTRATION_STATE_NOT_REGISTERED_AND_NOT_SEARCHING = 0; 180 /** @hide */ 181 public static final int REGISTRATION_STATE_HOME_NETWORK = 1; 182 /** @hide */ 183 public static final int REGISTRATION_STATE_NOT_REGISTERED_AND_SEARCHING = 2; 184 /** @hide */ 185 public static final int REGISTRATION_STATE_REGISTRATION_DENIED = 3; 186 /** @hide */ 187 public static final int REGISTRATION_STATE_UNKNOWN = 4; 188 /** @hide */ 189 public static final int REGISTRATION_STATE_ROAMING = 5; 190 191 private int mVoiceRegState = STATE_OUT_OF_SERVICE; 192 private int mDataRegState = STATE_OUT_OF_SERVICE; 193 194 /** 195 * Roaming type 196 * HOME : in home network 197 * @hide 198 */ 199 public static final int ROAMING_TYPE_NOT_ROAMING = 0; 200 /** 201 * Roaming type 202 * UNKNOWN : in a roaming network, but we can not tell if it's domestic or international 203 * @hide 204 */ 205 public static final int ROAMING_TYPE_UNKNOWN = 1; 206 /** 207 * Roaming type 208 * DOMESTIC : in domestic roaming network 209 * @hide 210 */ 211 public static final int ROAMING_TYPE_DOMESTIC = 2; 212 /** 213 * Roaming type 214 * INTERNATIONAL : in international roaming network 215 * @hide 216 */ 217 public static final int ROAMING_TYPE_INTERNATIONAL = 3; 218 219 private int mVoiceRoamingType; 220 private int mDataRoamingType; 221 private String mVoiceOperatorAlphaLong; 222 private String mVoiceOperatorAlphaShort; 223 private String mVoiceOperatorNumeric; 224 private String mDataOperatorAlphaLong; 225 private String mDataOperatorAlphaShort; 226 private String mDataOperatorNumeric; 227 private boolean mIsManualNetworkSelection; 228 229 private boolean mIsEmergencyOnly; 230 231 private int mRilVoiceRadioTechnology; 232 private int mRilDataRadioTechnology; 233 234 private boolean mCssIndicator; 235 private int mNetworkId; 236 private int mSystemId; 237 private int mCdmaRoamingIndicator; 238 private int mCdmaDefaultRoamingIndicator; 239 private int mCdmaEriIconIndex; 240 private int mCdmaEriIconMode; 241 242 private boolean mIsDataRoamingFromRegistration; 243 244 private boolean mIsUsingCarrierAggregation; 245 246 /* EARFCN stands for E-UTRA Absolute Radio Frequency Channel Number, 247 * Reference: 3GPP TS 36.104 5.4.3 */ 248 private int mLteEarfcnRsrpBoost = 0; 249 250 /** 251 * get String description of roaming type 252 * @hide 253 */ getRoamingLogString(int roamingType)254 public static final String getRoamingLogString(int roamingType) { 255 switch (roamingType) { 256 case ROAMING_TYPE_NOT_ROAMING: 257 return "home"; 258 259 case ROAMING_TYPE_UNKNOWN: 260 return "roaming"; 261 262 case ROAMING_TYPE_DOMESTIC: 263 return "Domestic Roaming"; 264 265 case ROAMING_TYPE_INTERNATIONAL: 266 return "International Roaming"; 267 268 default: 269 return "UNKNOWN"; 270 } 271 } 272 273 /** 274 * Create a new ServiceState from a intent notifier Bundle 275 * 276 * This method is used by PhoneStateIntentReceiver and maybe by 277 * external applications. 278 * 279 * @param m Bundle from intent notifier 280 * @return newly created ServiceState 281 * @hide 282 */ newFromBundle(Bundle m)283 public static ServiceState newFromBundle(Bundle m) { 284 ServiceState ret; 285 ret = new ServiceState(); 286 ret.setFromNotifierBundle(m); 287 return ret; 288 } 289 290 /** 291 * Empty constructor 292 */ ServiceState()293 public ServiceState() { 294 } 295 296 /** 297 * Copy constructors 298 * 299 * @param s Source service state 300 */ ServiceState(ServiceState s)301 public ServiceState(ServiceState s) { 302 copyFrom(s); 303 } 304 copyFrom(ServiceState s)305 protected void copyFrom(ServiceState s) { 306 mVoiceRegState = s.mVoiceRegState; 307 mDataRegState = s.mDataRegState; 308 mVoiceRoamingType = s.mVoiceRoamingType; 309 mDataRoamingType = s.mDataRoamingType; 310 mVoiceOperatorAlphaLong = s.mVoiceOperatorAlphaLong; 311 mVoiceOperatorAlphaShort = s.mVoiceOperatorAlphaShort; 312 mVoiceOperatorNumeric = s.mVoiceOperatorNumeric; 313 mDataOperatorAlphaLong = s.mDataOperatorAlphaLong; 314 mDataOperatorAlphaShort = s.mDataOperatorAlphaShort; 315 mDataOperatorNumeric = s.mDataOperatorNumeric; 316 mIsManualNetworkSelection = s.mIsManualNetworkSelection; 317 mRilVoiceRadioTechnology = s.mRilVoiceRadioTechnology; 318 mRilDataRadioTechnology = s.mRilDataRadioTechnology; 319 mCssIndicator = s.mCssIndicator; 320 mNetworkId = s.mNetworkId; 321 mSystemId = s.mSystemId; 322 mCdmaRoamingIndicator = s.mCdmaRoamingIndicator; 323 mCdmaDefaultRoamingIndicator = s.mCdmaDefaultRoamingIndicator; 324 mCdmaEriIconIndex = s.mCdmaEriIconIndex; 325 mCdmaEriIconMode = s.mCdmaEriIconMode; 326 mIsEmergencyOnly = s.mIsEmergencyOnly; 327 mIsDataRoamingFromRegistration = s.mIsDataRoamingFromRegistration; 328 mIsUsingCarrierAggregation = s.mIsUsingCarrierAggregation; 329 mLteEarfcnRsrpBoost = s.mLteEarfcnRsrpBoost; 330 } 331 332 /** 333 * Construct a ServiceState object from the given parcel. 334 */ ServiceState(Parcel in)335 public ServiceState(Parcel in) { 336 mVoiceRegState = in.readInt(); 337 mDataRegState = in.readInt(); 338 mVoiceRoamingType = in.readInt(); 339 mDataRoamingType = in.readInt(); 340 mVoiceOperatorAlphaLong = in.readString(); 341 mVoiceOperatorAlphaShort = in.readString(); 342 mVoiceOperatorNumeric = in.readString(); 343 mDataOperatorAlphaLong = in.readString(); 344 mDataOperatorAlphaShort = in.readString(); 345 mDataOperatorNumeric = in.readString(); 346 mIsManualNetworkSelection = in.readInt() != 0; 347 mRilVoiceRadioTechnology = in.readInt(); 348 mRilDataRadioTechnology = in.readInt(); 349 mCssIndicator = (in.readInt() != 0); 350 mNetworkId = in.readInt(); 351 mSystemId = in.readInt(); 352 mCdmaRoamingIndicator = in.readInt(); 353 mCdmaDefaultRoamingIndicator = in.readInt(); 354 mCdmaEriIconIndex = in.readInt(); 355 mCdmaEriIconMode = in.readInt(); 356 mIsEmergencyOnly = in.readInt() != 0; 357 mIsDataRoamingFromRegistration = in.readInt() != 0; 358 mIsUsingCarrierAggregation = in.readInt() != 0; 359 mLteEarfcnRsrpBoost = in.readInt(); 360 } 361 writeToParcel(Parcel out, int flags)362 public void writeToParcel(Parcel out, int flags) { 363 out.writeInt(mVoiceRegState); 364 out.writeInt(mDataRegState); 365 out.writeInt(mVoiceRoamingType); 366 out.writeInt(mDataRoamingType); 367 out.writeString(mVoiceOperatorAlphaLong); 368 out.writeString(mVoiceOperatorAlphaShort); 369 out.writeString(mVoiceOperatorNumeric); 370 out.writeString(mDataOperatorAlphaLong); 371 out.writeString(mDataOperatorAlphaShort); 372 out.writeString(mDataOperatorNumeric); 373 out.writeInt(mIsManualNetworkSelection ? 1 : 0); 374 out.writeInt(mRilVoiceRadioTechnology); 375 out.writeInt(mRilDataRadioTechnology); 376 out.writeInt(mCssIndicator ? 1 : 0); 377 out.writeInt(mNetworkId); 378 out.writeInt(mSystemId); 379 out.writeInt(mCdmaRoamingIndicator); 380 out.writeInt(mCdmaDefaultRoamingIndicator); 381 out.writeInt(mCdmaEriIconIndex); 382 out.writeInt(mCdmaEriIconMode); 383 out.writeInt(mIsEmergencyOnly ? 1 : 0); 384 out.writeInt(mIsDataRoamingFromRegistration ? 1 : 0); 385 out.writeInt(mIsUsingCarrierAggregation ? 1 : 0); 386 out.writeInt(mLteEarfcnRsrpBoost); 387 } 388 describeContents()389 public int describeContents() { 390 return 0; 391 } 392 393 public static final Parcelable.Creator<ServiceState> CREATOR = 394 new Parcelable.Creator<ServiceState>() { 395 public ServiceState createFromParcel(Parcel in) { 396 return new ServiceState(in); 397 } 398 399 public ServiceState[] newArray(int size) { 400 return new ServiceState[size]; 401 } 402 }; 403 404 /** 405 * Get current voice service state 406 */ getState()407 public int getState() { 408 return getVoiceRegState(); 409 } 410 411 /** 412 * Get current voice service state 413 * 414 * @see #STATE_IN_SERVICE 415 * @see #STATE_OUT_OF_SERVICE 416 * @see #STATE_EMERGENCY_ONLY 417 * @see #STATE_POWER_OFF 418 * 419 * @hide 420 */ getVoiceRegState()421 public int getVoiceRegState() { 422 return mVoiceRegState; 423 } 424 425 /** 426 * Get current data service state 427 * 428 * @see #STATE_IN_SERVICE 429 * @see #STATE_OUT_OF_SERVICE 430 * @see #STATE_EMERGENCY_ONLY 431 * @see #STATE_POWER_OFF 432 * 433 * @hide 434 */ getDataRegState()435 public int getDataRegState() { 436 return mDataRegState; 437 } 438 439 /** 440 * Get current roaming indicator of phone 441 * (note: not just decoding from TS 27.007 7.2) 442 * 443 * @return true if TS 27.007 7.2 roaming is true 444 * and ONS is different from SPN 445 */ getRoaming()446 public boolean getRoaming() { 447 return getVoiceRoaming() || getDataRoaming(); 448 } 449 450 /** 451 * Get current voice network roaming status 452 * @return roaming status 453 * @hide 454 */ getVoiceRoaming()455 public boolean getVoiceRoaming() { 456 return mVoiceRoamingType != ROAMING_TYPE_NOT_ROAMING; 457 } 458 459 /** 460 * Get current voice network roaming type 461 * @return roaming type 462 * @hide 463 */ getVoiceRoamingType()464 public int getVoiceRoamingType() { 465 return mVoiceRoamingType; 466 } 467 468 /** 469 * Get current data network roaming type 470 * @return roaming type 471 * @hide 472 */ getDataRoaming()473 public boolean getDataRoaming() { 474 return mDataRoamingType != ROAMING_TYPE_NOT_ROAMING; 475 } 476 477 /** 478 * Set whether data network registration state is roaming 479 * 480 * This should only be set to the roaming value received 481 * once the data registration phase has completed. 482 * @hide 483 */ setDataRoamingFromRegistration(boolean dataRoaming)484 public void setDataRoamingFromRegistration(boolean dataRoaming) { 485 mIsDataRoamingFromRegistration = dataRoaming; 486 } 487 488 /** 489 * Get whether data network registration state is roaming 490 * @return true if registration indicates roaming, false otherwise 491 * @hide 492 */ getDataRoamingFromRegistration()493 public boolean getDataRoamingFromRegistration() { 494 return mIsDataRoamingFromRegistration; 495 } 496 497 /** 498 * Get current data network roaming type 499 * @return roaming type 500 * @hide 501 */ getDataRoamingType()502 public int getDataRoamingType() { 503 return mDataRoamingType; 504 } 505 506 /** 507 * @hide 508 */ isEmergencyOnly()509 public boolean isEmergencyOnly() { 510 return mIsEmergencyOnly; 511 } 512 513 /** 514 * @hide 515 */ getCdmaRoamingIndicator()516 public int getCdmaRoamingIndicator(){ 517 return this.mCdmaRoamingIndicator; 518 } 519 520 /** 521 * @hide 522 */ getCdmaDefaultRoamingIndicator()523 public int getCdmaDefaultRoamingIndicator(){ 524 return this.mCdmaDefaultRoamingIndicator; 525 } 526 527 /** 528 * @hide 529 */ getCdmaEriIconIndex()530 public int getCdmaEriIconIndex() { 531 return this.mCdmaEriIconIndex; 532 } 533 534 /** 535 * @hide 536 */ getCdmaEriIconMode()537 public int getCdmaEriIconMode() { 538 return this.mCdmaEriIconMode; 539 } 540 541 /** 542 * Get current registered operator name in long alphanumeric format. 543 * 544 * In GSM/UMTS, long format can be up to 16 characters long. 545 * In CDMA, returns the ERI text, if set. Otherwise, returns the ONS. 546 * 547 * @return long name of operator, null if unregistered or unknown 548 */ getOperatorAlphaLong()549 public String getOperatorAlphaLong() { 550 return mVoiceOperatorAlphaLong; 551 } 552 553 /** 554 * Get current registered voice network operator name in long alphanumeric format. 555 * @return long name of operator 556 * @hide 557 */ getVoiceOperatorAlphaLong()558 public String getVoiceOperatorAlphaLong() { 559 return mVoiceOperatorAlphaLong; 560 } 561 562 /** 563 * Get current registered data network operator name in long alphanumeric format. 564 * @return long name of voice operator 565 * @hide 566 */ getDataOperatorAlphaLong()567 public String getDataOperatorAlphaLong() { 568 return mDataOperatorAlphaLong; 569 } 570 571 /** 572 * Get current registered operator name in short alphanumeric format. 573 * 574 * In GSM/UMTS, short format can be up to 8 characters long. 575 * 576 * @return short name of operator, null if unregistered or unknown 577 */ getOperatorAlphaShort()578 public String getOperatorAlphaShort() { 579 return mVoiceOperatorAlphaShort; 580 } 581 582 /** 583 * Get current registered voice network operator name in short alphanumeric format. 584 * @return short name of operator, null if unregistered or unknown 585 * @hide 586 */ getVoiceOperatorAlphaShort()587 public String getVoiceOperatorAlphaShort() { 588 return mVoiceOperatorAlphaShort; 589 } 590 591 /** 592 * Get current registered data network operator name in short alphanumeric format. 593 * @return short name of operator, null if unregistered or unknown 594 * @hide 595 */ getDataOperatorAlphaShort()596 public String getDataOperatorAlphaShort() { 597 return mDataOperatorAlphaShort; 598 } 599 600 /** 601 * Get current registered operator name in long alphanumeric format if 602 * available or short otherwise. 603 * 604 * @see #getOperatorAlphaLong 605 * @see #getOperatorAlphaShort 606 * 607 * @return name of operator, null if unregistered or unknown 608 * @hide 609 */ getOperatorAlpha()610 public String getOperatorAlpha() { 611 if (TextUtils.isEmpty(mVoiceOperatorAlphaLong)) { 612 return mVoiceOperatorAlphaShort; 613 } 614 615 return mVoiceOperatorAlphaLong; 616 } 617 618 /** 619 * Get current registered operator numeric id. 620 * 621 * In GSM/UMTS, numeric format is 3 digit country code plus 2 or 3 digit 622 * network code. 623 * 624 * @return numeric format of operator, null if unregistered or unknown 625 */ 626 /* 627 * The country code can be decoded using 628 * {@link com.android.internal.telephony.MccTable#countryCodeForMcc(int)}. 629 */ getOperatorNumeric()630 public String getOperatorNumeric() { 631 return mVoiceOperatorNumeric; 632 } 633 634 /** 635 * Get current registered voice network operator numeric id. 636 * @return numeric format of operator, null if unregistered or unknown 637 * @hide 638 */ getVoiceOperatorNumeric()639 public String getVoiceOperatorNumeric() { 640 return mVoiceOperatorNumeric; 641 } 642 643 /** 644 * Get current registered data network operator numeric id. 645 * @return numeric format of operator, null if unregistered or unknown 646 * @hide 647 */ getDataOperatorNumeric()648 public String getDataOperatorNumeric() { 649 return mDataOperatorNumeric; 650 } 651 652 /** 653 * Get current network selection mode. 654 * 655 * @return true if manual mode, false if automatic mode 656 */ getIsManualSelection()657 public boolean getIsManualSelection() { 658 return mIsManualNetworkSelection; 659 } 660 661 @Override hashCode()662 public int hashCode() { 663 return ((mVoiceRegState * 31) 664 + (mDataRegState * 37) 665 + mVoiceRoamingType 666 + mDataRoamingType 667 + (mIsManualNetworkSelection ? 1 : 0) 668 + ((null == mVoiceOperatorAlphaLong) ? 0 : mVoiceOperatorAlphaLong.hashCode()) 669 + ((null == mVoiceOperatorAlphaShort) ? 0 : mVoiceOperatorAlphaShort.hashCode()) 670 + ((null == mVoiceOperatorNumeric) ? 0 : mVoiceOperatorNumeric.hashCode()) 671 + ((null == mDataOperatorAlphaLong) ? 0 : mDataOperatorAlphaLong.hashCode()) 672 + ((null == mDataOperatorAlphaShort) ? 0 : mDataOperatorAlphaShort.hashCode()) 673 + ((null == mDataOperatorNumeric) ? 0 : mDataOperatorNumeric.hashCode()) 674 + mCdmaRoamingIndicator 675 + mCdmaDefaultRoamingIndicator 676 + (mIsEmergencyOnly ? 1 : 0) 677 + (mIsDataRoamingFromRegistration ? 1 : 0)); 678 } 679 680 @Override equals(Object o)681 public boolean equals (Object o) { 682 ServiceState s; 683 684 try { 685 s = (ServiceState) o; 686 } catch (ClassCastException ex) { 687 return false; 688 } 689 690 if (o == null) { 691 return false; 692 } 693 694 return (mVoiceRegState == s.mVoiceRegState 695 && mDataRegState == s.mDataRegState 696 && mIsManualNetworkSelection == s.mIsManualNetworkSelection 697 && mVoiceRoamingType == s.mVoiceRoamingType 698 && mDataRoamingType == s.mDataRoamingType 699 && equalsHandlesNulls(mVoiceOperatorAlphaLong, s.mVoiceOperatorAlphaLong) 700 && equalsHandlesNulls(mVoiceOperatorAlphaShort, s.mVoiceOperatorAlphaShort) 701 && equalsHandlesNulls(mVoiceOperatorNumeric, s.mVoiceOperatorNumeric) 702 && equalsHandlesNulls(mDataOperatorAlphaLong, s.mDataOperatorAlphaLong) 703 && equalsHandlesNulls(mDataOperatorAlphaShort, s.mDataOperatorAlphaShort) 704 && equalsHandlesNulls(mDataOperatorNumeric, s.mDataOperatorNumeric) 705 && equalsHandlesNulls(mRilVoiceRadioTechnology, s.mRilVoiceRadioTechnology) 706 && equalsHandlesNulls(mRilDataRadioTechnology, s.mRilDataRadioTechnology) 707 && equalsHandlesNulls(mCssIndicator, s.mCssIndicator) 708 && equalsHandlesNulls(mNetworkId, s.mNetworkId) 709 && equalsHandlesNulls(mSystemId, s.mSystemId) 710 && equalsHandlesNulls(mCdmaRoamingIndicator, s.mCdmaRoamingIndicator) 711 && equalsHandlesNulls(mCdmaDefaultRoamingIndicator, 712 s.mCdmaDefaultRoamingIndicator) 713 && mIsEmergencyOnly == s.mIsEmergencyOnly 714 && mIsDataRoamingFromRegistration == s.mIsDataRoamingFromRegistration 715 && mIsUsingCarrierAggregation == s.mIsUsingCarrierAggregation); 716 } 717 718 /** 719 * Convert radio technology to String 720 * 721 * @param radioTechnology 722 * @return String representation of the RAT 723 * 724 * @hide 725 */ rilRadioTechnologyToString(int rt)726 public static String rilRadioTechnologyToString(int rt) { 727 String rtString; 728 729 switch(rt) { 730 case RIL_RADIO_TECHNOLOGY_UNKNOWN: 731 rtString = "Unknown"; 732 break; 733 case RIL_RADIO_TECHNOLOGY_GPRS: 734 rtString = "GPRS"; 735 break; 736 case RIL_RADIO_TECHNOLOGY_EDGE: 737 rtString = "EDGE"; 738 break; 739 case RIL_RADIO_TECHNOLOGY_UMTS: 740 rtString = "UMTS"; 741 break; 742 case RIL_RADIO_TECHNOLOGY_IS95A: 743 rtString = "CDMA-IS95A"; 744 break; 745 case RIL_RADIO_TECHNOLOGY_IS95B: 746 rtString = "CDMA-IS95B"; 747 break; 748 case RIL_RADIO_TECHNOLOGY_1xRTT: 749 rtString = "1xRTT"; 750 break; 751 case RIL_RADIO_TECHNOLOGY_EVDO_0: 752 rtString = "EvDo-rev.0"; 753 break; 754 case RIL_RADIO_TECHNOLOGY_EVDO_A: 755 rtString = "EvDo-rev.A"; 756 break; 757 case RIL_RADIO_TECHNOLOGY_HSDPA: 758 rtString = "HSDPA"; 759 break; 760 case RIL_RADIO_TECHNOLOGY_HSUPA: 761 rtString = "HSUPA"; 762 break; 763 case RIL_RADIO_TECHNOLOGY_HSPA: 764 rtString = "HSPA"; 765 break; 766 case RIL_RADIO_TECHNOLOGY_EVDO_B: 767 rtString = "EvDo-rev.B"; 768 break; 769 case RIL_RADIO_TECHNOLOGY_EHRPD: 770 rtString = "eHRPD"; 771 break; 772 case RIL_RADIO_TECHNOLOGY_LTE: 773 rtString = "LTE"; 774 break; 775 case RIL_RADIO_TECHNOLOGY_HSPAP: 776 rtString = "HSPAP"; 777 break; 778 case RIL_RADIO_TECHNOLOGY_GSM: 779 rtString = "GSM"; 780 break; 781 case RIL_RADIO_TECHNOLOGY_IWLAN: 782 rtString = "IWLAN"; 783 break; 784 case RIL_RADIO_TECHNOLOGY_TD_SCDMA: 785 rtString = "TD-SCDMA"; 786 break; 787 case RIL_RADIO_TECHNOLOGY_LTE_CA: 788 rtString = "LTE_CA"; 789 break; 790 default: 791 rtString = "Unexpected"; 792 Rlog.w(LOG_TAG, "Unexpected radioTechnology=" + rt); 793 break; 794 } 795 return rtString; 796 } 797 798 /** 799 * Convert RIL Service State to String 800 * 801 * @param serviceState 802 * @return String representation of the ServiceState 803 * 804 * @hide 805 */ rilServiceStateToString(int serviceState)806 public static String rilServiceStateToString(int serviceState) { 807 switch(serviceState) { 808 case STATE_IN_SERVICE: 809 return "IN_SERVICE"; 810 case STATE_OUT_OF_SERVICE: 811 return "OUT_OF_SERVICE"; 812 case STATE_EMERGENCY_ONLY: 813 return "EMERGENCY_ONLY"; 814 case STATE_POWER_OFF: 815 return "POWER_OFF"; 816 default: 817 return "UNKNOWN"; 818 } 819 } 820 821 @Override toString()822 public String toString() { 823 return new StringBuilder().append("{mVoiceRegState=").append(mVoiceRegState) 824 .append("(" + rilServiceStateToString(mVoiceRegState) + ")") 825 .append(", mDataRegState=").append(mDataRegState) 826 .append("(" + rilServiceStateToString(mDataRegState) + ")") 827 .append(", mVoiceRoamingType=").append(getRoamingLogString(mVoiceRoamingType)) 828 .append(", mDataRoamingType=").append(getRoamingLogString(mDataRoamingType)) 829 .append(", mVoiceOperatorAlphaLong=").append(mVoiceOperatorAlphaLong) 830 .append(", mVoiceOperatorAlphaShort=").append(mVoiceOperatorAlphaShort) 831 .append(", mDataOperatorAlphaLong=").append(mDataOperatorAlphaLong) 832 .append(", mDataOperatorAlphaShort=").append(mDataOperatorAlphaShort) 833 .append(", isManualNetworkSelection=").append(mIsManualNetworkSelection) 834 .append(mIsManualNetworkSelection ? "(manual)" : "(automatic)") 835 .append(", mRilVoiceRadioTechnology=").append(mRilVoiceRadioTechnology) 836 .append("(" + rilRadioTechnologyToString(mRilVoiceRadioTechnology) + ")") 837 .append(", mRilDataRadioTechnology=").append(mRilDataRadioTechnology) 838 .append("(" + rilRadioTechnologyToString(mRilDataRadioTechnology) + ")") 839 .append(", mCssIndicator=").append(mCssIndicator ? "supported" : "unsupported") 840 .append(", mNetworkId=").append(mNetworkId) 841 .append(", mSystemId=").append(mSystemId) 842 .append(", mCdmaRoamingIndicator=").append(mCdmaRoamingIndicator) 843 .append(", mCdmaDefaultRoamingIndicator=").append(mCdmaDefaultRoamingIndicator) 844 .append(", mIsEmergencyOnly=").append(mIsEmergencyOnly) 845 .append(", mIsDataRoamingFromRegistration=").append(mIsDataRoamingFromRegistration) 846 .append(", mIsUsingCarrierAggregation=").append(mIsUsingCarrierAggregation) 847 .append(", mLteEarfcnRsrpBoost=").append(mLteEarfcnRsrpBoost) 848 .append("}").toString(); 849 } 850 setNullState(int state)851 private void setNullState(int state) { 852 if (DBG) Rlog.d(LOG_TAG, "[ServiceState] setNullState=" + state); 853 mVoiceRegState = state; 854 mDataRegState = state; 855 mVoiceRoamingType = ROAMING_TYPE_NOT_ROAMING; 856 mDataRoamingType = ROAMING_TYPE_NOT_ROAMING; 857 mVoiceOperatorAlphaLong = null; 858 mVoiceOperatorAlphaShort = null; 859 mVoiceOperatorNumeric = null; 860 mDataOperatorAlphaLong = null; 861 mDataOperatorAlphaShort = null; 862 mDataOperatorNumeric = null; 863 mIsManualNetworkSelection = false; 864 mRilVoiceRadioTechnology = 0; 865 mRilDataRadioTechnology = 0; 866 mCssIndicator = false; 867 mNetworkId = -1; 868 mSystemId = -1; 869 mCdmaRoamingIndicator = -1; 870 mCdmaDefaultRoamingIndicator = -1; 871 mCdmaEriIconIndex = -1; 872 mCdmaEriIconMode = -1; 873 mIsEmergencyOnly = false; 874 mIsDataRoamingFromRegistration = false; 875 mIsUsingCarrierAggregation = false; 876 mLteEarfcnRsrpBoost = 0; 877 } 878 setStateOutOfService()879 public void setStateOutOfService() { 880 setNullState(STATE_OUT_OF_SERVICE); 881 } 882 setStateOff()883 public void setStateOff() { 884 setNullState(STATE_POWER_OFF); 885 } 886 setState(int state)887 public void setState(int state) { 888 setVoiceRegState(state); 889 if (DBG) Rlog.e(LOG_TAG, "[ServiceState] setState deprecated use setVoiceRegState()"); 890 } 891 892 /** @hide */ setVoiceRegState(int state)893 public void setVoiceRegState(int state) { 894 mVoiceRegState = state; 895 if (DBG) Rlog.d(LOG_TAG, "[ServiceState] setVoiceRegState=" + mVoiceRegState); 896 } 897 898 /** @hide */ setDataRegState(int state)899 public void setDataRegState(int state) { 900 mDataRegState = state; 901 if (VDBG) Rlog.d(LOG_TAG, "[ServiceState] setDataRegState=" + mDataRegState); 902 } 903 setRoaming(boolean roaming)904 public void setRoaming(boolean roaming) { 905 mVoiceRoamingType = (roaming ? ROAMING_TYPE_UNKNOWN : ROAMING_TYPE_NOT_ROAMING); 906 mDataRoamingType = mVoiceRoamingType; 907 } 908 909 /** @hide */ setVoiceRoaming(boolean roaming)910 public void setVoiceRoaming(boolean roaming) { 911 mVoiceRoamingType = (roaming ? ROAMING_TYPE_UNKNOWN : ROAMING_TYPE_NOT_ROAMING); 912 } 913 914 /** @hide */ setVoiceRoamingType(int type)915 public void setVoiceRoamingType(int type) { 916 mVoiceRoamingType = type; 917 } 918 919 /** @hide */ setDataRoaming(boolean dataRoaming)920 public void setDataRoaming(boolean dataRoaming) { 921 mDataRoamingType = (dataRoaming ? ROAMING_TYPE_UNKNOWN : ROAMING_TYPE_NOT_ROAMING); 922 } 923 924 /** @hide */ setDataRoamingType(int type)925 public void setDataRoamingType(int type) { 926 mDataRoamingType = type; 927 } 928 929 /** 930 * @hide 931 */ setEmergencyOnly(boolean emergencyOnly)932 public void setEmergencyOnly(boolean emergencyOnly) { 933 mIsEmergencyOnly = emergencyOnly; 934 } 935 936 /** 937 * @hide 938 */ setCdmaRoamingIndicator(int roaming)939 public void setCdmaRoamingIndicator(int roaming) { 940 this.mCdmaRoamingIndicator = roaming; 941 } 942 943 /** 944 * @hide 945 */ setCdmaDefaultRoamingIndicator(int roaming)946 public void setCdmaDefaultRoamingIndicator (int roaming) { 947 this.mCdmaDefaultRoamingIndicator = roaming; 948 } 949 950 /** 951 * @hide 952 */ setCdmaEriIconIndex(int index)953 public void setCdmaEriIconIndex(int index) { 954 this.mCdmaEriIconIndex = index; 955 } 956 957 /** 958 * @hide 959 */ setCdmaEriIconMode(int mode)960 public void setCdmaEriIconMode(int mode) { 961 this.mCdmaEriIconMode = mode; 962 } 963 setOperatorName(String longName, String shortName, String numeric)964 public void setOperatorName(String longName, String shortName, String numeric) { 965 mVoiceOperatorAlphaLong = longName; 966 mVoiceOperatorAlphaShort = shortName; 967 mVoiceOperatorNumeric = numeric; 968 mDataOperatorAlphaLong = longName; 969 mDataOperatorAlphaShort = shortName; 970 mDataOperatorNumeric = numeric; 971 } 972 973 /** @hide */ setVoiceOperatorName(String longName, String shortName, String numeric)974 public void setVoiceOperatorName(String longName, String shortName, String numeric) { 975 mVoiceOperatorAlphaLong = longName; 976 mVoiceOperatorAlphaShort = shortName; 977 mVoiceOperatorNumeric = numeric; 978 } 979 980 /** @hide */ setDataOperatorName(String longName, String shortName, String numeric)981 public void setDataOperatorName(String longName, String shortName, String numeric) { 982 mDataOperatorAlphaLong = longName; 983 mDataOperatorAlphaShort = shortName; 984 mDataOperatorNumeric = numeric; 985 } 986 987 /** 988 * In CDMA, mOperatorAlphaLong can be set from the ERI text. 989 * This is done from the GsmCdmaPhone and not from the ServiceStateTracker. 990 * 991 * @hide 992 */ setOperatorAlphaLong(String longName)993 public void setOperatorAlphaLong(String longName) { 994 mVoiceOperatorAlphaLong = longName; 995 mDataOperatorAlphaLong = longName; 996 } 997 998 /** @hide */ setVoiceOperatorAlphaLong(String longName)999 public void setVoiceOperatorAlphaLong(String longName) { 1000 mVoiceOperatorAlphaLong = longName; 1001 } 1002 1003 /** @hide */ setDataOperatorAlphaLong(String longName)1004 public void setDataOperatorAlphaLong(String longName) { 1005 mDataOperatorAlphaLong = longName; 1006 } 1007 setIsManualSelection(boolean isManual)1008 public void setIsManualSelection(boolean isManual) { 1009 mIsManualNetworkSelection = isManual; 1010 } 1011 1012 /** 1013 * Test whether two objects hold the same data values or both are null. 1014 * 1015 * @param a first obj 1016 * @param b second obj 1017 * @return true if two objects equal or both are null 1018 */ equalsHandlesNulls(Object a, Object b)1019 private static boolean equalsHandlesNulls (Object a, Object b) { 1020 return (a == null) ? (b == null) : a.equals (b); 1021 } 1022 1023 /** 1024 * Set ServiceState based on intent notifier map. 1025 * 1026 * @param m intent notifier map 1027 * @hide 1028 */ setFromNotifierBundle(Bundle m)1029 private void setFromNotifierBundle(Bundle m) { 1030 mVoiceRegState = m.getInt("voiceRegState"); 1031 mDataRegState = m.getInt("dataRegState"); 1032 mVoiceRoamingType = m.getInt("voiceRoamingType"); 1033 mDataRoamingType = m.getInt("dataRoamingType"); 1034 mVoiceOperatorAlphaLong = m.getString("operator-alpha-long"); 1035 mVoiceOperatorAlphaShort = m.getString("operator-alpha-short"); 1036 mVoiceOperatorNumeric = m.getString("operator-numeric"); 1037 mDataOperatorAlphaLong = m.getString("data-operator-alpha-long"); 1038 mDataOperatorAlphaShort = m.getString("data-operator-alpha-short"); 1039 mDataOperatorNumeric = m.getString("data-operator-numeric"); 1040 mIsManualNetworkSelection = m.getBoolean("manual"); 1041 mRilVoiceRadioTechnology = m.getInt("radioTechnology"); 1042 mRilDataRadioTechnology = m.getInt("dataRadioTechnology"); 1043 mCssIndicator = m.getBoolean("cssIndicator"); 1044 mNetworkId = m.getInt("networkId"); 1045 mSystemId = m.getInt("systemId"); 1046 mCdmaRoamingIndicator = m.getInt("cdmaRoamingIndicator"); 1047 mCdmaDefaultRoamingIndicator = m.getInt("cdmaDefaultRoamingIndicator"); 1048 mIsEmergencyOnly = m.getBoolean("emergencyOnly"); 1049 mIsDataRoamingFromRegistration = m.getBoolean("isDataRoamingFromRegistration"); 1050 mIsUsingCarrierAggregation = m.getBoolean("isUsingCarrierAggregation"); 1051 mLteEarfcnRsrpBoost = m.getInt("LteEarfcnRsrpBoost"); 1052 } 1053 1054 /** 1055 * Set intent notifier Bundle based on service state. 1056 * 1057 * @param m intent notifier Bundle 1058 * @hide 1059 */ fillInNotifierBundle(Bundle m)1060 public void fillInNotifierBundle(Bundle m) { 1061 m.putInt("voiceRegState", mVoiceRegState); 1062 m.putInt("dataRegState", mDataRegState); 1063 m.putInt("voiceRoamingType", mVoiceRoamingType); 1064 m.putInt("dataRoamingType", mDataRoamingType); 1065 m.putString("operator-alpha-long", mVoiceOperatorAlphaLong); 1066 m.putString("operator-alpha-short", mVoiceOperatorAlphaShort); 1067 m.putString("operator-numeric", mVoiceOperatorNumeric); 1068 m.putString("data-operator-alpha-long", mDataOperatorAlphaLong); 1069 m.putString("data-operator-alpha-short", mDataOperatorAlphaShort); 1070 m.putString("data-operator-numeric", mDataOperatorNumeric); 1071 m.putBoolean("manual", mIsManualNetworkSelection); 1072 m.putInt("radioTechnology", mRilVoiceRadioTechnology); 1073 m.putInt("dataRadioTechnology", mRilDataRadioTechnology); 1074 m.putBoolean("cssIndicator", mCssIndicator); 1075 m.putInt("networkId", mNetworkId); 1076 m.putInt("systemId", mSystemId); 1077 m.putInt("cdmaRoamingIndicator", mCdmaRoamingIndicator); 1078 m.putInt("cdmaDefaultRoamingIndicator", mCdmaDefaultRoamingIndicator); 1079 m.putBoolean("emergencyOnly", mIsEmergencyOnly); 1080 m.putBoolean("isDataRoamingFromRegistration", mIsDataRoamingFromRegistration); 1081 m.putBoolean("isUsingCarrierAggregation", mIsUsingCarrierAggregation); 1082 m.putInt("LteEarfcnRsrpBoost", mLteEarfcnRsrpBoost); 1083 } 1084 1085 /** @hide */ setRilVoiceRadioTechnology(int rt)1086 public void setRilVoiceRadioTechnology(int rt) { 1087 if (rt == RIL_RADIO_TECHNOLOGY_LTE_CA) { 1088 rt = RIL_RADIO_TECHNOLOGY_LTE; 1089 } 1090 1091 this.mRilVoiceRadioTechnology = rt; 1092 } 1093 1094 /** @hide */ setRilDataRadioTechnology(int rt)1095 public void setRilDataRadioTechnology(int rt) { 1096 if (rt == RIL_RADIO_TECHNOLOGY_LTE_CA) { 1097 rt = RIL_RADIO_TECHNOLOGY_LTE; 1098 this.mIsUsingCarrierAggregation = true; 1099 } else { 1100 this.mIsUsingCarrierAggregation = false; 1101 } 1102 this.mRilDataRadioTechnology = rt; 1103 if (VDBG) Rlog.d(LOG_TAG, "[ServiceState] setRilDataRadioTechnology=" + 1104 mRilDataRadioTechnology); 1105 } 1106 1107 /** @hide */ isUsingCarrierAggregation()1108 public boolean isUsingCarrierAggregation() { 1109 return mIsUsingCarrierAggregation; 1110 } 1111 1112 /** @hide */ setIsUsingCarrierAggregation(boolean ca)1113 public void setIsUsingCarrierAggregation(boolean ca) { 1114 mIsUsingCarrierAggregation = ca; 1115 } 1116 1117 /** @hide */ getLteEarfcnRsrpBoost()1118 public int getLteEarfcnRsrpBoost() { 1119 return mLteEarfcnRsrpBoost; 1120 } 1121 1122 /** @hide */ setLteEarfcnRsrpBoost(int LteEarfcnRsrpBoost)1123 public void setLteEarfcnRsrpBoost(int LteEarfcnRsrpBoost) { 1124 mLteEarfcnRsrpBoost = LteEarfcnRsrpBoost; 1125 } 1126 1127 /** @hide */ setCssIndicator(int css)1128 public void setCssIndicator(int css) { 1129 this.mCssIndicator = (css != 0); 1130 } 1131 1132 /** @hide */ setSystemAndNetworkId(int systemId, int networkId)1133 public void setSystemAndNetworkId(int systemId, int networkId) { 1134 this.mSystemId = systemId; 1135 this.mNetworkId = networkId; 1136 } 1137 1138 /** @hide */ getRilVoiceRadioTechnology()1139 public int getRilVoiceRadioTechnology() { 1140 return this.mRilVoiceRadioTechnology; 1141 } 1142 /** @hide */ getRilDataRadioTechnology()1143 public int getRilDataRadioTechnology() { 1144 return this.mRilDataRadioTechnology; 1145 } 1146 /** 1147 * @hide 1148 * @Deprecated to be removed Q3 2013 use {@link #getRilDataRadioTechnology} or 1149 * {@link #getRilVoiceRadioTechnology} 1150 */ getRadioTechnology()1151 public int getRadioTechnology() { 1152 Rlog.e(LOG_TAG, "ServiceState.getRadioTechnology() DEPRECATED will be removed *******"); 1153 return getRilDataRadioTechnology(); 1154 } 1155 rilRadioTechnologyToNetworkType(int rt)1156 private int rilRadioTechnologyToNetworkType(int rt) { 1157 switch(rt) { 1158 case ServiceState.RIL_RADIO_TECHNOLOGY_GPRS: 1159 return TelephonyManager.NETWORK_TYPE_GPRS; 1160 case ServiceState.RIL_RADIO_TECHNOLOGY_EDGE: 1161 return TelephonyManager.NETWORK_TYPE_EDGE; 1162 case ServiceState.RIL_RADIO_TECHNOLOGY_UMTS: 1163 return TelephonyManager.NETWORK_TYPE_UMTS; 1164 case ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA: 1165 return TelephonyManager.NETWORK_TYPE_HSDPA; 1166 case ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA: 1167 return TelephonyManager.NETWORK_TYPE_HSUPA; 1168 case ServiceState.RIL_RADIO_TECHNOLOGY_HSPA: 1169 return TelephonyManager.NETWORK_TYPE_HSPA; 1170 case ServiceState.RIL_RADIO_TECHNOLOGY_IS95A: 1171 case ServiceState.RIL_RADIO_TECHNOLOGY_IS95B: 1172 return TelephonyManager.NETWORK_TYPE_CDMA; 1173 case ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT: 1174 return TelephonyManager.NETWORK_TYPE_1xRTT; 1175 case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0: 1176 return TelephonyManager.NETWORK_TYPE_EVDO_0; 1177 case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A: 1178 return TelephonyManager.NETWORK_TYPE_EVDO_A; 1179 case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B: 1180 return TelephonyManager.NETWORK_TYPE_EVDO_B; 1181 case ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD: 1182 return TelephonyManager.NETWORK_TYPE_EHRPD; 1183 case ServiceState.RIL_RADIO_TECHNOLOGY_LTE: 1184 return TelephonyManager.NETWORK_TYPE_LTE; 1185 case ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP: 1186 return TelephonyManager.NETWORK_TYPE_HSPAP; 1187 case ServiceState.RIL_RADIO_TECHNOLOGY_GSM: 1188 return TelephonyManager.NETWORK_TYPE_GSM; 1189 case ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA: 1190 return TelephonyManager.NETWORK_TYPE_TD_SCDMA; 1191 case ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN: 1192 return TelephonyManager.NETWORK_TYPE_IWLAN; 1193 case ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA: 1194 return TelephonyManager.NETWORK_TYPE_LTE_CA; 1195 default: 1196 return TelephonyManager.NETWORK_TYPE_UNKNOWN; 1197 } 1198 } 1199 1200 /** 1201 * @Deprecated to be removed Q3 2013 use {@link #getVoiceNetworkType} 1202 * @hide 1203 */ getNetworkType()1204 public int getNetworkType() { 1205 Rlog.e(LOG_TAG, "ServiceState.getNetworkType() DEPRECATED will be removed *******"); 1206 return rilRadioTechnologyToNetworkType(mRilVoiceRadioTechnology); 1207 } 1208 1209 /** @hide */ getDataNetworkType()1210 public int getDataNetworkType() { 1211 return rilRadioTechnologyToNetworkType(mRilDataRadioTechnology); 1212 } 1213 1214 /** @hide */ getVoiceNetworkType()1215 public int getVoiceNetworkType() { 1216 return rilRadioTechnologyToNetworkType(mRilVoiceRadioTechnology); 1217 } 1218 1219 /** @hide */ getCssIndicator()1220 public int getCssIndicator() { 1221 return this.mCssIndicator ? 1 : 0; 1222 } 1223 1224 /** @hide */ getNetworkId()1225 public int getNetworkId() { 1226 return this.mNetworkId; 1227 } 1228 1229 /** @hide */ getSystemId()1230 public int getSystemId() { 1231 return this.mSystemId; 1232 } 1233 1234 /** @hide */ isGsm(int radioTechnology)1235 public static boolean isGsm(int radioTechnology) { 1236 return radioTechnology == RIL_RADIO_TECHNOLOGY_GPRS 1237 || radioTechnology == RIL_RADIO_TECHNOLOGY_EDGE 1238 || radioTechnology == RIL_RADIO_TECHNOLOGY_UMTS 1239 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSDPA 1240 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSUPA 1241 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSPA 1242 || radioTechnology == RIL_RADIO_TECHNOLOGY_LTE 1243 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSPAP 1244 || radioTechnology == RIL_RADIO_TECHNOLOGY_GSM 1245 || radioTechnology == RIL_RADIO_TECHNOLOGY_TD_SCDMA 1246 || radioTechnology == RIL_RADIO_TECHNOLOGY_IWLAN 1247 || radioTechnology == RIL_RADIO_TECHNOLOGY_LTE_CA; 1248 1249 } 1250 1251 /** @hide */ isCdma(int radioTechnology)1252 public static boolean isCdma(int radioTechnology) { 1253 return radioTechnology == RIL_RADIO_TECHNOLOGY_IS95A 1254 || radioTechnology == RIL_RADIO_TECHNOLOGY_IS95B 1255 || radioTechnology == RIL_RADIO_TECHNOLOGY_1xRTT 1256 || radioTechnology == RIL_RADIO_TECHNOLOGY_EVDO_0 1257 || radioTechnology == RIL_RADIO_TECHNOLOGY_EVDO_A 1258 || radioTechnology == RIL_RADIO_TECHNOLOGY_EVDO_B 1259 || radioTechnology == RIL_RADIO_TECHNOLOGY_EHRPD; 1260 } 1261 1262 /** @hide */ isLte(int radioTechnology)1263 public static boolean isLte(int radioTechnology) { 1264 return radioTechnology == RIL_RADIO_TECHNOLOGY_LTE || 1265 radioTechnology == RIL_RADIO_TECHNOLOGY_LTE_CA; 1266 } 1267 1268 /** @hide */ bearerBitmapHasCdma(int radioTechnologyBitmap)1269 public static boolean bearerBitmapHasCdma(int radioTechnologyBitmap) { 1270 return (RIL_RADIO_CDMA_TECHNOLOGY_BITMASK & radioTechnologyBitmap) != 0; 1271 } 1272 1273 /** @hide */ bitmaskHasTech(int bearerBitmask, int radioTech)1274 public static boolean bitmaskHasTech(int bearerBitmask, int radioTech) { 1275 if (bearerBitmask == 0) { 1276 return true; 1277 } else if (radioTech >= 1) { 1278 return ((bearerBitmask & (1 << (radioTech - 1))) != 0); 1279 } 1280 return false; 1281 } 1282 1283 /** @hide */ getBitmaskForTech(int radioTech)1284 public static int getBitmaskForTech(int radioTech) { 1285 if (radioTech >= 1) { 1286 return (1 << (radioTech - 1)); 1287 } 1288 return 0; 1289 } 1290 1291 /** @hide */ getBitmaskFromString(String bearerList)1292 public static int getBitmaskFromString(String bearerList) { 1293 String[] bearers = bearerList.split("\\|"); 1294 int bearerBitmask = 0; 1295 for (String bearer : bearers) { 1296 int bearerInt = 0; 1297 try { 1298 bearerInt = Integer.parseInt(bearer.trim()); 1299 } catch (NumberFormatException nfe) { 1300 return 0; 1301 } 1302 1303 if (bearerInt == 0) { 1304 return 0; 1305 } 1306 1307 bearerBitmask |= getBitmaskForTech(bearerInt); 1308 } 1309 return bearerBitmask; 1310 } 1311 1312 /** 1313 * Returns a merged ServiceState consisting of the base SS with voice settings from the 1314 * voice SS. The voice SS is only used if it is IN_SERVICE (otherwise the base SS is returned). 1315 * @hide 1316 * */ mergeServiceStates(ServiceState baseSs, ServiceState voiceSs)1317 public static ServiceState mergeServiceStates(ServiceState baseSs, ServiceState voiceSs) { 1318 if (voiceSs.mVoiceRegState != STATE_IN_SERVICE) { 1319 return baseSs; 1320 } 1321 1322 ServiceState newSs = new ServiceState(baseSs); 1323 1324 // voice overrides 1325 newSs.mVoiceRegState = voiceSs.mVoiceRegState; 1326 newSs.mIsEmergencyOnly = false; // only get here if voice is IN_SERVICE 1327 1328 return newSs; 1329 } 1330 } 1331