Restore the null behavior of buildWifiTemplate
The old behavior was to only return those wifis that have a null key/subscriber ID (e.g. not carrier wifi). To keep backward compatibility, restore that behavior. Also only crash the old methods on devices with initial SDK U, because it can't be mandated that devices that upgrade must not call these methods. Bug: 273963543 Test: FrameworksNetTests Change-Id: Iefb976ed86a732158964fae38e9e601001c2637a (cherry picked from commit 78f94fc15035560c279f8e9378561e60a676410a)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user