Fallback should be evaluated for each preference
1) alowFallback flag was incorrectly not reset while setting profile preference. Corrected it. 2) Threw exception if default preference and enterprise preference are set together 3) renamed clearUser to withoutUser Bug: 231670730 Test: ConnectivityServiceTest Change-Id: If92ebe0cc23f18c8808893926d5e1d12ff2e3650 Merged-In: Iaf49237bdc791c7e1dd884d069eff64e74757477
This commit is contained in:
parent
96d4f321df
commit
d359d19813
1 changed files with 273 additions and 11 deletions
|
|
@ -10683,7 +10683,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
Objects.requireNonNull(profile);
|
||||
|
||||
if (preferences.size() == 0) {
|
||||
preferences.add((new ProfileNetworkPreference.Builder()).build());
|
||||
final ProfileNetworkPreference pref = new ProfileNetworkPreference.Builder()
|
||||
.setPreference(ConnectivityManager.PROFILE_NETWORK_PREFERENCE_DEFAULT)
|
||||
.build();
|
||||
preferences.add(pref);
|
||||
}
|
||||
|
||||
PermissionUtils.enforceNetworkStackPermission(mContext);
|
||||
|
|
@ -10701,12 +10704,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
|
||||
final List<ProfileNetworkPreferenceList.Preference> preferenceList =
|
||||
new ArrayList<ProfileNetworkPreferenceList.Preference>();
|
||||
boolean allowFallback = true;
|
||||
boolean hasDefaultPreference = false;
|
||||
for (final ProfileNetworkPreference preference : preferences) {
|
||||
final NetworkCapabilities nc;
|
||||
boolean allowFallback = true;
|
||||
switch (preference.getPreference()) {
|
||||
case ConnectivityManager.PROFILE_NETWORK_PREFERENCE_DEFAULT:
|
||||
nc = null;
|
||||
hasDefaultPreference = true;
|
||||
if (preference.getPreferenceEnterpriseId() != 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"Invalid enterprise identifier in setProfileNetworkPreferences");
|
||||
|
|
@ -10716,6 +10721,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
allowFallback = false;
|
||||
// continue to process the enterprise preference.
|
||||
case ConnectivityManager.PROFILE_NETWORK_PREFERENCE_ENTERPRISE:
|
||||
// This code is needed even though there is a check later on,
|
||||
// because isRangeAlreadyInPreferenceList assumes that every preference
|
||||
// has a UID list.
|
||||
if (hasDefaultPreference) {
|
||||
throw new IllegalArgumentException(
|
||||
"Default profile preference should not be set along with other "
|
||||
+ "preference");
|
||||
}
|
||||
if (!isEnterpriseIdentifierValid(preference.getPreferenceEnterpriseId())) {
|
||||
throw new IllegalArgumentException(
|
||||
"Invalid enterprise identifier in setProfileNetworkPreferences");
|
||||
|
|
@ -10739,6 +10752,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
}
|
||||
preferenceList.add(new ProfileNetworkPreferenceList.Preference(
|
||||
profile, nc, allowFallback));
|
||||
if (hasDefaultPreference && preferenceList.size() > 1) {
|
||||
throw new IllegalArgumentException(
|
||||
"Default profile preference should not be set along with other preference");
|
||||
}
|
||||
}
|
||||
mHandler.sendMessage(mHandler.obtainMessage(EVENT_SET_PROFILE_NETWORK_PREFERENCE,
|
||||
new Pair<>(preferenceList, listener)));
|
||||
|
|
@ -10783,12 +10800,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
return false;
|
||||
}
|
||||
|
||||
private void validateNetworkCapabilitiesOfProfileNetworkPreference(
|
||||
@Nullable final NetworkCapabilities nc) {
|
||||
if (null == nc) return; // Null caps are always allowed. It means to remove the setting.
|
||||
ensureRequestableCapabilities(nc);
|
||||
}
|
||||
|
||||
private ArraySet<NetworkRequestInfo> createNrisFromProfileNetworkPreferences(
|
||||
@NonNull final ProfileNetworkPreferenceList prefs) {
|
||||
final ArraySet<NetworkRequestInfo> result = new ArraySet<>();
|
||||
|
|
@ -10846,10 +10857,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
* Clear all the existing preferences for the user before applying new preferences.
|
||||
*
|
||||
*/
|
||||
mProfileNetworkPreferences = mProfileNetworkPreferences.clearUser(
|
||||
mProfileNetworkPreferences = mProfileNetworkPreferences.withoutUser(
|
||||
preferenceList.get(0).user);
|
||||
for (final ProfileNetworkPreferenceList.Preference preference : preferenceList) {
|
||||
validateNetworkCapabilitiesOfProfileNetworkPreference(preference.capabilities);
|
||||
mProfileNetworkPreferences = mProfileNetworkPreferences.plus(preference);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue