NetworkIdentity.java revision 5dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2d
11b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey/* 21b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 31b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * 41b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 51b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * you may not use this file except in compliance with the License. 61b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * You may obtain a copy of the License at 71b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * 81b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 91b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * 101b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 111b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 121b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * See the License for the specific language governing permissions and 141b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * limitations under the License. 151b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 161b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 171b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeypackage android.net; 181b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 191b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.net.ConnectivityManager.isNetworkTypeMobile; 201b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 211b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport android.content.Context; 221b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport android.telephony.TelephonyManager; 231b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 241b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport com.android.internal.util.Objects; 251b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 261b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey/** 271b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Network definition that includes strong identity. Analogous to combining 281b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * {@link NetworkInfo} and an IMSI. 291b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * 301b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * @hide 311b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 321b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeypublic class NetworkIdentity { 331b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int mType; 341b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int mSubType; 351b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String mSubscriberId; 365dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey final boolean mRoaming; 371b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 385dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey public NetworkIdentity(int type, int subType, String subscriberId, boolean roaming) { 391b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mType = type; 401b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mSubType = subType; 411b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mSubscriberId = subscriberId; 425dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey this.mRoaming = roaming; 431b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 441b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 451b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 461b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int hashCode() { 471b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return Objects.hashCode(mType, mSubType, mSubscriberId); 481b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 491b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 501b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 511b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public boolean equals(Object obj) { 521b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (obj instanceof NetworkIdentity) { 531b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final NetworkIdentity ident = (NetworkIdentity) obj; 541b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mType == ident.mType && mSubType == ident.mSubType 555dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey && Objects.equal(mSubscriberId, ident.mSubscriberId) 565dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey && mRoaming == ident.mRoaming; 571b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 581b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return false; 591b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 601b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 611b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 621b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public String toString() { 631b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String typeName = ConnectivityManager.getNetworkTypeName(mType); 641b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String subTypeName; 651b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (ConnectivityManager.isNetworkTypeMobile(mType)) { 661b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey subTypeName = TelephonyManager.getNetworkTypeName(mSubType); 671b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else { 681b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey subTypeName = Integer.toString(mSubType); 691b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 701b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 711b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String scrubSubscriberId = mSubscriberId != null ? "valid" : "null"; 725dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey final String roaming = mRoaming ? ", ROAMING" : ""; 731b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "[type=" + typeName + ", subType=" + subTypeName + ", subscriberId=" 745dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey + scrubSubscriberId + roaming + "]"; 751b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 761b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 771b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int getType() { 781b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mType; 791b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 801b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 811b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int getSubType() { 821b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mSubType; 831b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 841b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 851b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public String getSubscriberId() { 861b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mSubscriberId; 871b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 881b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 895dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey public boolean getRoaming() { 905dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey return mRoaming; 915dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey } 925dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey 931b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 941b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Build a {@link NetworkIdentity} from the given {@link NetworkState}, 951b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * assuming that any mobile networks are using the current IMSI. 961b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 971b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static NetworkIdentity buildNetworkIdentity(Context context, NetworkState state) { 981b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int type = state.networkInfo.getType(); 991b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int subType = state.networkInfo.getSubtype(); 1001b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1011b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey // TODO: consider moving subscriberId over to LinkCapabilities, so it 1021b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey // comes from an authoritative source. 1031b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1041b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String subscriberId; 1055dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey final boolean roaming; 1061b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (isNetworkTypeMobile(type)) { 1075dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey final TelephonyManager telephony = (TelephonyManager) context.getSystemService( 1085dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey Context.TELEPHONY_SERVICE); 1095dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey roaming = telephony.isNetworkRoaming(); 110b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey if (state.subscriberId != null) { 111b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey subscriberId = state.subscriberId; 112b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey } else { 113b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey subscriberId = telephony.getSubscriberId(); 114b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey } 1151b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else { 1161b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey subscriberId = null; 1175dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey roaming = false; 1181b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1195dc0c26cffbbc62ff84f9f4c8a451e68e2c05d2dJeff Sharkey return new NetworkIdentity(type, subType, subscriberId, roaming); 1201b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1211b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1221b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey} 123