1d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu/* 2d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Copyright 2017 The Android Open Source Project 3d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * 4d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Licensed under the Apache License, Version 2.0 (the "License"); 5d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * you may not use this file except in compliance with the License. 6d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * You may obtain a copy of the License at 7d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * 8d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * http://www.apache.org/licenses/LICENSE-2.0 9d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * 10d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Unless required by applicable law or agreed to in writing, software 11d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * distributed under the License is distributed on an "AS IS" BASIS, 12d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * See the License for the specific language governing permissions and 14d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * limitations under the License. 15d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 16d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 17d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yupackage android.telephony; 18d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 19d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.annotation.IntDef; 20d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.annotation.Nullable; 21d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.os.Parcel; 22d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.os.Parcelable; 23d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 24d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.lang.annotation.Retention; 25d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.lang.annotation.RetentionPolicy; 26d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.util.Arrays; 27d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.util.Objects; 28d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 29d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu/** 30d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Description of a mobile network registration state 31d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @hide 32d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 33d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yupublic class NetworkRegistrationState implements Parcelable { 34d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 35d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Network domain 36d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @hide 37d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 38d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Retention(RetentionPolicy.SOURCE) 39d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @IntDef(prefix = "DOMAIN_", value = {DOMAIN_CS, DOMAIN_PS}) 40d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public @interface Domain {} 41d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 42d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Circuit switching domain */ 43d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int DOMAIN_CS = 1; 44d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Packet switching domain */ 45d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int DOMAIN_PS = 2; 46d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 47d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 48d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Registration state 49d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @hide 50d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 51d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Retention(RetentionPolicy.SOURCE) 52d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @IntDef(prefix = "REG_STATE_", 53d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu value = {REG_STATE_NOT_REG_NOT_SEARCHING, REG_STATE_HOME, REG_STATE_NOT_REG_SEARCHING, 54d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu REG_STATE_DENIED, REG_STATE_UNKNOWN, REG_STATE_ROAMING}) 55d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public @interface RegState {} 56d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 57d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Not registered. The device is not currently searching a new operator to register */ 58d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int REG_STATE_NOT_REG_NOT_SEARCHING = 0; 59d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Registered on home network */ 60d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int REG_STATE_HOME = 1; 61d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Not registered. The device is currently searching a new operator to register */ 62d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int REG_STATE_NOT_REG_SEARCHING = 2; 63d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Registration denied */ 64d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int REG_STATE_DENIED = 3; 65d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Registration state is unknown */ 66d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int REG_STATE_UNKNOWN = 4; 67d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** Registered on roaming network */ 68d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int REG_STATE_ROAMING = 5; 69d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 70d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 71d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Supported service type 72d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @hide 73d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 74d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Retention(RetentionPolicy.SOURCE) 75d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @IntDef(prefix = "SERVICE_TYPE_", 76d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu value = {SERVICE_TYPE_VOICE, SERVICE_TYPE_DATA, SERVICE_TYPE_SMS, SERVICE_TYPE_VIDEO, 77d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu SERVICE_TYPE_EMERGENCY}) 78d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public @interface ServiceType {} 79d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 80d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int SERVICE_TYPE_VOICE = 1; 81d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int SERVICE_TYPE_DATA = 2; 82d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int SERVICE_TYPE_SMS = 3; 83d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int SERVICE_TYPE_VIDEO = 4; 84d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final int SERVICE_TYPE_EMERGENCY = 5; 85d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 86d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** {@link AccessNetworkConstants.TransportType}*/ 87d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final int mTransportType; 88d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 89d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Domain 90d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final int mDomain; 91d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 92d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @RegState 93d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final int mRegState; 94d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 95d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final int mAccessNetworkTechnology; 96d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 97d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final int mReasonForDenial; 98d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 99d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final boolean mEmergencyOnly; 100d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 101d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final int[] mAvailableServices; 102d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 103d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Nullable 104d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private final CellIdentity mCellIdentity; 105d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 1064c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen @Nullable 1074c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen private VoiceSpecificRegistrationStates mVoiceSpecificStates; 1084c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 1094c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen @Nullable 1104c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen private DataSpecificRegistrationStates mDataSpecificStates; 111d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 112d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 113d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @param transportType Transport type. Must be {@link AccessNetworkConstants.TransportType} 114d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @param domain Network domain. Must be DOMAIN_CS or DOMAIN_PS. 115d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @param regState Network registration state. 116d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @param accessNetworkTechnology See TelephonyManager NETWORK_TYPE_XXXX. 117d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @param reasonForDenial Reason for denial if the registration state is DENIED. 118d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @param availableServices The supported service. 119d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @param cellIdentity The identity representing a unique cell 120d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 121d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public NetworkRegistrationState(int transportType, int domain, int regState, 122d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly, 123d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu int[] availableServices, @Nullable CellIdentity cellIdentity) { 124d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mTransportType = transportType; 125d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mDomain = domain; 126d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mRegState = regState; 127d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mAccessNetworkTechnology = accessNetworkTechnology; 128d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mReasonForDenial = reasonForDenial; 129d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mAvailableServices = availableServices; 130d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mCellIdentity = cellIdentity; 131d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mEmergencyOnly = emergencyOnly; 132d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 133d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 1344c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen /** 1354c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * Constructor for voice network registration states. 1364c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * @hide 1374c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen */ 1384c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen public NetworkRegistrationState(int transportType, int domain, int regState, 1394c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly, 1404c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen int[] availableServices, @Nullable CellIdentity cellIdentity, boolean cssSupported, 1414c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen int roamingIndicator, int systemIsInPrl, int defaultRoamingIndicator) { 1424c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen this(transportType, domain, regState, accessNetworkTechnology, 1434c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen reasonForDenial, emergencyOnly, availableServices, cellIdentity); 1444c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 1454c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen mVoiceSpecificStates = new VoiceSpecificRegistrationStates(cssSupported, roamingIndicator, 1464c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen systemIsInPrl, defaultRoamingIndicator); 1474c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen } 1484c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 1494c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen /** 1504c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * Constructor for data network registration states. 1514c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * @hide 1524c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen */ 1534c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen public NetworkRegistrationState(int transportType, int domain, int regState, 1544c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly, 1554c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen int[] availableServices, @Nullable CellIdentity cellIdentity, int maxDataCalls) { 1564c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen this(transportType, domain, regState, accessNetworkTechnology, 1574c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen reasonForDenial, emergencyOnly, availableServices, cellIdentity); 1584c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 1594c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen mDataSpecificStates = new DataSpecificRegistrationStates(maxDataCalls); 1604c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen } 1614c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 162d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu protected NetworkRegistrationState(Parcel source) { 163d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mTransportType = source.readInt(); 164d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mDomain = source.readInt(); 165d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mRegState = source.readInt(); 166d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mAccessNetworkTechnology = source.readInt(); 167d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mReasonForDenial = source.readInt(); 168d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mEmergencyOnly = source.readBoolean(); 169d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mAvailableServices = source.createIntArray(); 170d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu mCellIdentity = source.readParcelable(CellIdentity.class.getClassLoader()); 1714c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen mVoiceSpecificStates = source.readParcelable( 1724c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen VoiceSpecificRegistrationStates.class.getClassLoader()); 1734c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen mDataSpecificStates = source.readParcelable( 1744c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen DataSpecificRegistrationStates.class.getClassLoader()); 175d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 176d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 177d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 178d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @return The transport type. 179d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 180d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public int getTransportType() { return mTransportType; } 181d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 182d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 183d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @return The network domain. 184d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 185d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public @Domain int getDomain() { return mDomain; } 186d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 187d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 188d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @return The registration state. 189d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 190d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public @RegState int getRegState() { 191d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return mRegState; 192d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 193d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 194d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 195d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @return Whether emergency is enabled. 196d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 197d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public boolean isEmergencyEnabled() { return mEmergencyOnly; } 198d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 199d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 200d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @return List of available service types. 201d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 202d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public int[] getAvailableServices() { return mAvailableServices; } 203d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 204d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu /** 205d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @return The access network technology. Must be one of TelephonyManager.NETWORK_TYPE_XXXX. 206d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */ 207d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public int getAccessNetworkTechnology() { 208d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return mAccessNetworkTechnology; 209d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 210d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 2114c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen /** 2124c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * @return Reason for denial from network. 2134c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen */ 2144c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen public int getReasonForDenial() { 2154c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen return mReasonForDenial; 2164c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen } 2174c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 2184c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen /** 2194c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * @return The cell information. 2204c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen */ 2214c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen public CellIdentity getCellIdentity() { 2224c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen return mCellIdentity; 2234c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen } 2244c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 2254c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen /** 2264c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * @hide 2274c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen */ 2284c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen @Nullable 2294c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen public VoiceSpecificRegistrationStates getVoiceSpecificStates() { 2304c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen return mVoiceSpecificStates; 2314c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen } 2324c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 2334c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen /** 2344c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen * @hide 2354c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen */ 2364c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen @Nullable 2374c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen public DataSpecificRegistrationStates getDataSpecificStates() { 2384c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen return mDataSpecificStates; 2394c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen } 2404c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen 241d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Override 242d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public int describeContents() { 243d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return 0; 244d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 245d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 246d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu private static String regStateToString(int regState) { 247d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu switch (regState) { 248d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu case REG_STATE_NOT_REG_NOT_SEARCHING: return "NOT_REG_NOT_SEARCHING"; 249d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu case REG_STATE_HOME: return "HOME"; 250d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu case REG_STATE_NOT_REG_SEARCHING: return "NOT_REG_SEARCHING"; 251d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu case REG_STATE_DENIED: return "DENIED"; 252d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu case REG_STATE_UNKNOWN: return "UNKNOWN"; 253d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu case REG_STATE_ROAMING: return "ROAMING"; 254d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 255d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return "Unknown reg state " + regState; 256d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 257d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 258d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Override 259d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public String toString() { 260d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return new StringBuilder("NetworkRegistrationState{") 261d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append("transportType=").append(mTransportType) 262d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(" domain=").append((mDomain == DOMAIN_CS) ? "CS" : "PS") 263d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(" regState=").append(regStateToString(mRegState)) 264d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(" accessNetworkTechnology=") 265d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(TelephonyManager.getNetworkTypeName(mAccessNetworkTechnology)) 266d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(" reasonForDenial=").append(mReasonForDenial) 267d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(" emergencyEnabled=").append(mEmergencyOnly) 268d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(" supportedServices=").append(mAvailableServices) 269d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append(" cellIdentity=").append(mCellIdentity) 2704c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen .append(" voiceSpecificStates=").append(mVoiceSpecificStates) 2714c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen .append(" dataSpecificStates=").append(mDataSpecificStates) 272d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu .append("}").toString(); 273d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 274d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 275d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Override 276d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public int hashCode() { 277d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return Objects.hash(mTransportType, mDomain, mRegState, mAccessNetworkTechnology, 2784c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen mReasonForDenial, mEmergencyOnly, mAvailableServices, mCellIdentity, 2794c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen mVoiceSpecificStates, mDataSpecificStates); 280d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 281d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 282d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Override 283d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public boolean equals(Object o) { 284d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu if (this == o) return true; 285d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 286d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu if (o == null || !(o instanceof NetworkRegistrationState)) { 287d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return false; 288d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 289d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 290d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu NetworkRegistrationState other = (NetworkRegistrationState) o; 291d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return mTransportType == other.mTransportType 292d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu && mDomain == other.mDomain 293d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu && mRegState == other.mRegState 294d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu && mAccessNetworkTechnology == other.mAccessNetworkTechnology 295d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu && mReasonForDenial == other.mReasonForDenial 296d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu && mEmergencyOnly == other.mEmergencyOnly 297d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu && (mAvailableServices == other.mAvailableServices 298d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu || Arrays.equals(mAvailableServices, other.mAvailableServices)) 2995ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen && equals(mCellIdentity, other.mCellIdentity) 3005ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen && equals(mVoiceSpecificStates, other.mVoiceSpecificStates) 3015ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen && equals(mDataSpecificStates, other.mDataSpecificStates); 302d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 303d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 304d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Override 305d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public void writeToParcel(Parcel dest, int flags) { 306d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeInt(mTransportType); 307d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeInt(mDomain); 308d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeInt(mRegState); 309d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeInt(mAccessNetworkTechnology); 310d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeInt(mReasonForDenial); 311d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeBoolean(mEmergencyOnly); 312d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeIntArray(mAvailableServices); 313d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu dest.writeParcelable(mCellIdentity, 0); 3144c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen dest.writeParcelable(mVoiceSpecificStates, 0); 3154c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen dest.writeParcelable(mDataSpecificStates, 0); 316d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 317d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 318d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public static final Parcelable.Creator<NetworkRegistrationState> CREATOR = 319d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu new Parcelable.Creator<NetworkRegistrationState>() { 320d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Override 321d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public NetworkRegistrationState createFromParcel(Parcel source) { 322d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return new NetworkRegistrationState(source); 323d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 324d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu 325d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu @Override 326d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu public NetworkRegistrationState[] newArray(int size) { 327d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu return new NetworkRegistrationState[size]; 328d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu } 329d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu }; 3305ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen 3315ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen private static boolean equals(Object o1, Object o2) { 3325ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen if (o1 == o2) { 3335ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen return true; 3345ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen } else if (o1 == null) { 3355ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen return false; 3365ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen } else { 3375ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen return o1.equals(o2); 3385ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen } 3395ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen } 340d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu} 341