Migrate the NETWORK_SCORER_APP Setting.
Migrate the value of NETWORK_SCORER_APP to the USE_OPEN_WIFI_PACKAGE
Setting if the following conditions are true:
* NETWORK_SCORER_APP has a value
* An active scorer/recommender is present.
* The active scorer specifies a valid UseOpenWifiActivity.
* The NETWORK_SCORER_APP value matches the package name of the
UseOpenWifiActivity or the active scorer.
Test: runtest frameworks-services -c com.android.server.NetworkScorerAppManagerTest
Bug: 36718516
Change-Id: I7d7a56c62b4a7f4a0e43824fbb2075e80d7a753b
diff --git a/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java b/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java
index 9197ccf9..0694eae 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java
@@ -22,6 +22,7 @@
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
@@ -170,6 +171,7 @@
mockScoreNetworksGranted(recoComponent.getPackageName());
mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
enableUseOpenWifiComponent.getPackageName());
+ mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
assertNotNull(activeScorer);
@@ -350,6 +352,173 @@
eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), any());
}
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_networkScorerAppIsNull()
+ throws Exception {
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP)).thenReturn(null);
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade, never()).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE), anyString());
+ }
+
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_networkScorerAppIsEmpty()
+ throws Exception {
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP)).thenReturn("");
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade, never()).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE), anyString());
+ }
+
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_networkScorerIsNotActive()
+ throws Exception {
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP)).thenReturn("com.foo.package");
+ // Make getActiveScorer() return null.
+ setRecommendationsEnabledSetting(NetworkScoreManager.RECOMMENDATIONS_ENABLED_FORCED_OFF);
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade, never()).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE), anyString());
+ }
+
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_useOpenWifiSettingIsNotEmpty()
+ throws Exception {
+ final ComponentName recoComponent = new ComponentName("package1", "class1");
+ final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
+ setNetworkRecoPackageSetting(recoComponent.getPackageName());
+ mockScoreNetworksGranted(recoComponent.getPackageName());
+ mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+ enableUseOpenWifiComponent.getPackageName());
+ mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP))
+ .thenReturn(enableUseOpenWifiComponent.getPackageName());
+ // The setting has a value so the migration shouldn't touch it.
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.USE_OPEN_WIFI_PACKAGE))
+ .thenReturn(enableUseOpenWifiComponent.getPackageName());
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade, never()).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE), anyString());
+ verify(mSettingsFacade).putString(eq(mMockContext),
+ eq(Settings.Global.NETWORK_SCORER_APP), eq(null));
+ }
+
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_useOpenWifiActivityNotAvail()
+ throws Exception {
+ final ComponentName recoComponent = new ComponentName("package1", "class1");
+ final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
+ setNetworkRecoPackageSetting(recoComponent.getPackageName());
+ mockScoreNetworksGranted(recoComponent.getPackageName());
+ // The active component doesn't have an open wifi activity so the migration shouldn't
+ // set USE_OPEN_WIFI_PACKAGE.
+ mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+ null /*useOpenWifiActivityPackage*/);
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP))
+ .thenReturn(enableUseOpenWifiComponent.getPackageName());
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.USE_OPEN_WIFI_PACKAGE)).thenReturn(null);
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade, never()).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE), anyString());
+ verify(mSettingsFacade).putString(eq(mMockContext),
+ eq(Settings.Global.NETWORK_SCORER_APP), eq(null));
+ }
+
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_packageMismatch_activity()
+ throws Exception {
+ final ComponentName recoComponent = new ComponentName("package1", "class1");
+ final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
+ setNetworkRecoPackageSetting(recoComponent.getPackageName());
+ mockScoreNetworksGranted(recoComponent.getPackageName());
+ mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+ enableUseOpenWifiComponent.getPackageName());
+ mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
+ // The older network scorer app setting doesn't match the new use open wifi activity package
+ // so the migration shouldn't set USE_OPEN_WIFI_PACKAGE.
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP))
+ .thenReturn(enableUseOpenWifiComponent.getPackageName() + ".diff");
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.USE_OPEN_WIFI_PACKAGE)).thenReturn(null);
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade, never()).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE), anyString());
+ verify(mSettingsFacade).putString(eq(mMockContext),
+ eq(Settings.Global.NETWORK_SCORER_APP), eq(null));
+ }
+
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_packageMismatch_service()
+ throws Exception {
+ final ComponentName recoComponent = new ComponentName("package1", "class1");
+ final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
+ setNetworkRecoPackageSetting(recoComponent.getPackageName());
+ mockScoreNetworksGranted(recoComponent.getPackageName());
+ mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+ enableUseOpenWifiComponent.getPackageName());
+ mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
+ // The older network scorer app setting doesn't match the active package so the migration
+ // shouldn't set USE_OPEN_WIFI_PACKAGE.
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP))
+ .thenReturn(recoComponent.getPackageName() + ".diff");
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.USE_OPEN_WIFI_PACKAGE)).thenReturn(null);
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade, never()).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE), anyString());
+ verify(mSettingsFacade).putString(eq(mMockContext),
+ eq(Settings.Global.NETWORK_SCORER_APP), eq(null));
+ }
+
+ @Test
+ public void testMigrateNetworkScorerAppSettingIfNeeded_packageMatch_activity()
+ throws Exception {
+ final ComponentName recoComponent = new ComponentName("package1", "class1");
+ final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
+ setNetworkRecoPackageSetting(recoComponent.getPackageName());
+ mockScoreNetworksGranted(recoComponent.getPackageName());
+ mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+ enableUseOpenWifiComponent.getPackageName());
+ mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
+ // Old setting matches the new activity package, migration should happen.
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.NETWORK_SCORER_APP))
+ .thenReturn(enableUseOpenWifiComponent.getPackageName());
+ when(mSettingsFacade.getString(mMockContext,
+ Settings.Global.USE_OPEN_WIFI_PACKAGE)).thenReturn(null);
+
+ mNetworkScorerAppManager.migrateNetworkScorerAppSettingIfNeeded();
+
+ verify(mSettingsFacade).putString(eq(mMockContext),
+ eq(Settings.Global.USE_OPEN_WIFI_PACKAGE),
+ eq(enableUseOpenWifiComponent.getPackageName()));
+ verify(mSettingsFacade).putString(eq(mMockContext),
+ eq(Settings.Global.NETWORK_SCORER_APP), eq(null));
+ }
+
private void setRecommendationsEnabledSetting(int value) {
when(mSettingsFacade.getInt(eq(mMockContext),
eq(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED), anyInt())).thenReturn(value);