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

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

Hides Screen Attention setting on unsupported devices

Bug: 170971817
Test: make RunSettingsRoboTests
Change-Id: I8aa7882be9a1ae483e8e7500059a18859b20d42b
parent 167362d0
Loading
Loading
Loading
Loading
+29 −13
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ import com.android.settingslib.search.SearchIndexableRaw;
import com.android.settingslib.widget.CandidateInfo;
import com.android.settingslib.widget.FooterPreference;

import com.google.common.annotations.VisibleForTesting;

import java.util.ArrayList;
import java.util.List;

@@ -60,8 +62,11 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
    private CharSequence[] mInitialEntries;
    private CharSequence[] mInitialValues;
    private FooterPreference mPrivacyPreference;
    private AdaptiveSleepPreferenceController mAdaptiveSleepController;
    private AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController;
    @VisibleForTesting
    AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController;

    @VisibleForTesting
    AdaptiveSleepPreferenceController mAdaptiveSleepController;

    @Override
    public void onCreate(Bundle icicle) {
@@ -87,15 +92,17 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements

    @Override
    protected List<? extends CandidateInfo> getCandidates() {
        final Context context = getContext();
        final List<CandidateInfo> candidates = new ArrayList<>();
        final long maxTimeout = getMaxScreenTimeout(context);
        final long maxTimeout = getMaxScreenTimeout(getContext());
        if (mInitialValues != null) {
            for (int i = 0; i < mInitialValues.length; ++i) {
                if (Long.parseLong(mInitialValues[i].toString()) <= maxTimeout) {
                candidates.add(
                        new TimeoutCandidateInfo(mInitialEntries[i], mInitialValues[i].toString(),
                                true));
                    candidates.add(new TimeoutCandidateInfo(mInitialEntries[i],
                            mInitialValues[i].toString(), true));
                }
            }
        } else {
            Log.e(TAG, "Screen timeout options do not exist.");
        }
        return candidates;
    }
@@ -125,10 +132,12 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
            screen.addPreference(pref);
        }

        if (isScreenAttentionAvailable()) {
            mAdaptiveSleepPermissionController.addToScreen(screen);
            mAdaptiveSleepController.addToScreen(screen);
            screen.addPreference(mPrivacyPreference);
        }
    }

    @Override
    protected String getDefaultKey() {
@@ -156,12 +165,19 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
        return R.string.help_url_adaptive_sleep;
    }

    private boolean isScreenAttentionAvailable() {
        return getResources().getBoolean(
                com.android.internal.R.bool.config_adaptive_sleep_available);
    }

    private Long getMaxScreenTimeout(Context context) {
        if (context == null) {
            return Long.MAX_VALUE;
        }
        final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
        if (dpm == null) {
            return Long.MAX_VALUE;
        }

        final RestrictedLockUtils.EnforcedAdmin admin =
                RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context);
        if (admin != null) {
+40 −0
Original line number Diff line number Diff line
@@ -23,14 +23,19 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import static com.google.common.truth.Truth.assertThat;

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 android.app.admin.DevicePolicyManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.provider.SearchIndexableResource;
import android.provider.Settings;

import androidx.preference.PreferenceScreen;

import com.android.settings.R;

import org.junit.Before;
@@ -54,6 +59,15 @@ public class ScreenTimeoutSettingsTest {
    @Mock
    private Resources mResources;

    @Mock
    private PreferenceScreen mPreferenceScreen;

    @Mock
    AdaptiveSleepPermissionPreferenceController mPermissionPreferenceController;

    @Mock
    AdaptiveSleepPreferenceController mAdaptiveSleepPreferenceController;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
@@ -63,8 +77,17 @@ public class ScreenTimeoutSettingsTest {

        doReturn(TIMEOUT_ENTRIES).when(mResources).getStringArray(R.array.screen_timeout_entries);
        doReturn(TIMEOUT_VALUES).when(mResources).getStringArray(R.array.screen_timeout_entries);
        doReturn(true).when(mResources).getBoolean(
                com.android.internal.R.bool.config_adaptive_sleep_available);

        doReturn(null).when(mContext).getSystemService(DevicePolicyManager.class);

        doReturn(mResources).when(mSettings).getResources();
        doReturn(mContext).when(mSettings).getContext();
        doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen();

        mSettings.mAdaptiveSleepController = mAdaptiveSleepPreferenceController;
        mSettings.mAdaptiveSleepPermissionController = mPermissionPreferenceController;
    }

    @Test
@@ -87,6 +110,23 @@ public class ScreenTimeoutSettingsTest {
        assertThat(key).isEqualTo(TIMEOUT_VALUES[1]);
    }

    @Test
    public void updateCandidates_screenAttentionAvailable_showAdaptiveSleepPreference() {
        mSettings.updateCandidates();

        verify(mSettings.mAdaptiveSleepController).addToScreen(mPreferenceScreen);
    }

    @Test
    public void updateCandidates_screenAttentionNotAvailable_doNotShowAdaptiveSleepPreference() {
        doReturn(false).when(mResources).getBoolean(
                com.android.internal.R.bool.config_adaptive_sleep_available);

        mSettings.updateCandidates();

        verify(mSettings.mAdaptiveSleepController, never()).addToScreen(mPreferenceScreen);
    }

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