Merge "Hides Screen Attention setting on unsupported devices"

This commit is contained in:
Yi Jiang
2020-10-30 03:45:34 +00:00
committed by Android (Google) Code Review
2 changed files with 69 additions and 13 deletions

View File

@@ -44,6 +44,8 @@ import com.android.settingslib.search.SearchIndexableRaw;
import com.android.settingslib.widget.CandidateInfo; import com.android.settingslib.widget.CandidateInfo;
import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.FooterPreference;
import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -60,8 +62,11 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
private CharSequence[] mInitialEntries; private CharSequence[] mInitialEntries;
private CharSequence[] mInitialValues; private CharSequence[] mInitialValues;
private FooterPreference mPrivacyPreference; private FooterPreference mPrivacyPreference;
private AdaptiveSleepPreferenceController mAdaptiveSleepController; @VisibleForTesting
private AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController; AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController;
@VisibleForTesting
AdaptiveSleepPreferenceController mAdaptiveSleepController;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
@@ -87,15 +92,17 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
@Override @Override
protected List<? extends CandidateInfo> getCandidates() { protected List<? extends CandidateInfo> getCandidates() {
final Context context = getContext();
final List<CandidateInfo> candidates = new ArrayList<>(); final List<CandidateInfo> candidates = new ArrayList<>();
final long maxTimeout = getMaxScreenTimeout(context); final long maxTimeout = getMaxScreenTimeout(getContext());
for (int i = 0; i < mInitialValues.length; ++i) { if (mInitialValues != null) {
if (Long.parseLong(mInitialValues[i].toString()) <= maxTimeout) { for (int i = 0; i < mInitialValues.length; ++i) {
candidates.add( if (Long.parseLong(mInitialValues[i].toString()) <= maxTimeout) {
new TimeoutCandidateInfo(mInitialEntries[i], mInitialValues[i].toString(), candidates.add(new TimeoutCandidateInfo(mInitialEntries[i],
true)); mInitialValues[i].toString(), true));
}
} }
} else {
Log.e(TAG, "Screen timeout options do not exist.");
} }
return candidates; return candidates;
} }
@@ -125,9 +132,11 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
screen.addPreference(pref); screen.addPreference(pref);
} }
mAdaptiveSleepPermissionController.addToScreen(screen); if (isScreenAttentionAvailable()) {
mAdaptiveSleepController.addToScreen(screen); mAdaptiveSleepPermissionController.addToScreen(screen);
screen.addPreference(mPrivacyPreference); mAdaptiveSleepController.addToScreen(screen);
screen.addPreference(mPrivacyPreference);
}
} }
@Override @Override
@@ -156,12 +165,19 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
return R.string.help_url_adaptive_sleep; 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) { private Long getMaxScreenTimeout(Context context) {
if (context == null) {
return Long.MAX_VALUE;
}
final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
if (dpm == null) { if (dpm == null) {
return Long.MAX_VALUE; return Long.MAX_VALUE;
} }
final RestrictedLockUtils.EnforcedAdmin admin = final RestrictedLockUtils.EnforcedAdmin admin =
RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context); RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context);
if (admin != null) { if (admin != null) {

View File

@@ -23,14 +23,19 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import android.app.admin.DevicePolicyManager;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.provider.Settings; import android.provider.Settings;
import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import org.junit.Before; import org.junit.Before;
@@ -54,6 +59,15 @@ public class ScreenTimeoutSettingsTest {
@Mock @Mock
private Resources mResources; private Resources mResources;
@Mock
private PreferenceScreen mPreferenceScreen;
@Mock
AdaptiveSleepPermissionPreferenceController mPermissionPreferenceController;
@Mock
AdaptiveSleepPreferenceController mAdaptiveSleepPreferenceController;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
@@ -63,8 +77,17 @@ public class ScreenTimeoutSettingsTest {
doReturn(TIMEOUT_ENTRIES).when(mResources).getStringArray(R.array.screen_timeout_entries); doReturn(TIMEOUT_ENTRIES).when(mResources).getStringArray(R.array.screen_timeout_entries);
doReturn(TIMEOUT_VALUES).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(mResources).when(mSettings).getResources();
doReturn(mContext).when(mSettings).getContext(); doReturn(mContext).when(mSettings).getContext();
doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen();
mSettings.mAdaptiveSleepController = mAdaptiveSleepPreferenceController;
mSettings.mAdaptiveSleepPermissionController = mPermissionPreferenceController;
} }
@Test @Test
@@ -87,6 +110,23 @@ public class ScreenTimeoutSettingsTest {
assertThat(key).isEqualTo(TIMEOUT_VALUES[1]); 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 @Test
public void setDefaultKey_controlCurrentScreenTimeout() { public void setDefaultKey_controlCurrentScreenTimeout() {
mSettings.setDefaultKey(TIMEOUT_VALUES[0]); mSettings.setDefaultKey(TIMEOUT_VALUES[0]);