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

Commit aed7559a authored by Yi Jiang's avatar Yi Jiang
Browse files

Adds 'options disabled by admin' icon in timeout settings.

Bug:171257091
Test: atest ScreenTimeoutSettingsTest

Change-Id: Id0411b009a2d4dc0e4f6abf2825580ca42ad8442
parent 2441bfc0
Loading
Loading
Loading
Loading
+36 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.UserHandle;
import android.provider.Settings;
import android.util.Log;

import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
@@ -59,9 +60,17 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
    /** If there is no setting in the provider, use this. */
    public static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;

    private static final int DEFAULT_ORDER_OF_LOWEST_PREFERENCE = Integer.MAX_VALUE - 1;

    private CharSequence[] mInitialEntries;
    private CharSequence[] mInitialValues;
    private FooterPreference mPrivacyPreference;

    @VisibleForTesting
    RestrictedLockUtils.EnforcedAdmin mAdmin;
    @VisibleForTesting
    Preference mDisableOptionsPreference;

    @VisibleForTesting
    AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController;

@@ -88,6 +97,15 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
        mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy);
        mPrivacyPreference.setSelectable(false);
        mPrivacyPreference.setLayoutResource(R.layout.preference_footer);

        mDisableOptionsPreference = new FooterPreference(context);
        mDisableOptionsPreference.setLayoutResource(R.layout.preference_footer);
        mDisableOptionsPreference.setTitle(R.string.admin_disabled_other_options);
        mDisableOptionsPreference.setIcon(R.drawable.ic_info_outline_24dp);

        // The 'disabled by admin' preference should always be at the end of the setting page.
        mDisableOptionsPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE);
        mPrivacyPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE - 1);
    }

    @Override
@@ -120,6 +138,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
        final PreferenceScreen screen = getPreferenceScreen();
        screen.removeAll();

        if (mAdmin != null) {
            mDisableOptionsPreference.setOnPreferenceClickListener(p -> {
                RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin);
                return true;
            });
            screen.addPreference(mDisableOptionsPreference);
        }

        final List<? extends CandidateInfo> candidateList = getCandidates();
        if (candidateList == null) {
            return;
@@ -137,6 +163,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
            mAdaptiveSleepController.addToScreen(screen);
            screen.addPreference(mPrivacyPreference);
        }

        if (mAdmin != null) {
            mDisableOptionsPreference.setOnPreferenceClickListener(p -> {
                RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin);
                return true;
            });
            screen.addPreference(mDisableOptionsPreference);
        }
    }

    @Override
@@ -178,9 +212,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
        if (dpm == null) {
            return Long.MAX_VALUE;
        }
        final RestrictedLockUtils.EnforcedAdmin admin =
                RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context);
        if (admin != null) {
        mAdmin = RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context);
        if (mAdmin != null) {
            return dpm.getMaximumTimeToLock(null /* admin */, UserHandle.myUserId());
        }
        return Long.MAX_VALUE;
+16 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext;

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

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -34,9 +35,11 @@ import android.content.res.Resources;
import android.provider.SearchIndexableResource;
import android.provider.Settings;

import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settingslib.RestrictedLockUtils;

import org.junit.Before;
import org.junit.Test;
@@ -68,6 +71,9 @@ public class ScreenTimeoutSettingsTest {
    @Mock
    AdaptiveSleepPreferenceController mAdaptiveSleepPreferenceController;

    @Mock
    Preference mDisableOptionsPreference;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
@@ -127,6 +133,16 @@ public class ScreenTimeoutSettingsTest {
        verify(mSettings.mAdaptiveSleepController, never()).addToScreen(mPreferenceScreen);
    }

    @Test
    public void updateCandidates_enforcedAdmin_showDisabledByAdminPreference() {
        mSettings.mAdmin = new RestrictedLockUtils.EnforcedAdmin();
        mSettings.mDisableOptionsPreference = mDisableOptionsPreference;

        mSettings.updateCandidates();

        verify(mPreferenceScreen, atLeast(1)).addPreference(mDisableOptionsPreference);
    }

    @Test
    public void setDefaultKey_controlCurrentScreenTimeout() {
        mSettings.setDefaultKey(TIMEOUT_VALUES[0]);