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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user