Use MessageUtils instead of hardcoded strings in policyNameOf.

This makes the code easier to maintain because we do not need to
manually add string representations, and because it will throw at
static initialization time if the clas contains duplicate
POLICY_xxx values. The memory overhead is likely negligible.

Bug: 216567577
Test: new coverage in FullScoreTest
Change-Id: Iab23d414c8e28ff7f26060ad44fa996f277d361f
This commit is contained in:
Lorenzo Colitti
2022-02-18 09:05:10 +09:00
parent 0261ced634
commit c6d3f3cf25
2 changed files with 10 additions and 15 deletions

View File

@@ -21,8 +21,6 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkCapabilities.TRANSPORT_VPN;
import static android.net.NetworkScore.KEEP_CONNECTED_NONE; import static android.net.NetworkScore.KEEP_CONNECTED_NONE;
import static android.net.NetworkScore.POLICY_EXITING;
import static android.net.NetworkScore.POLICY_TRANSPORT_PRIMARY;
import static android.net.NetworkScore.POLICY_YIELD_TO_BAD_WIFI; import static android.net.NetworkScore.POLICY_YIELD_TO_BAD_WIFI;
import android.annotation.IntDef; import android.annotation.IntDef;
@@ -31,8 +29,10 @@ import android.net.NetworkAgentConfig;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkScore; import android.net.NetworkScore;
import android.net.NetworkScore.KeepConnectedReason; import android.net.NetworkScore.KeepConnectedReason;
import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.MessageUtils;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@@ -112,21 +112,14 @@ public class FullScore {
private static final long EXTERNAL_POLICIES_MASK = private static final long EXTERNAL_POLICIES_MASK =
0x00000000FFFFFFFFL & ~(1L << POLICY_YIELD_TO_BAD_WIFI); 0x00000000FFFFFFFFL & ~(1L << POLICY_YIELD_TO_BAD_WIFI);
private static SparseArray<String> sMessageNames = MessageUtils.findMessageNames(
new Class[]{FullScore.class, NetworkScore.class}, new String[]{"POLICY_"});
@VisibleForTesting @VisibleForTesting
static @NonNull String policyNameOf(final int policy) { static @NonNull String policyNameOf(final int policy) {
switch (policy) { final String name = sMessageNames.get(policy);
case POLICY_IS_VALIDATED: return "IS_VALIDATED"; if (name == null) throw new IllegalArgumentException("Unknown policy: " + policy);
case POLICY_IS_VPN: return "IS_VPN"; return name.substring("POLICY_".length());
case POLICY_EVER_USER_SELECTED: return "EVER_USER_SELECTED";
case POLICY_ACCEPT_UNVALIDATED: return "ACCEPT_UNVALIDATED";
case POLICY_IS_UNMETERED: return "IS_UNMETERED";
case POLICY_YIELD_TO_BAD_WIFI: return "YIELD_TO_BAD_WIFI";
case POLICY_TRANSPORT_PRIMARY: return "TRANSPORT_PRIMARY";
case POLICY_EXITING: return "EXITING";
case POLICY_IS_INVINCIBLE: return "INVINCIBLE";
case POLICY_EVER_VALIDATED_NOT_AVOIDED_WHEN_BAD: return "EVER_VALIDATED";
}
throw new IllegalArgumentException("Unknown policy : " + policy);
} }
// Bitmask of all the policies applied to this score. // Bitmask of all the policies applied to this score.

View File

@@ -26,6 +26,7 @@ import androidx.test.filters.SmallTest
import com.android.server.connectivity.FullScore.MAX_CS_MANAGED_POLICY import com.android.server.connectivity.FullScore.MAX_CS_MANAGED_POLICY
import com.android.server.connectivity.FullScore.POLICY_ACCEPT_UNVALIDATED import com.android.server.connectivity.FullScore.POLICY_ACCEPT_UNVALIDATED
import com.android.server.connectivity.FullScore.POLICY_EVER_USER_SELECTED import com.android.server.connectivity.FullScore.POLICY_EVER_USER_SELECTED
import com.android.server.connectivity.FullScore.POLICY_IS_UNMETERED
import com.android.server.connectivity.FullScore.POLICY_IS_VALIDATED import com.android.server.connectivity.FullScore.POLICY_IS_VALIDATED
import com.android.server.connectivity.FullScore.POLICY_IS_VPN import com.android.server.connectivity.FullScore.POLICY_IS_VPN
import com.android.testutils.DevSdkIgnoreRule import com.android.testutils.DevSdkIgnoreRule
@@ -101,6 +102,7 @@ class FullScoreTest {
assertFailsWith<IllegalArgumentException> { assertFailsWith<IllegalArgumentException> {
FullScore.policyNameOf(MAX_CS_MANAGED_POLICY + 1) FullScore.policyNameOf(MAX_CS_MANAGED_POLICY + 1)
} }
assertEquals("IS_UNMETERED", FullScore.policyNameOf(POLICY_IS_UNMETERED))
} }
fun getAllPolicies() = Regex("POLICY_.*").let { nameRegex -> fun getAllPolicies() = Regex("POLICY_.*").let { nameRegex ->