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

Commit fd0c472b authored by jackqdyulei's avatar jackqdyulei
Browse files

Disable bg restriction for "Disallow apps control"

Use RestrictedPreference so it could handle it automatically

Change-Id: Ibf58934639677b88316366b2e00790f9556d0966
Fixes: 64474641
Test: Robotests
parent b9b4a688
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -15,7 +15,9 @@
  limitations under the License.
  -->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto">

    <com.android.settings.applications.LayoutPreference
        android:key="header_view"
@@ -30,10 +32,11 @@
    <PreferenceCategory
        android:title="@string/battery_detail_manage_title">

        <Preference
        <com.android.settingslib.RestrictedPreference
            android:key="background_activity"
            android:title="@string/background_activity_title"
            android:selectable="true"/>
            android:selectable="true"
            settings:userRestriction="no_control_apps"/>

        <Preference
            android:key="battery_optimization"
+6 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.settings.fuelgauge.batterytip.BatteryTipDialogFragment;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;

@@ -76,6 +77,11 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo

    @Override
    public void updateState(Preference preference) {
        final RestrictedPreference restrictedPreference = (RestrictedPreference) preference;
        if (restrictedPreference.isDisabledByAdmin()) {
            // If disabled, let RestrictedPreference handle it and do nothing here
            return;
        }
        final int mode = mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mTargetPackage);
        final boolean whitelisted = mPowerWhitelistBackend.isWhitelisted(mTargetPackage);
+23 −12
Original line number Diff line number Diff line
@@ -17,10 +17,13 @@
package com.android.settings.fuelgauge;

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

import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -38,6 +41,7 @@ import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;

import org.junit.Before;
@@ -49,8 +53,6 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import androidx.preference.Preference;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, ShadowFragment.class})
public class BackgroundActivityPreferenceControllerTest {
@@ -80,7 +82,7 @@ public class BackgroundActivityPreferenceControllerTest {
    @Mock
    private PowerWhitelistBackend mPowerWhitelistBackend;
    private BackgroundActivityPreferenceController mController;
    private Preference mPreference;
    private RestrictedPreference mPreference;
    private Context mShadowContext;
    private BatteryUtils mBatteryUtils;

@@ -109,7 +111,7 @@ public class BackgroundActivityPreferenceControllerTest {
        mBatteryUtils = spy(new BatteryUtils(mShadowContext));
        doNothing().when(mBatteryUtils).setForceAppStandby(anyInt(), anyString(), anyInt());

        mPreference = new Preference(mShadowContext);
        mPreference = spy(new RestrictedPreference(mShadowContext, null /* attrs */));
        mPreference.setKey(BackgroundActivityPreferenceController.KEY_BACKGROUND_ACTIVITY);
        mController = spy(new BackgroundActivityPreferenceController(
                mContext, mFragment, UID_LOW_SDK, LOW_SDK_PACKAGE, mPowerWhitelistBackend));
@@ -118,7 +120,7 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testHandlePreferenceTreeClick_restrictApp_showDialog() {
    public void handlePreferenceTreeClick_restrictApp_showDialog() {
        doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager)
                .checkOpNoThrow(anyInt(), anyInt(), anyString());

@@ -128,7 +130,7 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testHandlePreferenceTreeClick_unRestrictApp_showDialog() {
    public void handlePreferenceTreeClick_unRestrictApp_showDialog() {
        doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager)
                .checkOpNoThrow(anyInt(), anyInt(), anyString());

@@ -138,7 +140,7 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testUpdateState_noError_setEnabled() {
    public void updateState_noError_setEnabled() {
        when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
                LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_ALLOWED);

@@ -149,7 +151,7 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testUpdateState_whitelisted() {
    public void updateState_whitelisted() {
        when(mPowerWhitelistBackend.isWhitelisted(LOW_SDK_PACKAGE)).thenReturn(true);
        mController.updateState(mPreference);
        assertThat(mPreference.isEnabled()).isFalse();
@@ -158,7 +160,16 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testUpdateSummary_modeError_showSummaryDisabled() {
    public void updateState_disabledByAdmin_doNothing() {
        doReturn(true).when(mPreference).isDisabledByAdmin();

        mController.updateState(mPreference);

        verify(mPreference, never()).setEnabled(anyBoolean());
    }

    @Test
    public void updateSummary_modeError_showSummaryDisabled() {
        when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
                LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_ERRORED);
        final CharSequence expectedSummary = mShadowContext.getText(
@@ -169,7 +180,7 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testUpdateSummary_modeDefault_showNotRestricted() {
    public void updateSummary_modeDefault_showNotRestricted() {
        when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
                LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_DEFAULT);

@@ -179,7 +190,7 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testUpdateSummary_modeIgnored_showRestricted() {
    public void updateSummary_modeIgnored_showRestricted() {
        when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
                LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED);

@@ -189,7 +200,7 @@ public class BackgroundActivityPreferenceControllerTest {
    }

    @Test
    public void testIsAvailable_ReturnTrue() {
    public void isAvailable_ReturnTrue() {
        assertThat(mController.isAvailable()).isTrue();
    }
}