Update OemNetworkPreferences to use 1:1 Map

Updated OemNetworkPreferences to use a Map instead of an Array of Arrays
(SparseArray<List<String>>). This is for two reasons: to make the API
simpler and also prevent issues with duplicate entries for packages
mapped to more than one preference which is not supported.

Bug: 176597181
Bug: 176494815
Test: atest FrameworksNetTests
Change-Id: I85363e28b46b89ae60a85219313c2a45bd5e7dd5
This commit is contained in:
James Mattis
2020-12-31 15:45:25 -08:00
parent 2516da35fc
commit e74935d4e6
2 changed files with 120 additions and 49 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020 The Android Open Source Project
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,22 +20,20 @@ import static com.android.testutils.MiscAsserts.assertThrows;
import static com.android.testutils.ParcelUtils.assertParcelSane;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import android.os.Build;
import android.util.SparseArray;
import androidx.test.filters.SmallTest;
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
import com.android.testutils.DevSdkIgnoreRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@IgnoreUpTo(Build.VERSION_CODES.R)
@RunWith(DevSdkIgnoreRunner.class)
@@ -45,51 +43,51 @@ public class OemNetworkPreferencesTest {
private static final int TEST_PREF = OemNetworkPreferences.OEM_NETWORK_PREFERENCE_DEFAULT;
private static final String TEST_PACKAGE = "com.google.apps.contacts";
private final List<String> mPackages = new ArrayList<>();
private final OemNetworkPreferences.Builder mBuilder = new OemNetworkPreferences.Builder();
@Before
public void beforeEachTestMethod() {
mPackages.add(TEST_PACKAGE);
}
@Test
public void builderAddNetworkPreferenceRequiresNonNullPackages() {
public void testBuilderAddNetworkPreferenceRequiresNonNullPackageName() {
assertThrows(NullPointerException.class,
() -> mBuilder.addNetworkPreference(TEST_PREF, null));
() -> mBuilder.addNetworkPreference(null, TEST_PREF));
}
@Test
public void getNetworkPreferencesReturnsCorrectValue() {
final int expectedNumberOfMappings = 1;
mBuilder.addNetworkPreference(TEST_PREF, mPackages);
public void testBuilderRemoveNetworkPreferenceRequiresNonNullPackageName() {
assertThrows(NullPointerException.class,
() -> mBuilder.removeNetworkPreference(null));
}
final SparseArray<List<String>> networkPreferences =
@Test
public void testGetNetworkPreferenceReturnsCorrectValue() {
final int expectedNumberOfMappings = 1;
mBuilder.addNetworkPreference(TEST_PACKAGE, TEST_PREF);
final Map<String, Integer> networkPreferences =
mBuilder.build().getNetworkPreferences();
assertEquals(expectedNumberOfMappings, networkPreferences.size());
assertEquals(mPackages.size(), networkPreferences.get(TEST_PREF).size());
assertEquals(mPackages.get(0), networkPreferences.get(TEST_PREF).get(0));
assertTrue(networkPreferences.containsKey(TEST_PACKAGE));
}
@Test
public void getNetworkPreferencesReturnsUnmodifiableValue() {
public void testGetNetworkPreferenceReturnsUnmodifiableValue() {
final String newPackage = "new.com.google.apps.contacts";
mBuilder.addNetworkPreference(TEST_PREF, mPackages);
mBuilder.addNetworkPreference(TEST_PACKAGE, TEST_PREF);
final SparseArray<List<String>> networkPreferences =
final Map<String, Integer> networkPreferences =
mBuilder.build().getNetworkPreferences();
assertThrows(UnsupportedOperationException.class,
() -> networkPreferences.get(TEST_PREF).set(mPackages.size() - 1, newPackage));
() -> networkPreferences.put(newPackage, TEST_PREF));
assertThrows(UnsupportedOperationException.class,
() -> networkPreferences.get(TEST_PREF).add(newPackage));
() -> networkPreferences.remove(TEST_PACKAGE));
}
@Test
public void toStringReturnsCorrectValue() {
mBuilder.addNetworkPreference(TEST_PREF, mPackages);
public void testToStringReturnsCorrectValue() {
mBuilder.addNetworkPreference(TEST_PACKAGE, TEST_PREF);
final String networkPreferencesString = mBuilder.build().getNetworkPreferences().toString();
@@ -99,10 +97,56 @@ public class OemNetworkPreferencesTest {
@Test
public void testOemNetworkPreferencesParcelable() {
mBuilder.addNetworkPreference(TEST_PREF, mPackages);
mBuilder.addNetworkPreference(TEST_PACKAGE, TEST_PREF);
final OemNetworkPreferences prefs = mBuilder.build();
assertParcelSane(prefs, 1 /* fieldCount */);
}
@Test
public void testAddNetworkPreferenceOverwritesPriorPreference() {
final int newPref = OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID;
mBuilder.addNetworkPreference(TEST_PACKAGE, TEST_PREF);
Map<String, Integer> networkPreferences =
mBuilder.build().getNetworkPreferences();
assertTrue(networkPreferences.containsKey(TEST_PACKAGE));
assertEquals(networkPreferences.get(TEST_PACKAGE).intValue(), TEST_PREF);
mBuilder.addNetworkPreference(TEST_PACKAGE, newPref);
networkPreferences = mBuilder.build().getNetworkPreferences();
assertTrue(networkPreferences.containsKey(TEST_PACKAGE));
assertEquals(networkPreferences.get(TEST_PACKAGE).intValue(), newPref);
}
@Test
public void testRemoveNetworkPreferenceRemovesValue() {
mBuilder.addNetworkPreference(TEST_PACKAGE, TEST_PREF);
Map<String, Integer> networkPreferences =
mBuilder.build().getNetworkPreferences();
assertTrue(networkPreferences.containsKey(TEST_PACKAGE));
mBuilder.removeNetworkPreference(TEST_PACKAGE);
networkPreferences = mBuilder.build().getNetworkPreferences();
assertFalse(networkPreferences.containsKey(TEST_PACKAGE));
}
@Test
public void testConstructorByOemNetworkPreferencesSetsValue() {
mBuilder.addNetworkPreference(TEST_PACKAGE, TEST_PREF);
OemNetworkPreferences networkPreference = mBuilder.build();
final Map<String, Integer> networkPreferences =
new OemNetworkPreferences
.Builder(networkPreference)
.build()
.getNetworkPreferences();
assertTrue(networkPreferences.containsKey(TEST_PACKAGE));
assertEquals(networkPreferences.get(TEST_PACKAGE).intValue(), TEST_PREF);
}
}