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

Commit 60607da1 authored by jackqdyulei's avatar jackqdyulei
Browse files

Update summary when toggle background activity

In previous code, it didn't update summary when preference is changed.
This cl adds it and also updates the title for Battery Optimization.

Bug: 37163617
Test: RunSettingsRoboTests
Change-Id: I276d9a267379104794998a605a8e258660dcf350
parent c4f08120
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@

        <Preference
            android:key="battery_optimization"
            android:title="@string/battery_detail_background"
            android:title="@string/high_power_apps"
            android:summary="@string/high_power_off"
            android:selectable="true"/>

+18 −4
Original line number Diff line number Diff line
@@ -55,16 +55,14 @@ public class BackgroundActivityPreferenceController extends PreferenceController
    public void updateState(Preference preference) {
        final int mode = mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mTargetPackage);

        if (mode == AppOpsManager.MODE_ERRORED) {
            preference.setEnabled(false);
            preference.setSummary(R.string.background_activity_summary_disabled);
        } else {
            final boolean checked = mode != AppOpsManager.MODE_IGNORED;
            ((SwitchPreference) preference).setChecked(checked);
            preference.setSummary(checked ? R.string.background_activity_summary_on
                    : R.string.background_activity_summary_off);
        }

        updateSummary(preference);
    }

    @Override
@@ -92,6 +90,8 @@ public class BackgroundActivityPreferenceController extends PreferenceController
        boolean switchOn = (Boolean) newValue;
        mAppOpsManager.setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mTargetPackage,
                switchOn ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);

        updateSummary(preference);
        return true;
    }

@@ -113,4 +113,18 @@ public class BackgroundActivityPreferenceController extends PreferenceController

        return false;
    }

    @VisibleForTesting
    void updateSummary(Preference preference) {
        final int mode = mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mTargetPackage);

        if (mode == AppOpsManager.MODE_ERRORED) {
            preference.setSummary(R.string.background_activity_summary_disabled);
        } else {
            final boolean checked = mode != AppOpsManager.MODE_IGNORED;
            preference.setSummary(checked ? R.string.background_activity_summary_on
                    : R.string.background_activity_summary_off);
        }
    }
}
+56 −7
Original line number Diff line number Diff line
@@ -23,7 +23,9 @@ import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v14.preference.SwitchPreference;

import com.android.settings.R;
import com.android.settings.TestConfig;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -31,9 +33,12 @@ import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -54,17 +59,18 @@ public class BackgroundActivityPreferenceControllerTest {
    @Mock
    private AppOpsManager mAppOpsManager;
    @Mock
    private SwitchPreference mPreference;
    @Mock
    private ApplicationInfo mHighApplicationInfo;
    @Mock
    private ApplicationInfo mLowApplicationInfo;
    private BackgroundActivityPreferenceController mController;
    private SwitchPreference mPreference;
    private Context mShadowContext;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        mShadowContext = RuntimeEnvironment.application;
        when(mContext.getPackageManager()).thenReturn(mPackageManager);
        when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager);
        when(mPackageManager.getPackagesForUid(UID_NORMAL)).thenReturn(PACKAGES_NORMAL);
@@ -77,7 +83,8 @@ public class BackgroundActivityPreferenceControllerTest {
        mHighApplicationInfo.targetSdkVersion = Build.VERSION_CODES.O;
        mLowApplicationInfo.targetSdkVersion = Build.VERSION_CODES.L;

        mController = new BackgroundActivityPreferenceController(mContext, UID_NORMAL);
        mPreference = new SwitchPreference(mShadowContext);
        mController = spy(new BackgroundActivityPreferenceController(mContext, UID_NORMAL));
        mController.isAvailable();
    }

@@ -87,14 +94,16 @@ public class BackgroundActivityPreferenceControllerTest {

        verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_NORMAL,
                mController.getTargetPackage(), AppOpsManager.MODE_ALLOWED);
        verify(mController).updateSummary(mPreference);
    }

    @Test
    public void testOnPreferenceChange_TurnOffCheck_MethodInvoked() {
        mController.onPreferenceChange(null, false);
        mController.onPreferenceChange(mPreference, false);

        verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_NORMAL,
                mController.getTargetPackage(), AppOpsManager.MODE_IGNORED);
        verify(mController).updateSummary(mPreference);
    }

    @Test
@@ -105,7 +114,8 @@ public class BackgroundActivityPreferenceControllerTest {

        mController.updateState(mPreference);

        verify(mPreference).setChecked(true);
        assertThat(mPreference.isChecked()).isTrue();
        verify(mController).updateSummary(mPreference);
    }

    @Test
@@ -116,7 +126,46 @@ public class BackgroundActivityPreferenceControllerTest {

        mController.updateState(mPreference);

        verify(mPreference).setChecked(false);
        assertThat(mPreference.isChecked()).isFalse();
        verify(mController).updateSummary(mPreference);
    }

    @Test
    public void testUpdateSummary_modeError_showSummaryDisabled() {
        when(mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_NORMAL, LOW_SDK_PACKAGE))
                .thenReturn(AppOpsManager.MODE_ERRORED);
        final CharSequence expectedSummary = mShadowContext.getText(
                R.string.background_activity_summary_disabled);
        mController.updateSummary(mPreference);

        assertThat(mPreference.getSummary()).isEqualTo(expectedSummary);
    }

    @Test
    public void testUpdateSummary_modeDefault_showSummaryOn() {
        when(mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_NORMAL, LOW_SDK_PACKAGE))
                .thenReturn(AppOpsManager.MODE_DEFAULT);
        final CharSequence expectedSummary = mShadowContext.getText(
                R.string.background_activity_summary_on);

        mController.updateSummary(mPreference);

        assertThat(mPreference.getSummary()).isEqualTo(expectedSummary);
    }

    @Test
    public void testUpdateSummary_modeIgnored_showSummaryOff() {
        when(mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_NORMAL, LOW_SDK_PACKAGE))
                .thenReturn(AppOpsManager.MODE_IGNORED);
        final CharSequence expectedSummary = mShadowContext.getText(
                R.string.background_activity_summary_off);

        mController.updateSummary(mPreference);

        assertThat(mPreference.getSummary()).isEqualTo(expectedSummary);
    }

    @Test
@@ -144,6 +193,6 @@ public class BackgroundActivityPreferenceControllerTest {

        assertThat(available).isTrue();
        // Should get status from LOW_SDK_PACKAGE
        verify(mPreference).setChecked(true);
        assertThat(mPreference.isChecked()).isTrue();
    }
}