Merge "[MS06] Add carrier template fields into cloud backup/restore"

This commit is contained in:
Treehugger Robot
2021-11-26 05:07:26 +00:00
committed by Gerrit Code Review

View File

@@ -69,10 +69,18 @@ import java.util.Objects;
public class NetworkTemplate implements Parcelable { public class NetworkTemplate implements Parcelable {
private static final String TAG = "NetworkTemplate"; private static final String TAG = "NetworkTemplate";
/**
* Initial Version of the backup serializer.
*/
public static final int BACKUP_VERSION_1_INIT = 1;
/**
* Version of the backup serializer that added carrier template support.
*/
public static final int BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE = 2;
/** /**
* Current Version of the Backup Serializer. * Current Version of the Backup Serializer.
*/ */
private static final int BACKUP_VERSION = 1; private static final int BACKUP_VERSION = BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE;
public static final int MATCH_MOBILE = 1; public static final int MATCH_MOBILE = 1;
public static final int MATCH_WIFI = 4; public static final int MATCH_WIFI = 4;
@@ -285,6 +293,10 @@ public class NetworkTemplate implements Parcelable {
private final int mRoaming; private final int mRoaming;
private final int mDefaultNetwork; private final int mDefaultNetwork;
private final int mSubType; private final int mSubType;
/**
* The subscriber Id match rule defines how the template should match networks with
* specific subscriberId(s). See NetworkTemplate#SUBSCRIBER_ID_MATCH_RULE_* for more detail.
*/
private final int mSubscriberIdMatchRule; private final int mSubscriberIdMatchRule;
// Bitfield containing OEM network properties{@code NetworkIdentity#OEM_*}. // Bitfield containing OEM network properties{@code NetworkIdentity#OEM_*}.
@@ -348,7 +360,7 @@ public class NetworkTemplate implements Parcelable {
mSubscriberIdMatchRule = subscriberIdMatchRule; mSubscriberIdMatchRule = subscriberIdMatchRule;
checkValidSubscriberIdMatchRule(); checkValidSubscriberIdMatchRule();
if (!isKnownMatchRule(matchRule)) { if (!isKnownMatchRule(matchRule)) {
Log.e(TAG, "Unknown network template rule " + matchRule throw new IllegalArgumentException("Unknown network template rule " + matchRule
+ " will not match any identity."); + " will not match any identity.");
} }
} }
@@ -842,11 +854,17 @@ public class NetworkTemplate implements Parcelable {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(baos); DataOutputStream out = new DataOutputStream(baos);
if (!isPersistable()) {
Log.wtf(TAG, "Trying to backup non-persistable template: " + this);
}
out.writeInt(BACKUP_VERSION); out.writeInt(BACKUP_VERSION);
out.writeInt(mMatchRule); out.writeInt(mMatchRule);
BackupUtils.writeString(out, mSubscriberId); BackupUtils.writeString(out, mSubscriberId);
BackupUtils.writeString(out, mNetworkId); BackupUtils.writeString(out, mNetworkId);
out.writeInt(mMetered);
out.writeInt(mSubscriberIdMatchRule);
return baos.toByteArray(); return baos.toByteArray();
} }
@@ -854,7 +872,7 @@ public class NetworkTemplate implements Parcelable {
public static NetworkTemplate getNetworkTemplateFromBackup(DataInputStream in) public static NetworkTemplate getNetworkTemplateFromBackup(DataInputStream in)
throws IOException, BackupUtils.BadVersionException { throws IOException, BackupUtils.BadVersionException {
int version = in.readInt(); int version = in.readInt();
if (version < 1 || version > BACKUP_VERSION) { if (version < BACKUP_VERSION_1_INIT || version > BACKUP_VERSION) {
throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version"); throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version");
} }
@@ -862,11 +880,27 @@ public class NetworkTemplate implements Parcelable {
String subscriberId = BackupUtils.readString(in); String subscriberId = BackupUtils.readString(in);
String networkId = BackupUtils.readString(in); String networkId = BackupUtils.readString(in);
if (!isKnownMatchRule(matchRule)) { final int metered;
throw new BackupUtils.BadVersionException( final int subscriberIdMatchRule;
"Restored network template contains unknown match rule " + matchRule); if (version >= BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE) {
metered = in.readInt();
subscriberIdMatchRule = in.readInt();
} else {
// For backward compatibility, fill the missing filters from match rules.
metered = (matchRule == MATCH_MOBILE || matchRule == MATCH_MOBILE_WILDCARD
|| matchRule == MATCH_CARRIER) ? METERED_YES : METERED_ALL;
subscriberIdMatchRule = SUBSCRIBER_ID_MATCH_RULE_EXACT;
} }
return new NetworkTemplate(matchRule, subscriberId, networkId); try {
return new NetworkTemplate(matchRule,
subscriberId, new String[] { subscriberId },
networkId, metered, NetworkStats.ROAMING_ALL,
NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL,
NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule);
} catch (IllegalArgumentException e) {
throw new BackupUtils.BadVersionException(
"Restored network template contains unknown match rule " + matchRule, e);
}
} }
} }