1 /* 2 * Copyright (C) 2014 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.Parcel; 20 import android.os.Parcelable; 21 import android.telephony.TelephonyManager; 22 import android.net.LinkProperties; 23 24 /** 25 * Contains precise data connection state. 26 * 27 * The following data connection information is included in returned PreciseDataConnectionState: 28 * 29 * <ul> 30 * <li>Data connection state. 31 * <li>Network type of the connection. 32 * <li>APN type. 33 * <li>APN. 34 * <li>Data connection change reason. 35 * <li>The properties of the network link. 36 * <li>Data connection fail cause. 37 * </ul> 38 * 39 * @hide 40 */ 41 public class PreciseDataConnectionState implements Parcelable { 42 43 private int mState = TelephonyManager.DATA_UNKNOWN; 44 private int mNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN; 45 private String mAPNType = ""; 46 private String mAPN = ""; 47 private String mReason = ""; 48 private LinkProperties mLinkProperties = null; 49 private String mFailCause = ""; 50 51 /** 52 * Constructor 53 * 54 * @hide 55 */ 56 public PreciseDataConnectionState(int state, int networkType, 57 String apnType, String apn, String reason, 58 LinkProperties linkProperties, String failCause) { 59 mState = state; 60 mNetworkType = networkType; 61 mAPNType = apnType; 62 mAPN = apn; 63 mReason = reason; 64 mLinkProperties = linkProperties; 65 mFailCause = failCause; 66 } 67 68 /** 69 * Empty Constructor 70 * 71 * @hide 72 */ 73 public PreciseDataConnectionState() { 74 } 75 76 /** 77 * Construct a PreciseDataConnectionState object from the given parcel. 78 */ 79 private PreciseDataConnectionState(Parcel in) { 80 mState = in.readInt(); 81 mNetworkType = in.readInt(); 82 mAPNType = in.readString(); 83 mAPN = in.readString(); 84 mReason = in.readString(); 85 mLinkProperties = (LinkProperties)in.readParcelable(null); 86 mFailCause = in.readString(); 87 } 88 89 /** 90 * Get data connection state 91 * 92 * @see TelephonyManager#DATA_UNKNOWN 93 * @see TelephonyManager#DATA_DISCONNECTED 94 * @see TelephonyManager#DATA_CONNECTING 95 * @see TelephonyManager#DATA_CONNECTED 96 * @see TelephonyManager#DATA_SUSPENDED 97 */ 98 public int getDataConnectionState() { 99 return mState; 100 } 101 102 /** 103 * Get data connection network type 104 * 105 * @see TelephonyManager#NETWORK_TYPE_UNKNOWN 106 * @see TelephonyManager#NETWORK_TYPE_GPRS 107 * @see TelephonyManager#NETWORK_TYPE_EDGE 108 * @see TelephonyManager#NETWORK_TYPE_UMTS 109 * @see TelephonyManager#NETWORK_TYPE_CDMA 110 * @see TelephonyManager#NETWORK_TYPE_EVDO_0 111 * @see TelephonyManager#NETWORK_TYPE_EVDO_A 112 * @see TelephonyManager#NETWORK_TYPE_1xRTT 113 * @see TelephonyManager#NETWORK_TYPE_HSDPA 114 * @see TelephonyManager#NETWORK_TYPE_HSUPA 115 * @see TelephonyManager#NETWORK_TYPE_HSPA 116 * @see TelephonyManager#NETWORK_TYPE_IDEN 117 * @see TelephonyManager#NETWORK_TYPE_EVDO_B 118 * @see TelephonyManager#NETWORK_TYPE_LTE 119 * @see TelephonyManager#NETWORK_TYPE_EHRPD 120 * @see TelephonyManager#NETWORK_TYPE_HSPAP 121 */ 122 public int getDataConnectionNetworkType() { 123 return mNetworkType; 124 } 125 126 /** 127 * Get data connection APN type 128 */ 129 public String getDataConnectionAPNType() { 130 return mAPNType; 131 } 132 133 /** 134 * Get data connection APN. 135 */ 136 public String getDataConnectionAPN() { 137 return mAPN; 138 } 139 140 /** 141 * Get data connection change reason. 142 */ 143 public String getDataConnectionChangeReason() { 144 return mReason; 145 } 146 147 /** 148 * Get the properties of the network link. 149 */ 150 public LinkProperties getDataConnectionLinkProperties() { 151 return mLinkProperties; 152 } 153 154 /** 155 * Get data connection fail cause, in case there was a failure. 156 */ 157 public String getDataConnectionFailCause() { 158 return mFailCause; 159 } 160 161 @Override 162 public int describeContents() { 163 return 0; 164 } 165 166 @Override 167 public void writeToParcel(Parcel out, int flags) { 168 out.writeInt(mState); 169 out.writeInt(mNetworkType); 170 out.writeString(mAPNType); 171 out.writeString(mAPN); 172 out.writeString(mReason); 173 out.writeParcelable(mLinkProperties, flags); 174 out.writeString(mFailCause); 175 } 176 177 public static final Parcelable.Creator<PreciseDataConnectionState> CREATOR 178 = new Parcelable.Creator<PreciseDataConnectionState>() { 179 180 public PreciseDataConnectionState createFromParcel(Parcel in) { 181 return new PreciseDataConnectionState(in); 182 } 183 184 public PreciseDataConnectionState[] newArray(int size) { 185 return new PreciseDataConnectionState[size]; 186 } 187 }; 188 189 @Override 190 public int hashCode() { 191 final int prime = 31; 192 int result = 1; 193 result = prime * result + mState; 194 result = prime * result + mNetworkType; 195 result = prime * result + ((mAPNType == null) ? 0 : mAPNType.hashCode()); 196 result = prime * result + ((mAPN == null) ? 0 : mAPN.hashCode()); 197 result = prime * result + ((mReason == null) ? 0 : mReason.hashCode()); 198 result = prime * result + ((mLinkProperties == null) ? 0 : mLinkProperties.hashCode()); 199 result = prime * result + ((mFailCause == null) ? 0 : mFailCause.hashCode()); 200 return result; 201 } 202 203 @Override 204 public boolean equals(Object obj) { 205 if (this == obj) { 206 return true; 207 } 208 if (obj == null) { 209 return false; 210 } 211 if (getClass() != obj.getClass()) { 212 return false; 213 } 214 PreciseDataConnectionState other = (PreciseDataConnectionState) obj; 215 if (mAPN == null) { 216 if (other.mAPN != null) { 217 return false; 218 } 219 } else if (!mAPN.equals(other.mAPN)) { 220 return false; 221 } 222 if (mAPNType == null) { 223 if (other.mAPNType != null) { 224 return false; 225 } 226 } else if (!mAPNType.equals(other.mAPNType)) { 227 return false; 228 } 229 if (mFailCause == null) { 230 if (other.mFailCause != null) { 231 return false; 232 } 233 } else if (!mFailCause.equals(other.mFailCause)) { 234 return false; 235 } 236 if (mLinkProperties == null) { 237 if (other.mLinkProperties != null) { 238 return false; 239 } 240 } else if (!mLinkProperties.equals(other.mLinkProperties)) { 241 return false; 242 } 243 if (mNetworkType != other.mNetworkType) { 244 return false; 245 } 246 if (mReason == null) { 247 if (other.mReason != null) { 248 return false; 249 } 250 } else if (!mReason.equals(other.mReason)) { 251 return false; 252 } 253 if (mState != other.mState) { 254 return false; 255 } 256 return true; 257 } 258 259 @Override 260 public String toString() { 261 StringBuilder sb = new StringBuilder(); 262 263 sb.append("Data Connection state: " + mState); 264 sb.append(", Network type: " + mNetworkType); 265 sb.append(", APN type: " + mAPNType); 266 sb.append(", APN: " + mAPN); 267 sb.append(", Change reason: " + mReason); 268 sb.append(", Link properties: " + mLinkProperties); 269 sb.append(", Fail cause: " + mFailCause); 270 271 return sb.toString(); 272 } 273 } 274