Merge "Restore the null behavior of buildWifiTemplate"

This commit is contained in:
Remi NGUYEN VAN
2023-04-07 02:49:52 +00:00
committed by Gerrit Code Review

View File

@@ -184,6 +184,23 @@ public final class NetworkTemplate implements Parcelable {
}
}
private static Set<String> setOf(@Nullable final String item) {
if (item == null) {
// Set.of will throw if item is null
final Set<String> set = new HashSet<>();
set.add(null);
return Collections.unmodifiableSet(set);
} else {
return Set.of(item);
}
}
private static void throwAboveU() {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException("Method not supported on Android U or above");
}
}
/**
* Template to match {@link ConnectivityManager#TYPE_MOBILE} networks with
* the given IMSI.
@@ -195,22 +212,8 @@ public final class NetworkTemplate implements Parcelable {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.TIRAMISU,
publicAlternatives = "Use {@code Builder} instead.")
public static NetworkTemplate buildTemplateMobileAll(@NonNull String subscriberId) {
final Set<String> set;
// Prevent from crash for b/273963543, where the OEMs still call into this method
// with null subscriberId and get crashed.
final int firstSdk = Build.VERSION.DEVICE_INITIAL_SDK_INT;
if (firstSdk > Build.VERSION_CODES.TIRAMISU && subscriberId == null) {
throw new IllegalArgumentException("buildTemplateMobileAll does not accept null"
+ " subscriberId on Android U devices or above");
}
if (subscriberId == null) {
set = new HashSet<>();
set.add(null);
} else {
set = Set.of(subscriberId);
}
return new NetworkTemplate.Builder(MATCH_MOBILE).setMeteredness(METERED_YES)
.setSubscriberIds(set).build();
.setSubscriberIds(setOf(subscriberId)).build();
}
/**
@@ -274,10 +277,8 @@ public final class NetworkTemplate implements Parcelable {
// TODO(b/270089918): Remove this method. This can only be done after there are no more callers,
// including in OEM code which can access this by linking against the framework.
public static NetworkTemplate buildTemplateBluetooth() {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"buildTemplateBluetooth is not supported on Android U devices or above");
}
// TODO : this is part of hidden-o txt, does that mean it should be annotated with
// @UnsupportedAppUsage(maxTargetSdk = O) ? If yes, can't throwAboveU().
return new NetworkTemplate.Builder(MATCH_BLUETOOTH).build();
}
@@ -290,10 +291,8 @@ public final class NetworkTemplate implements Parcelable {
// TODO(b/270089918): Remove this method. This can only be done after there are no more callers,
// including in OEM code which can access this by linking against the framework.
public static NetworkTemplate buildTemplateProxy() {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"buildTemplateProxy is not supported on Android U devices or above");
}
// TODO : this is part of hidden-o txt, does that mean it should be annotated with
// @UnsupportedAppUsage(maxTargetSdk = O) ? If yes, can't throwAboveU().
return new NetworkTemplate(MATCH_PROXY, null, null);
}
@@ -305,10 +304,7 @@ public final class NetworkTemplate implements Parcelable {
// TODO(b/273963543): Remove this method. This can only be done after there are no more callers,
// including in OEM code which can access this by linking against the framework.
public static NetworkTemplate buildTemplateCarrierMetered(@NonNull String subscriberId) {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"buildTemplateCarrierMetered is not supported on Android U devices or above");
}
throwAboveU();
return new NetworkTemplate.Builder(MATCH_CARRIER)
// Set.of will throw if subscriberId is null
.setSubscriberIds(Set.of(subscriberId))
@@ -327,10 +323,7 @@ public final class NetworkTemplate implements Parcelable {
// including in OEM code which can access this by linking against the framework.
public static NetworkTemplate buildTemplateMobileWithRatType(@Nullable String subscriberId,
int ratType, int metered) {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException("buildTemplateMobileWithRatType is not "
+ "supported on Android U devices or above");
}
throwAboveU();
return new NetworkTemplate.Builder(MATCH_MOBILE)
.setSubscriberIds(TextUtils.isEmpty(subscriberId)
? Collections.emptySet()
@@ -340,7 +333,6 @@ public final class NetworkTemplate implements Parcelable {
.build();
}
/**
* Template to match {@link ConnectivityManager#TYPE_WIFI} networks with the
* given key of the wifi network.
@@ -352,12 +344,9 @@ public final class NetworkTemplate implements Parcelable {
// TODO(b/273963543): Remove this method. This can only be done after there are no more callers,
// including in OEM code which can access this by linking against the framework.
public static NetworkTemplate buildTemplateWifi(@NonNull String wifiNetworkKey) {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException("buildTemplateWifi is not "
+ "supported on Android U devices or above");
}
// TODO : this is part of hidden-o txt, does that mean it should be annotated with
// @UnsupportedAppUsage(maxTargetSdk = O) ? If yes, can't throwAboveU().
return new NetworkTemplate.Builder(MATCH_WIFI)
// Set.of will throw if wifiNetworkKey is null
.setWifiNetworkKeys(Set.of(wifiNetworkKey))
.build();
}
@@ -379,14 +368,9 @@ public final class NetworkTemplate implements Parcelable {
// including in OEM code which can access this by linking against the framework.
public static NetworkTemplate buildTemplateWifi(@Nullable String wifiNetworkKey,
@Nullable String subscriberId) {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException("buildTemplateWifi is not "
+ "supported on Android U devices or above");
}
throwAboveU();
return new NetworkTemplate.Builder(MATCH_WIFI)
.setSubscriberIds(subscriberId == null
? Collections.emptySet()
: Set.of(subscriberId))
.setSubscriberIds(setOf(subscriberId))
.setWifiNetworkKeys(wifiNetworkKey == null
? Collections.emptySet()
: Set.of(wifiNetworkKey))
@@ -471,10 +455,6 @@ public final class NetworkTemplate implements Parcelable {
if (matchRule == 6 || matchRule == 7) {
Log.e(TAG, "Use MATCH_MOBILE with empty subscriberIds or MATCH_WIFI with empty "
+ "wifiNetworkKeys instead of template with matchRule=" + matchRule);
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"Wildcard templates are not supported on Android U devices or above");
}
}
}
@@ -508,10 +488,8 @@ public final class NetworkTemplate implements Parcelable {
getMeterednessForBackwardsCompatibility(matchRule),
ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL);
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"This constructor is not supported on Android U devices or above");
}
// TODO : this is part of hidden-o txt, does that mean it should be annotated with
// @UnsupportedAppUsage(maxTargetSdk = O) ? If yes, can't throwAboveU().
}
/** @hide */
@@ -526,10 +504,7 @@ public final class NetworkTemplate implements Parcelable {
this(getBackwardsCompatibleMatchRule(matchRule),
matchSubscriberIds == null ? new String[]{} : matchSubscriberIds,
matchWifiNetworkKeys, metered, roaming, defaultNetwork, ratType, oemManaged);
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"This constructor is not supported on Android U devices or above");
}
throwAboveU();
}
/** @hide */
@@ -636,10 +611,8 @@ public final class NetworkTemplate implements Parcelable {
// including in OEM code which can access this by linking against the framework.
/** @hide */
public boolean isMatchRuleMobile() {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"isMatchRuleMobile is not supported on Android U devices or above");
}
// TODO : this is part of hidden-o txt, does that mean it should be annotated with
// @UnsupportedAppUsage(maxTargetSdk = O) ? If yes, can't throwAboveU().
switch (mMatchRule) {
case MATCH_MOBILE:
// Old MATCH_MOBILE_WILDCARD
@@ -981,10 +954,7 @@ public final class NetworkTemplate implements Parcelable {
// TODO(b/273963543): Remove this method. This can only be done after there are no more callers,
// including in OEM code which can access this by linking against the framework.
public static NetworkTemplate normalize(NetworkTemplate template, List<String[]> mergedList) {
if (SdkLevel.isAtLeastU()) {
throw new UnsupportedOperationException(
"normalize is not supported on Android U devices or above");
}
throwAboveU();
return normalizeImpl(template, mergedList);
}