Merge "Hides Screen Attention setting on unsupported devices"
This commit is contained in:
@@ -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,16 +92,18 @@ 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());
|
||||||
|
if (mInitialValues != null) {
|
||||||
for (int i = 0; i < mInitialValues.length; ++i) {
|
for (int i = 0; i < mInitialValues.length; ++i) {
|
||||||
if (Long.parseLong(mInitialValues[i].toString()) <= maxTimeout) {
|
if (Long.parseLong(mInitialValues[i].toString()) <= maxTimeout) {
|
||||||
candidates.add(
|
candidates.add(new TimeoutCandidateInfo(mInitialEntries[i],
|
||||||
new TimeoutCandidateInfo(mInitialEntries[i], mInitialValues[i].toString(),
|
mInitialValues[i].toString(), true));
|
||||||
true));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "Screen timeout options do not exist.");
|
||||||
|
}
|
||||||
return candidates;
|
return candidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,10 +132,12 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
screen.addPreference(pref);
|
screen.addPreference(pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isScreenAttentionAvailable()) {
|
||||||
mAdaptiveSleepPermissionController.addToScreen(screen);
|
mAdaptiveSleepPermissionController.addToScreen(screen);
|
||||||
mAdaptiveSleepController.addToScreen(screen);
|
mAdaptiveSleepController.addToScreen(screen);
|
||||||
screen.addPreference(mPrivacyPreference);
|
screen.addPreference(mPrivacyPreference);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getDefaultKey() {
|
protected String getDefaultKey() {
|
||||||
@@ -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) {
|
||||||
|
@@ -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]);
|
||||||
|
Reference in New Issue
Block a user