NetworkIdentity.java revision b09540f33a6cabe50edec0ef32d0b1d0b0d96fff
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; 361b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 371b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkIdentity(int type, int subType, String subscriberId) { 381b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mType = type; 391b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mSubType = subType; 401b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mSubscriberId = subscriberId; 411b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 421b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 431b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 441b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int hashCode() { 451b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return Objects.hashCode(mType, mSubType, mSubscriberId); 461b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 471b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 481b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 491b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public boolean equals(Object obj) { 501b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (obj instanceof NetworkIdentity) { 511b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final NetworkIdentity ident = (NetworkIdentity) obj; 521b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mType == ident.mType && mSubType == ident.mSubType 531b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey && Objects.equal(mSubscriberId, ident.mSubscriberId); 541b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 551b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return false; 561b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 571b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 581b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 591b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public String toString() { 601b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String typeName = ConnectivityManager.getNetworkTypeName(mType); 611b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String subTypeName; 621b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (ConnectivityManager.isNetworkTypeMobile(mType)) { 631b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey subTypeName = TelephonyManager.getNetworkTypeName(mSubType); 641b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else { 651b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey subTypeName = Integer.toString(mSubType); 661b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 671b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 681b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String scrubSubscriberId = mSubscriberId != null ? "valid" : "null"; 691b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "[type=" + typeName + ", subType=" + subTypeName + ", subscriberId=" 701b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey + scrubSubscriberId + "]"; 711b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 721b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 731b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int getType() { 741b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mType; 751b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 761b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 771b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int getSubType() { 781b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mSubType; 791b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 801b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 811b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public String getSubscriberId() { 821b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mSubscriberId; 831b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 841b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 851b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 861b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Build a {@link NetworkIdentity} from the given {@link NetworkState}, 871b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * assuming that any mobile networks are using the current IMSI. 881b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 891b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static NetworkIdentity buildNetworkIdentity(Context context, NetworkState state) { 901b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int type = state.networkInfo.getType(); 911b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int subType = state.networkInfo.getSubtype(); 921b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 931b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey // TODO: consider moving subscriberId over to LinkCapabilities, so it 941b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey // comes from an authoritative source. 951b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 961b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String subscriberId; 971b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (isNetworkTypeMobile(type)) { 98b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey if (state.subscriberId != null) { 99b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey subscriberId = state.subscriberId; 100b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey } else { 101b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey final TelephonyManager telephony = (TelephonyManager) context.getSystemService( 102b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey Context.TELEPHONY_SERVICE); 103b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey subscriberId = telephony.getSubscriberId(); 104b09540f33a6cabe50edec0ef32d0b1d0b0d96fffJeff Sharkey } 1051b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else { 1061b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey subscriberId = null; 1071b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1081b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return new NetworkIdentity(type, subType, subscriberId); 1091b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1101b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1111b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey} 112