Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7aa0b0d9 authored by Jeremy Joslin's avatar Jeremy Joslin
Browse files

Allow the active scorer to be set to NULL.

Setting the scorer to NULL will disable scoring/recommendations.

Test: runtest frameworks-services -c com.android.server.NetworkScorerAppManagerTest
Bug: 37722313
Change-Id: I8bdc43aa80cc2d6668ffa24389a8e4e9aaf95bd6
parent dd8a71f4
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -208,11 +208,11 @@ public class NetworkScorerAppManager {
     *
     * <p>The caller must have permission to write to {@link Settings.Global}.
     *
     * @param packageName the packageName of the new scorer to use. If null, the scoring app will
     *                    revert back to the configured default. Otherwise, the scorer will only
     *                    be set if it is a valid scorer application.
     * @return true if the scorer was changed, or false if the package is not a valid scorer or
     *         a valid network recommendation provider exists.
     * @param packageName the packageName of the new scorer to use. If null, scoring will be forced
     *                    off, otherwise the scorer will only be set if it is a valid scorer
     *                    application.
     * @return true if the package was a valid scorer (including <code>null</code>) and now
     *         represents the active scorer, false otherwise.
     */
    @VisibleForTesting
    public boolean setActiveScorer(String packageName) {
@@ -223,16 +223,19 @@ public class NetworkScorerAppManager {
            return true;
        }

        if (packageName == null) {
            // revert to the default setting.
            packageName = getDefaultPackageSetting();
        if (TextUtils.isEmpty(packageName)) {
            Log.i(TAG, "Network scorer forced off, was: " + oldPackageName);
            setNetworkRecommendationsPackage(null);
            setNetworkRecommendationsEnabledSetting(
                    NetworkScoreManager.RECOMMENDATIONS_ENABLED_FORCED_OFF);
            return true;
        }

        Log.i(TAG, "Changing network scorer from " + oldPackageName + " to " + packageName);

        // We only make the change if the new package is valid.
        if (getScorer(packageName) != null) {
            Log.i(TAG, "Changing network scorer from " + oldPackageName + " to " + packageName);
            setNetworkRecommendationsPackage(packageName);
            setNetworkRecommendationsEnabledSetting(NetworkScoreManager.RECOMMENDATIONS_ENABLED_ON);
            return true;
        } else {
            Log.w(TAG, "Requested network scorer is not valid: " + packageName);
+39 −17
Original line number Diff line number Diff line
@@ -228,30 +228,23 @@ public class NetworkScorerAppManagerTest {
    }

    @Test
    public void testSetActiveScorer_nullPackage_validDefault() throws Exception {
        String packageName = "package";
        String defaultPackage = "defaultPackage";
        setNetworkRecoPackageSetting(packageName);
        setDefaultNetworkRecommendationPackage(defaultPackage);
        final ComponentName recoComponent = new ComponentName(defaultPackage, "class1");
        mockScoreNetworksGranted(recoComponent.getPackageName());
        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
    public void testSetActiveScorer_nullPackage_currentIsSet() throws Exception {
        setNetworkRecoPackageSetting("package");

        assertTrue(mNetworkScorerAppManager.setActiveScorer(null));
        verify(mSettingsFacade).putString(mMockContext,
                Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, defaultPackage);
                Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, null);
        verify(mSettingsFacade).putInt(mMockContext,
                Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
                NetworkScoreManager.RECOMMENDATIONS_ENABLED_FORCED_OFF);
    }

    @Test
    public void testSetActiveScorer_nullPackage_invalidDefault() throws Exception {
        String packageName = "package";
        String defaultPackage = "defaultPackage";
        setNetworkRecoPackageSetting(packageName);
        setDefaultNetworkRecommendationPackage(defaultPackage);
    public void testSetActiveScorer_nullPackage_currentIsNull() throws Exception {
        setNetworkRecoPackageSetting(null);

        assertFalse(mNetworkScorerAppManager.setActiveScorer(null));
        verify(mSettingsFacade, never()).putString(any(),
                eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), any());
        assertTrue(mNetworkScorerAppManager.setActiveScorer(null));
        verify(mSettingsFacade, never()).putString(any(), any(), any());
    }

    @Test
@@ -266,6 +259,9 @@ public class NetworkScorerAppManagerTest {
        assertTrue(mNetworkScorerAppManager.setActiveScorer(newPackage));
        verify(mSettingsFacade).putString(mMockContext,
                Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, newPackage);
        verify(mSettingsFacade).putInt(mMockContext,
                Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
                NetworkScoreManager.RECOMMENDATIONS_ENABLED_ON);
    }

    @Test
@@ -340,6 +336,32 @@ public class NetworkScorerAppManagerTest {
                NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF);
    }

    @Test
    public void testUpdateState_currentPackageNull_defaultNull() throws Exception {
        setDefaultNetworkRecommendationPackage(null);
        setNetworkRecoPackageSetting(null);

        mNetworkScorerAppManager.updateState();

        verify(mSettingsFacade, never()).putString(any(),
                eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), anyString());
        verify(mSettingsFacade, never()).putInt(any(),
                eq(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED), anyInt());
    }

    @Test
    public void testUpdateState_currentPackageEmpty_defaultEmpty() throws Exception {
        setDefaultNetworkRecommendationPackage("");
        setNetworkRecoPackageSetting("");

        mNetworkScorerAppManager.updateState();

        verify(mSettingsFacade, never()).putString(any(),
                eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), anyString());
        verify(mSettingsFacade, never()).putInt(any(),
                eq(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED), anyInt());
    }

    @Test
    public void testUpdateState_currentPackageNotValid_sameAsDefault() throws Exception {
        String defaultPackage = "defaultPackage";