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.util.Log; 23 24 /** 25 * Contains phone state and service related information. 26 * 27 * The following phone information is included in returned ServiceState: 28 * 29 * <ul> 30 * <li>Service state: IN_SERVICE, OUT_OF_SERVICE, EMERGENCY_ONLY, POWER_OFF 31 * <li>Roaming indicator 32 * <li>Operator name, short name and numeric id 33 * <li>Network selection mode 34 * </ul> 35 */ 36 public class ServiceState implements Parcelable { 37 38 static final String LOG_TAG = "PHONE"; 39 40 /** 41 * Normal operation condition, the phone is registered 42 * with an operator either in home network or in roaming. 43 */ 44 public static final int STATE_IN_SERVICE = 0; 45 46 /** 47 * Phone is not registered with any operator, the phone 48 * can be currently searching a new operator to register to, or not 49 * searching to registration at all, or registration is denied, or radio 50 * signal is not available. 51 */ 52 public static final int STATE_OUT_OF_SERVICE = 1; 53 54 /** 55 * The phone is registered and locked. Only emergency numbers are allowed. {@more} 56 */ 57 public static final int STATE_EMERGENCY_ONLY = 2; 58 59 /** 60 * Radio of telephony is explicitly powered off. 61 */ 62 public static final int STATE_POWER_OFF = 3; 63 64 65 /** 66 * Available radio technologies for GSM, UMTS and CDMA. 67 * Duplicates the constants from hardware/radio/include/ril.h 68 * This should only be used by agents working with the ril. Others 69 * should use the equivalent TelephonyManager.NETWORK_TYPE_* 70 */ 71 /** @hide */ 72 public static final int RIL_RADIO_TECHNOLOGY_UNKNOWN = 0; 73 /** @hide */ 74 public static final int RIL_RADIO_TECHNOLOGY_GPRS = 1; 75 /** @hide */ 76 public static final int RIL_RADIO_TECHNOLOGY_EDGE = 2; 77 /** @hide */ 78 public static final int RIL_RADIO_TECHNOLOGY_UMTS = 3; 79 /** @hide */ 80 public static final int RIL_RADIO_TECHNOLOGY_IS95A = 4; 81 /** @hide */ 82 public static final int RIL_RADIO_TECHNOLOGY_IS95B = 5; 83 /** @hide */ 84 public static final int RIL_RADIO_TECHNOLOGY_1xRTT = 6; 85 /** @hide */ 86 public static final int RIL_RADIO_TECHNOLOGY_EVDO_0 = 7; 87 /** @hide */ 88 public static final int RIL_RADIO_TECHNOLOGY_EVDO_A = 8; 89 /** @hide */ 90 public static final int RIL_RADIO_TECHNOLOGY_HSDPA = 9; 91 /** @hide */ 92 public static final int RIL_RADIO_TECHNOLOGY_HSUPA = 10; 93 /** @hide */ 94 public static final int RIL_RADIO_TECHNOLOGY_HSPA = 11; 95 /** @hide */ 96 public static final int RIL_RADIO_TECHNOLOGY_EVDO_B = 12; 97 /** @hide */ 98 public static final int RIL_RADIO_TECHNOLOGY_EHRPD = 13; 99 /** @hide */ 100 public static final int RIL_RADIO_TECHNOLOGY_LTE = 14; 101 /** @hide */ 102 public static final int RIL_RADIO_TECHNOLOGY_HSPAP = 15; 103 /** 104 * GSM radio technology only supports voice. It does not support data. 105 * @hide 106 */ 107 public static final int RIL_RADIO_TECHNOLOGY_GSM = 16; 108 109 /** 110 * Available registration states for GSM, UMTS and CDMA. 111 */ 112 /** @hide */ 113 public static final int REGISTRATION_STATE_NOT_REGISTERED_AND_NOT_SEARCHING = 0; 114 /** @hide */ 115 public static final int REGISTRATION_STATE_HOME_NETWORK = 1; 116 /** @hide */ 117 public static final int REGISTRATION_STATE_NOT_REGISTERED_AND_SEARCHING = 2; 118 /** @hide */ 119 public static final int REGISTRATION_STATE_REGISTRATION_DENIED = 3; 120 /** @hide */ 121 public static final int REGISTRATION_STATE_UNKNOWN = 4; 122 /** @hide */ 123 public static final int REGISTRATION_STATE_ROAMING = 5; 124 125 private int mState = STATE_OUT_OF_SERVICE; 126 private boolean mRoaming; 127 private String mOperatorAlphaLong; 128 private String mOperatorAlphaShort; 129 private String mOperatorNumeric; 130 private boolean mIsManualNetworkSelection; 131 132 private boolean mIsEmergencyOnly; 133 134 //***** CDMA 135 private int mRadioTechnology; 136 private boolean mCssIndicator; 137 private int mNetworkId; 138 private int mSystemId; 139 private int mCdmaRoamingIndicator; 140 private int mCdmaDefaultRoamingIndicator; 141 private int mCdmaEriIconIndex; 142 private int mCdmaEriIconMode; 143 144 /** 145 * Create a new ServiceState from a intent notifier Bundle 146 * 147 * This method is used by PhoneStateIntentReceiver and maybe by 148 * external applications. 149 * 150 * @param m Bundle from intent notifier 151 * @return newly created ServiceState 152 * @hide 153 */ newFromBundle(Bundle m)154 public static ServiceState newFromBundle(Bundle m) { 155 ServiceState ret; 156 ret = new ServiceState(); 157 ret.setFromNotifierBundle(m); 158 return ret; 159 } 160 161 /** 162 * Empty constructor 163 */ ServiceState()164 public ServiceState() { 165 } 166 167 /** 168 * Copy constructors 169 * 170 * @param s Source service state 171 */ ServiceState(ServiceState s)172 public ServiceState(ServiceState s) { 173 copyFrom(s); 174 } 175 copyFrom(ServiceState s)176 protected void copyFrom(ServiceState s) { 177 mState = s.mState; 178 mRoaming = s.mRoaming; 179 mOperatorAlphaLong = s.mOperatorAlphaLong; 180 mOperatorAlphaShort = s.mOperatorAlphaShort; 181 mOperatorNumeric = s.mOperatorNumeric; 182 mIsManualNetworkSelection = s.mIsManualNetworkSelection; 183 mRadioTechnology = s.mRadioTechnology; 184 mCssIndicator = s.mCssIndicator; 185 mNetworkId = s.mNetworkId; 186 mSystemId = s.mSystemId; 187 mCdmaRoamingIndicator = s.mCdmaRoamingIndicator; 188 mCdmaDefaultRoamingIndicator = s.mCdmaDefaultRoamingIndicator; 189 mCdmaEriIconIndex = s.mCdmaEriIconIndex; 190 mCdmaEriIconMode = s.mCdmaEriIconMode; 191 mIsEmergencyOnly = s.mIsEmergencyOnly; 192 } 193 194 /** 195 * Construct a ServiceState object from the given parcel. 196 */ ServiceState(Parcel in)197 public ServiceState(Parcel in) { 198 mState = in.readInt(); 199 mRoaming = in.readInt() != 0; 200 mOperatorAlphaLong = in.readString(); 201 mOperatorAlphaShort = in.readString(); 202 mOperatorNumeric = in.readString(); 203 mIsManualNetworkSelection = in.readInt() != 0; 204 mRadioTechnology = in.readInt(); 205 mCssIndicator = (in.readInt() != 0); 206 mNetworkId = in.readInt(); 207 mSystemId = in.readInt(); 208 mCdmaRoamingIndicator = in.readInt(); 209 mCdmaDefaultRoamingIndicator = in.readInt(); 210 mCdmaEriIconIndex = in.readInt(); 211 mCdmaEriIconMode = in.readInt(); 212 mIsEmergencyOnly = in.readInt() != 0; 213 } 214 writeToParcel(Parcel out, int flags)215 public void writeToParcel(Parcel out, int flags) { 216 out.writeInt(mState); 217 out.writeInt(mRoaming ? 1 : 0); 218 out.writeString(mOperatorAlphaLong); 219 out.writeString(mOperatorAlphaShort); 220 out.writeString(mOperatorNumeric); 221 out.writeInt(mIsManualNetworkSelection ? 1 : 0); 222 out.writeInt(mRadioTechnology); 223 out.writeInt(mCssIndicator ? 1 : 0); 224 out.writeInt(mNetworkId); 225 out.writeInt(mSystemId); 226 out.writeInt(mCdmaRoamingIndicator); 227 out.writeInt(mCdmaDefaultRoamingIndicator); 228 out.writeInt(mCdmaEriIconIndex); 229 out.writeInt(mCdmaEriIconMode); 230 out.writeInt(mIsEmergencyOnly ? 1 : 0); 231 } 232 describeContents()233 public int describeContents() { 234 return 0; 235 } 236 237 public static final Parcelable.Creator<ServiceState> CREATOR = 238 new Parcelable.Creator<ServiceState>() { 239 public ServiceState createFromParcel(Parcel in) { 240 return new ServiceState(in); 241 } 242 243 public ServiceState[] newArray(int size) { 244 return new ServiceState[size]; 245 } 246 }; 247 248 /** 249 * Get current service state of phone 250 * 251 * @see #STATE_IN_SERVICE 252 * @see #STATE_OUT_OF_SERVICE 253 * @see #STATE_EMERGENCY_ONLY 254 * @see #STATE_POWER_OFF 255 */ getState()256 public int getState() { 257 return mState; 258 } 259 260 /** 261 * Get current roaming indicator of phone 262 * (note: not just decoding from TS 27.007 7.2) 263 * 264 * @return true if TS 27.007 7.2 roaming is true 265 * and ONS is different from SPN 266 * 267 */ getRoaming()268 public boolean getRoaming() { 269 return mRoaming; 270 } 271 272 /** 273 * @hide 274 */ isEmergencyOnly()275 public boolean isEmergencyOnly() { 276 return mIsEmergencyOnly; 277 } 278 279 /** 280 * @hide 281 */ getCdmaRoamingIndicator()282 public int getCdmaRoamingIndicator(){ 283 return this.mCdmaRoamingIndicator; 284 } 285 286 /** 287 * @hide 288 */ getCdmaDefaultRoamingIndicator()289 public int getCdmaDefaultRoamingIndicator(){ 290 return this.mCdmaDefaultRoamingIndicator; 291 } 292 293 /** 294 * @hide 295 */ getCdmaEriIconIndex()296 public int getCdmaEriIconIndex() { 297 return this.mCdmaEriIconIndex; 298 } 299 300 /** 301 * @hide 302 */ getCdmaEriIconMode()303 public int getCdmaEriIconMode() { 304 return this.mCdmaEriIconMode; 305 } 306 307 /** 308 * Get current registered operator name in long alphanumeric format. 309 * 310 * In GSM/UMTS, long format can be up to 16 characters long. 311 * In CDMA, returns the ERI text, if set. Otherwise, returns the ONS. 312 * 313 * @return long name of operator, null if unregistered or unknown 314 */ getOperatorAlphaLong()315 public String getOperatorAlphaLong() { 316 return mOperatorAlphaLong; 317 } 318 319 /** 320 * Get current registered operator name in short alphanumeric format. 321 * 322 * In GSM/UMTS, short format can be up to 8 characters long. 323 * 324 * @return short name of operator, null if unregistered or unknown 325 */ getOperatorAlphaShort()326 public String getOperatorAlphaShort() { 327 return mOperatorAlphaShort; 328 } 329 330 /** 331 * Get current registered operator numeric id. 332 * 333 * In GSM/UMTS, numeric format is 3 digit country code plus 2 or 3 digit 334 * network code. 335 * 336 * @return numeric format of operator, null if unregistered or unknown 337 */ 338 /* 339 * The country code can be decoded using 340 * {@link com.android.internal.telephony.MccTable#countryCodeForMcc(int)}. 341 */ getOperatorNumeric()342 public String getOperatorNumeric() { 343 return mOperatorNumeric; 344 } 345 346 /** 347 * Get current network selection mode. 348 * 349 * @return true if manual mode, false if automatic mode 350 */ getIsManualSelection()351 public boolean getIsManualSelection() { 352 return mIsManualNetworkSelection; 353 } 354 355 @Override hashCode()356 public int hashCode() { 357 return ((mState * 0x1234) 358 + (mRoaming ? 1 : 0) 359 + (mIsManualNetworkSelection ? 1 : 0) 360 + ((null == mOperatorAlphaLong) ? 0 : mOperatorAlphaLong.hashCode()) 361 + ((null == mOperatorAlphaShort) ? 0 : mOperatorAlphaShort.hashCode()) 362 + ((null == mOperatorNumeric) ? 0 : mOperatorNumeric.hashCode()) 363 + mCdmaRoamingIndicator 364 + mCdmaDefaultRoamingIndicator 365 + (mIsEmergencyOnly ? 1 : 0)); 366 } 367 368 @Override equals(Object o)369 public boolean equals (Object o) { 370 ServiceState s; 371 372 try { 373 s = (ServiceState) o; 374 } catch (ClassCastException ex) { 375 return false; 376 } 377 378 if (o == null) { 379 return false; 380 } 381 382 return (mState == s.mState 383 && mRoaming == s.mRoaming 384 && mIsManualNetworkSelection == s.mIsManualNetworkSelection 385 && equalsHandlesNulls(mOperatorAlphaLong, s.mOperatorAlphaLong) 386 && equalsHandlesNulls(mOperatorAlphaShort, s.mOperatorAlphaShort) 387 && equalsHandlesNulls(mOperatorNumeric, s.mOperatorNumeric) 388 && equalsHandlesNulls(mRadioTechnology, s.mRadioTechnology) 389 && equalsHandlesNulls(mCssIndicator, s.mCssIndicator) 390 && equalsHandlesNulls(mNetworkId, s.mNetworkId) 391 && equalsHandlesNulls(mSystemId, s.mSystemId) 392 && equalsHandlesNulls(mCdmaRoamingIndicator, s.mCdmaRoamingIndicator) 393 && equalsHandlesNulls(mCdmaDefaultRoamingIndicator, 394 s.mCdmaDefaultRoamingIndicator) 395 && mIsEmergencyOnly == s.mIsEmergencyOnly); 396 } 397 398 /** 399 * Convert radio technology to String 400 * 401 * @param radioTechnology 402 * @return String representation of the RAT 403 * 404 * @hide 405 */ rilRadioTechnologyToString(int rt)406 public static String rilRadioTechnologyToString(int rt) { 407 String rtString; 408 409 switch(rt) { 410 case RIL_RADIO_TECHNOLOGY_UNKNOWN: 411 rtString = "Unknown"; 412 break; 413 case RIL_RADIO_TECHNOLOGY_GPRS: 414 rtString = "GPRS"; 415 break; 416 case RIL_RADIO_TECHNOLOGY_EDGE: 417 rtString = "EDGE"; 418 break; 419 case RIL_RADIO_TECHNOLOGY_UMTS: 420 rtString = "UMTS"; 421 break; 422 case RIL_RADIO_TECHNOLOGY_IS95A: 423 rtString = "CDMA-IS95A"; 424 break; 425 case RIL_RADIO_TECHNOLOGY_IS95B: 426 rtString = "CDMA-IS95B"; 427 break; 428 case RIL_RADIO_TECHNOLOGY_1xRTT: 429 rtString = "1xRTT"; 430 break; 431 case RIL_RADIO_TECHNOLOGY_EVDO_0: 432 rtString = "EvDo-rev.0"; 433 break; 434 case RIL_RADIO_TECHNOLOGY_EVDO_A: 435 rtString = "EvDo-rev.A"; 436 break; 437 case RIL_RADIO_TECHNOLOGY_HSDPA: 438 rtString = "HSDPA"; 439 break; 440 case RIL_RADIO_TECHNOLOGY_HSUPA: 441 rtString = "HSUPA"; 442 break; 443 case RIL_RADIO_TECHNOLOGY_HSPA: 444 rtString = "HSPA"; 445 break; 446 case RIL_RADIO_TECHNOLOGY_EVDO_B: 447 rtString = "EvDo-rev.B"; 448 break; 449 case RIL_RADIO_TECHNOLOGY_EHRPD: 450 rtString = "eHRPD"; 451 break; 452 case RIL_RADIO_TECHNOLOGY_LTE: 453 rtString = "LTE"; 454 break; 455 case RIL_RADIO_TECHNOLOGY_HSPAP: 456 rtString = "HSPAP"; 457 break; 458 case RIL_RADIO_TECHNOLOGY_GSM: 459 rtString = "GSM"; 460 break; 461 default: 462 rtString = "Unexpected"; 463 Log.w(LOG_TAG, "Unexpected radioTechnology=" + rt); 464 break; 465 } 466 return rtString; 467 } 468 469 @Override toString()470 public String toString() { 471 String radioTechnology = rilRadioTechnologyToString(mRadioTechnology); 472 473 return (mState + " " + (mRoaming ? "roaming" : "home") 474 + " " + mOperatorAlphaLong 475 + " " + mOperatorAlphaShort 476 + " " + mOperatorNumeric 477 + " " + (mIsManualNetworkSelection ? "(manual)" : "") 478 + " " + radioTechnology 479 + " " + (mCssIndicator ? "CSS supported" : "CSS not supported") 480 + " " + mNetworkId 481 + " " + mSystemId 482 + " RoamInd=" + mCdmaRoamingIndicator 483 + " DefRoamInd=" + mCdmaDefaultRoamingIndicator 484 + " EmergOnly=" + mIsEmergencyOnly); 485 } 486 setNullState(int state)487 private void setNullState(int state) { 488 mState = state; 489 mRoaming = false; 490 mOperatorAlphaLong = null; 491 mOperatorAlphaShort = null; 492 mOperatorNumeric = null; 493 mIsManualNetworkSelection = false; 494 mRadioTechnology = 0; 495 mCssIndicator = false; 496 mNetworkId = -1; 497 mSystemId = -1; 498 mCdmaRoamingIndicator = -1; 499 mCdmaDefaultRoamingIndicator = -1; 500 mCdmaEriIconIndex = -1; 501 mCdmaEriIconMode = -1; 502 mIsEmergencyOnly = false; 503 } 504 setStateOutOfService()505 public void setStateOutOfService() { 506 setNullState(STATE_OUT_OF_SERVICE); 507 } 508 setStateOff()509 public void setStateOff() { 510 setNullState(STATE_POWER_OFF); 511 } 512 setState(int state)513 public void setState(int state) { 514 mState = state; 515 } 516 setRoaming(boolean roaming)517 public void setRoaming(boolean roaming) { 518 mRoaming = roaming; 519 } 520 521 522 /** 523 * @hide 524 */ setEmergencyOnly(boolean emergencyOnly)525 public void setEmergencyOnly(boolean emergencyOnly) { 526 mIsEmergencyOnly = emergencyOnly; 527 } 528 529 /** 530 * @hide 531 */ setCdmaRoamingIndicator(int roaming)532 public void setCdmaRoamingIndicator(int roaming) { 533 this.mCdmaRoamingIndicator = roaming; 534 } 535 536 /** 537 * @hide 538 */ setCdmaDefaultRoamingIndicator(int roaming)539 public void setCdmaDefaultRoamingIndicator (int roaming) { 540 this.mCdmaDefaultRoamingIndicator = roaming; 541 } 542 543 /** 544 * @hide 545 */ setCdmaEriIconIndex(int index)546 public void setCdmaEriIconIndex(int index) { 547 this.mCdmaEriIconIndex = index; 548 } 549 550 /** 551 * @hide 552 */ setCdmaEriIconMode(int mode)553 public void setCdmaEriIconMode(int mode) { 554 this.mCdmaEriIconMode = mode; 555 } 556 setOperatorName(String longName, String shortName, String numeric)557 public void setOperatorName(String longName, String shortName, String numeric) { 558 mOperatorAlphaLong = longName; 559 mOperatorAlphaShort = shortName; 560 mOperatorNumeric = numeric; 561 } 562 563 /** 564 * In CDMA, mOperatorAlphaLong can be set from the ERI text. 565 * This is done from the CDMAPhone and not from the CdmaServiceStateTracker. 566 * 567 * @hide 568 */ setOperatorAlphaLong(String longName)569 public void setOperatorAlphaLong(String longName) { 570 mOperatorAlphaLong = longName; 571 } 572 setIsManualSelection(boolean isManual)573 public void setIsManualSelection(boolean isManual) { 574 mIsManualNetworkSelection = isManual; 575 } 576 577 /** 578 * Test whether two objects hold the same data values or both are null. 579 * 580 * @param a first obj 581 * @param b second obj 582 * @return true if two objects equal or both are null 583 */ equalsHandlesNulls(Object a, Object b)584 private static boolean equalsHandlesNulls (Object a, Object b) { 585 return (a == null) ? (b == null) : a.equals (b); 586 } 587 588 /** 589 * Set ServiceState based on intent notifier map. 590 * 591 * @param m intent notifier map 592 * @hide 593 */ setFromNotifierBundle(Bundle m)594 private void setFromNotifierBundle(Bundle m) { 595 mState = m.getInt("state"); 596 mRoaming = m.getBoolean("roaming"); 597 mOperatorAlphaLong = m.getString("operator-alpha-long"); 598 mOperatorAlphaShort = m.getString("operator-alpha-short"); 599 mOperatorNumeric = m.getString("operator-numeric"); 600 mIsManualNetworkSelection = m.getBoolean("manual"); 601 mRadioTechnology = m.getInt("radioTechnology"); 602 mCssIndicator = m.getBoolean("cssIndicator"); 603 mNetworkId = m.getInt("networkId"); 604 mSystemId = m.getInt("systemId"); 605 mCdmaRoamingIndicator = m.getInt("cdmaRoamingIndicator"); 606 mCdmaDefaultRoamingIndicator = m.getInt("cdmaDefaultRoamingIndicator"); 607 mIsEmergencyOnly = m.getBoolean("emergencyOnly"); 608 } 609 610 /** 611 * Set intent notifier Bundle based on service state. 612 * 613 * @param m intent notifier Bundle 614 * @hide 615 */ fillInNotifierBundle(Bundle m)616 public void fillInNotifierBundle(Bundle m) { 617 m.putInt("state", mState); 618 m.putBoolean("roaming", Boolean.valueOf(mRoaming)); 619 m.putString("operator-alpha-long", mOperatorAlphaLong); 620 m.putString("operator-alpha-short", mOperatorAlphaShort); 621 m.putString("operator-numeric", mOperatorNumeric); 622 m.putBoolean("manual", Boolean.valueOf(mIsManualNetworkSelection)); 623 m.putInt("radioTechnology", mRadioTechnology); 624 m.putBoolean("cssIndicator", mCssIndicator); 625 m.putInt("networkId", mNetworkId); 626 m.putInt("systemId", mSystemId); 627 m.putInt("cdmaRoamingIndicator", mCdmaRoamingIndicator); 628 m.putInt("cdmaDefaultRoamingIndicator", mCdmaDefaultRoamingIndicator); 629 m.putBoolean("emergencyOnly", Boolean.valueOf(mIsEmergencyOnly)); 630 } 631 632 //***** CDMA 633 /** @hide */ setRadioTechnology(int state)634 public void setRadioTechnology(int state) { 635 this.mRadioTechnology = state; 636 } 637 638 /** @hide */ setCssIndicator(int css)639 public void setCssIndicator(int css) { 640 this.mCssIndicator = (css != 0); 641 } 642 643 /** @hide */ setSystemAndNetworkId(int systemId, int networkId)644 public void setSystemAndNetworkId(int systemId, int networkId) { 645 this.mSystemId = systemId; 646 this.mNetworkId = networkId; 647 } 648 649 /** @hide */ getRilRadioTechnology()650 public int getRilRadioTechnology() { 651 return this.mRadioTechnology; 652 } 653 /** @hide */ getRadioTechnology()654 public int getRadioTechnology() { 655 return getRilRadioTechnology(); 656 } 657 658 /** @hide */ getNetworkType()659 public int getNetworkType() { 660 switch(mRadioTechnology) { 661 case ServiceState.RIL_RADIO_TECHNOLOGY_GPRS: 662 return TelephonyManager.NETWORK_TYPE_GPRS; 663 case ServiceState.RIL_RADIO_TECHNOLOGY_EDGE: 664 return TelephonyManager.NETWORK_TYPE_EDGE; 665 case ServiceState.RIL_RADIO_TECHNOLOGY_UMTS: 666 return TelephonyManager.NETWORK_TYPE_UMTS; 667 case ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA: 668 return TelephonyManager.NETWORK_TYPE_HSDPA; 669 case ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA: 670 return TelephonyManager.NETWORK_TYPE_HSUPA; 671 case ServiceState.RIL_RADIO_TECHNOLOGY_HSPA: 672 return TelephonyManager.NETWORK_TYPE_HSPA; 673 case ServiceState.RIL_RADIO_TECHNOLOGY_IS95A: 674 case ServiceState.RIL_RADIO_TECHNOLOGY_IS95B: 675 return TelephonyManager.NETWORK_TYPE_CDMA; 676 case ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT: 677 return TelephonyManager.NETWORK_TYPE_1xRTT; 678 case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0: 679 return TelephonyManager.NETWORK_TYPE_EVDO_0; 680 case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A: 681 return TelephonyManager.NETWORK_TYPE_EVDO_A; 682 case ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B: 683 return TelephonyManager.NETWORK_TYPE_EVDO_B; 684 case ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD: 685 return TelephonyManager.NETWORK_TYPE_EHRPD; 686 case ServiceState.RIL_RADIO_TECHNOLOGY_LTE: 687 return TelephonyManager.NETWORK_TYPE_LTE; 688 case ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP: 689 return TelephonyManager.NETWORK_TYPE_HSPAP; 690 default: 691 return TelephonyManager.NETWORK_TYPE_UNKNOWN; 692 } 693 } 694 695 /** @hide */ getCssIndicator()696 public int getCssIndicator() { 697 return this.mCssIndicator ? 1 : 0; 698 } 699 700 /** @hide */ getNetworkId()701 public int getNetworkId() { 702 return this.mNetworkId; 703 } 704 705 /** @hide */ getSystemId()706 public int getSystemId() { 707 return this.mSystemId; 708 } 709 710 /** @hide */ isGsm(int radioTechnology)711 public static boolean isGsm(int radioTechnology) { 712 return radioTechnology == RIL_RADIO_TECHNOLOGY_GPRS 713 || radioTechnology == RIL_RADIO_TECHNOLOGY_EDGE 714 || radioTechnology == RIL_RADIO_TECHNOLOGY_UMTS 715 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSDPA 716 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSUPA 717 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSPA 718 || radioTechnology == RIL_RADIO_TECHNOLOGY_LTE 719 || radioTechnology == RIL_RADIO_TECHNOLOGY_HSPAP 720 || radioTechnology == RIL_RADIO_TECHNOLOGY_GSM; 721 } 722 723 /** @hide */ isCdma(int radioTechnology)724 public static boolean isCdma(int radioTechnology) { 725 return radioTechnology == RIL_RADIO_TECHNOLOGY_IS95A 726 || radioTechnology == RIL_RADIO_TECHNOLOGY_IS95B 727 || radioTechnology == RIL_RADIO_TECHNOLOGY_1xRTT 728 || radioTechnology == RIL_RADIO_TECHNOLOGY_EVDO_0 729 || radioTechnology == RIL_RADIO_TECHNOLOGY_EVDO_A 730 || radioTechnology == RIL_RADIO_TECHNOLOGY_EVDO_B 731 || radioTechnology == RIL_RADIO_TECHNOLOGY_EHRPD; 732 } 733 } 734