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

Commit 8d519f82 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update summary when toggle background activity" into oc-dev

parents 0f34680f 60607da1
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();
    }
}