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

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

Merge "Hides Screen Attention setting on unsupported devices"

parents 35a02a1c a56be2d6
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]);