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

Commit 942e5980 authored by Yi Jiang's avatar Yi Jiang Committed by Android (Google) Code Review
Browse files

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

parents d05ee585 aed7559a
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]);