NetworkTemplate.java revision 1b5a2a96f793211bfbd39aa29cc41031dfa23950
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.TYPE_WIFI; 201b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.net.ConnectivityManager.TYPE_WIMAX; 211b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.net.ConnectivityManager.isNetworkTypeMobile; 221b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.telephony.TelephonyManager.NETWORK_CLASS_2_G; 231b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.telephony.TelephonyManager.NETWORK_CLASS_3_G; 241b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.telephony.TelephonyManager.NETWORK_CLASS_4_G; 251b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.telephony.TelephonyManager.NETWORK_CLASS_UNKNOWN; 261b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.telephony.TelephonyManager.getNetworkClass; 271b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 281b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport android.os.Parcel; 291b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport android.os.Parcelable; 301b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 311b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport com.android.internal.util.Objects; 321b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 331b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey/** 341b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Template definition used to generically match {@link NetworkIdentity}, 351b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * usually when collecting statistics. 361b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * 371b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * @hide 381b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 391b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeypublic class NetworkTemplate implements Parcelable { 401b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 411b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 421b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Template to combine all {@link ConnectivityManager#TYPE_MOBILE} style 431b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * networks together. Only uses statistics for requested IMSI. 441b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 451b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static final int MATCH_MOBILE_ALL = 1; 461b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 471b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 481b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Template to combine all {@link ConnectivityManager#TYPE_MOBILE} style 491b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * networks together that roughly meet a "3G" definition, or lower. Only 501b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * uses statistics for requested IMSI. 511b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 521b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static final int MATCH_MOBILE_3G_LOWER = 2; 531b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 541b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 551b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Template to combine all {@link ConnectivityManager#TYPE_MOBILE} style 561b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * networks together that meet a "4G" definition. Only uses statistics for 571b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * requested IMSI. 581b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 591b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static final int MATCH_MOBILE_4G = 3; 601b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 611b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 621b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Template to combine all {@link ConnectivityManager#TYPE_WIFI} style 631b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * networks together. 641b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 651b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static final int MATCH_WIFI = 4; 661b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 671b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final int mMatchRule; 681b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String mSubscriberId; 691b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 701b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkTemplate(int matchRule, String subscriberId) { 711b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mMatchRule = matchRule; 721b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.mSubscriberId = subscriberId; 731b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 741b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 751b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkTemplate(Parcel in) { 761b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey mMatchRule = in.readInt(); 771b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey mSubscriberId = in.readString(); 781b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 791b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 801b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** {@inheritDoc} */ 811b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public void writeToParcel(Parcel dest, int flags) { 821b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey dest.writeInt(mMatchRule); 831b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey dest.writeString(mSubscriberId); 841b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 851b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 861b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** {@inheritDoc} */ 871b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int describeContents() { 881b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return 0; 891b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 901b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 911b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 921b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public String toString() { 931b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final String scrubSubscriberId = mSubscriberId != null ? "valid" : "null"; 941b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "NetworkTemplate: matchRule=" + getMatchRuleName(mMatchRule) + ", subscriberId=" 951b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey + scrubSubscriberId; 961b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 971b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 981b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 991b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int hashCode() { 1001b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return Objects.hashCode(mMatchRule, mSubscriberId); 1011b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1021b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1031b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey @Override 1041b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public boolean equals(Object obj) { 1051b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (obj instanceof NetworkTemplate) { 1061b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final NetworkTemplate other = (NetworkTemplate) obj; 1071b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mMatchRule == other.mMatchRule 1081b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey && Objects.equal(mSubscriberId, other.mSubscriberId); 1091b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1101b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return false; 1111b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1121b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1131b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public int getMatchRule() { 1141b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mMatchRule; 1151b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1161b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1171b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public String getSubscriberId() { 1181b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return mSubscriberId; 1191b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1201b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1211b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 1221b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Test if this network matches the given template and IMEI. 1231b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 1241b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public boolean matches(NetworkIdentity ident) { 1251b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey switch (mMatchRule) { 1261b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_MOBILE_ALL: 1271b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return matchesMobile(ident); 1281b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_MOBILE_3G_LOWER: 1291b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return matchesMobile3gLower(ident); 1301b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_MOBILE_4G: 1311b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return matchesMobile4g(ident); 1321b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_WIFI: 1331b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return matchesWifi(ident); 1341b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey default: 1351b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey throw new IllegalArgumentException("unknown network template"); 1361b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1371b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1381b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1391b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 1401b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Check if mobile network with matching IMEI. Also matches 1411b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * {@link #TYPE_WIMAX}. 1421b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 1431b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey private boolean matchesMobile(NetworkIdentity ident) { 1441b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) { 1451b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return true; 1461b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else if (ident.mType == TYPE_WIMAX) { 1471b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return true; 1481b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1491b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return false; 1501b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1511b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1521b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 1531b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Check if mobile network classified 3G or lower with matching IMEI. 1541b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 1551b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey private boolean matchesMobile3gLower(NetworkIdentity ident) { 1561b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) { 1571b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey switch (getNetworkClass(ident.mSubType)) { 1581b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case NETWORK_CLASS_UNKNOWN: 1591b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case NETWORK_CLASS_2_G: 1601b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case NETWORK_CLASS_3_G: 1611b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return true; 1621b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1631b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1641b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return false; 1651b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1661b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1671b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 1681b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Check if mobile network classified 4G with matching IMEI. Also matches 1691b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * {@link #TYPE_WIMAX}. 1701b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 1711b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey private boolean matchesMobile4g(NetworkIdentity ident) { 1721b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) { 1731b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey switch (getNetworkClass(ident.mSubType)) { 1741b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case NETWORK_CLASS_4_G: 1751b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return true; 1761b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1771b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } else if (ident.mType == TYPE_WIMAX) { 1781b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return true; 1791b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1801b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return false; 1811b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1821b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1831b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey /** 1841b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Check if matches Wi-Fi network template. 1851b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey */ 1861b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey private boolean matchesWifi(NetworkIdentity ident) { 1871b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey if (ident.mType == TYPE_WIFI) { 1881b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return true; 1891b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1901b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return false; 1911b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1921b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 1931b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static String getMatchRuleName(int matchRule) { 1941b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey switch (matchRule) { 1951b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_MOBILE_3G_LOWER: 1961b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "MOBILE_3G_LOWER"; 1971b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_MOBILE_4G: 1981b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "MOBILE_4G"; 1991b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_MOBILE_ALL: 2001b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "MOBILE_ALL"; 2011b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey case MATCH_WIFI: 2021b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "WIFI"; 2031b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey default: 2041b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "UNKNOWN"; 2051b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 2061b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 2071b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 2081b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static final Creator<NetworkTemplate> CREATOR = new Creator<NetworkTemplate>() { 2091b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkTemplate createFromParcel(Parcel in) { 2101b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return new NetworkTemplate(in); 2111b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 2121b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 2131b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkTemplate[] newArray(int size) { 2141b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return new NetworkTemplate[size]; 2151b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 2161b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey }; 2171b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey} 218