Teach NetworkIdentity about roaming.

And correctly upgrade NetworkIdentitySet written to disk, assuming
that old values aren't roaming.

Bug: 4724762
Change-Id: Ic25897ebbaf43be2390174d8e5fd08386bc8a345
This commit is contained in:
Jeff Sharkey
2011-06-19 22:21:05 -07:00
parent b590477065
commit 3bc842e4c3
2 changed files with 32 additions and 9 deletions

View File

@@ -33,11 +33,13 @@ public class NetworkIdentity {
final int mType; final int mType;
final int mSubType; final int mSubType;
final String mSubscriberId; final String mSubscriberId;
final boolean mRoaming;
public NetworkIdentity(int type, int subType, String subscriberId) { public NetworkIdentity(int type, int subType, String subscriberId, boolean roaming) {
this.mType = type; this.mType = type;
this.mSubType = subType; this.mSubType = subType;
this.mSubscriberId = subscriberId; this.mSubscriberId = subscriberId;
this.mRoaming = roaming;
} }
@Override @Override
@@ -50,7 +52,8 @@ public class NetworkIdentity {
if (obj instanceof NetworkIdentity) { if (obj instanceof NetworkIdentity) {
final NetworkIdentity ident = (NetworkIdentity) obj; final NetworkIdentity ident = (NetworkIdentity) obj;
return mType == ident.mType && mSubType == ident.mSubType return mType == ident.mType && mSubType == ident.mSubType
&& Objects.equal(mSubscriberId, ident.mSubscriberId); && Objects.equal(mSubscriberId, ident.mSubscriberId)
&& mRoaming == ident.mRoaming;
} }
return false; return false;
} }
@@ -66,8 +69,9 @@ public class NetworkIdentity {
} }
final String scrubSubscriberId = mSubscriberId != null ? "valid" : "null"; final String scrubSubscriberId = mSubscriberId != null ? "valid" : "null";
final String roaming = mRoaming ? ", ROAMING" : "";
return "[type=" + typeName + ", subType=" + subTypeName + ", subscriberId=" return "[type=" + typeName + ", subType=" + subTypeName + ", subscriberId="
+ scrubSubscriberId + "]"; + scrubSubscriberId + roaming + "]";
} }
public int getType() { public int getType() {
@@ -82,6 +86,10 @@ public class NetworkIdentity {
return mSubscriberId; return mSubscriberId;
} }
public boolean getRoaming() {
return mRoaming;
}
/** /**
* Build a {@link NetworkIdentity} from the given {@link NetworkState}, * Build a {@link NetworkIdentity} from the given {@link NetworkState},
* assuming that any mobile networks are using the current IMSI. * assuming that any mobile networks are using the current IMSI.
@@ -94,18 +102,21 @@ public class NetworkIdentity {
// comes from an authoritative source. // comes from an authoritative source.
final String subscriberId; final String subscriberId;
final boolean roaming;
if (isNetworkTypeMobile(type)) { if (isNetworkTypeMobile(type)) {
final TelephonyManager telephony = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
roaming = telephony.isNetworkRoaming();
if (state.subscriberId != null) { if (state.subscriberId != null) {
subscriberId = state.subscriberId; subscriberId = state.subscriberId;
} else { } else {
final TelephonyManager telephony = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
subscriberId = telephony.getSubscriberId(); subscriberId = telephony.getSubscriberId();
} }
} else { } else {
subscriberId = null; subscriberId = null;
roaming = false;
} }
return new NetworkIdentity(type, subType, subscriberId); return new NetworkIdentity(type, subType, subscriberId, roaming);
} }
} }

View File

@@ -32,6 +32,7 @@ import java.util.HashSet;
*/ */
public class NetworkIdentitySet extends HashSet<NetworkIdentity> { public class NetworkIdentitySet extends HashSet<NetworkIdentity> {
private static final int VERSION_INIT = 1; private static final int VERSION_INIT = 1;
private static final int VERSION_ADD_ROAMING = 2;
public NetworkIdentitySet() { public NetworkIdentitySet() {
} }
@@ -46,7 +47,18 @@ public class NetworkIdentitySet extends HashSet<NetworkIdentity> {
final int type = in.readInt(); final int type = in.readInt();
final int subType = in.readInt(); final int subType = in.readInt();
final String subscriberId = readOptionalString(in); final String subscriberId = readOptionalString(in);
add(new NetworkIdentity(type, subType, subscriberId)); add(new NetworkIdentity(type, subType, subscriberId, false));
}
break;
}
case VERSION_ADD_ROAMING: {
final int size = in.readInt();
for (int i = 0; i < size; i++) {
final int type = in.readInt();
final int subType = in.readInt();
final String subscriberId = readOptionalString(in);
final boolean roaming = in.readBoolean();
add(new NetworkIdentity(type, subType, subscriberId, roaming));
} }
break; break;
} }
@@ -57,13 +69,13 @@ public class NetworkIdentitySet extends HashSet<NetworkIdentity> {
} }
public void writeToStream(DataOutputStream out) throws IOException { public void writeToStream(DataOutputStream out) throws IOException {
out.writeInt(VERSION_INIT); out.writeInt(VERSION_ADD_ROAMING);
out.writeInt(size()); out.writeInt(size());
for (NetworkIdentity ident : this) { for (NetworkIdentity ident : this) {
out.writeInt(VERSION_INIT);
out.writeInt(ident.getType()); out.writeInt(ident.getType());
out.writeInt(ident.getSubType()); out.writeInt(ident.getSubType());
writeOptionalString(out, ident.getSubscriberId()); writeOptionalString(out, ident.getSubscriberId());
out.writeBoolean(ident.getRoaming());
} }
} }