diff --git a/res/values/config.xml b/res/values/config.xml index 82e185c8371..8efa6b2ab49 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -171,4 +171,7 @@ + + + 1800000 diff --git a/res/values/strings.xml b/res/values/strings.xml index c80ba95735f..ad946148af8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5828,9 +5828,6 @@ Used in SetupWizard for XLarge screen [CHAR LIMIT=20] --> Network details - - Select Time Zone - Sync enabled diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml index edda1ba66d9..e8af64c374c 100644 --- a/res/xml/date_time_prefs.xml +++ b/res/xml/date_time_prefs.xml @@ -58,7 +58,7 @@ diff --git a/src/com/android/settings/display/TimeoutListPreference.java b/src/com/android/settings/display/TimeoutListPreference.java index f9a731d32eb..5ed427fb252 100644 --- a/src/com/android/settings/display/TimeoutListPreference.java +++ b/src/com/android/settings/display/TimeoutListPreference.java @@ -26,6 +26,7 @@ import android.util.AttributeSet; import android.util.Log; import android.view.View; +import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog.Builder; import com.android.settings.R; @@ -33,18 +34,18 @@ import com.android.settings.RestrictedListPreference; import com.android.settingslib.RestrictedLockUtils; import java.util.ArrayList; +import java.util.List; public class TimeoutListPreference extends RestrictedListPreference { private static final String TAG = "TimeoutListPreference"; private EnforcedAdmin mAdmin; - private final CharSequence[] mInitialEntries; - private final CharSequence[] mInitialValues; + private CharSequence[] mInitialEntries; + private CharSequence[] mInitialValues; public TimeoutListPreference(Context context, AttributeSet attrs) { super(context, attrs); - mInitialEntries = getEntries(); - mInitialValues = getEntryValues(); + updateInitialValues(); } @Override @@ -65,13 +66,8 @@ public class TimeoutListPreference extends RestrictedListPreference { if (mAdmin != null) { View footerView = dialog.findViewById(R.id.admin_disabled_other_options); footerView.findViewById(R.id.admin_more_details_link).setOnClickListener( - new View.OnClickListener() { - @Override - public void onClick(View view) { - RestrictedLockUtils.sendShowAdminSupportDetailsIntent( - getContext(), mAdmin); - } - }); + view -> RestrictedLockUtils.sendShowAdminSupportDetailsIntent( + getContext(), mAdmin)); } } @@ -89,8 +85,8 @@ public class TimeoutListPreference extends RestrictedListPreference { maxTimeout = Long.MAX_VALUE; } - ArrayList revisedEntries = new ArrayList(); - ArrayList revisedValues = new ArrayList(); + final ArrayList revisedEntries = new ArrayList<>(); + final ArrayList revisedValues = new ArrayList<>(); for (int i = 0; i < mInitialValues.length; ++i) { long timeout = Long.parseLong(mInitialValues[i].toString()); if (timeout <= maxTimeout) { @@ -101,7 +97,7 @@ public class TimeoutListPreference extends RestrictedListPreference { // If there are no possible options for the user, then set this preference as disabled // by admin, otherwise remove the padlock in case it was set earlier. - if (revisedValues.size() == 0) { + if (revisedValues.isEmpty()) { setDisabledByAdmin(admin); return; } else { @@ -117,7 +113,7 @@ public class TimeoutListPreference extends RestrictedListPreference { setValue(String.valueOf(userPreference)); } else if (revisedValues.size() > 0 && Long.parseLong(revisedValues.get(revisedValues.size() - 1).toString()) - == maxTimeout) { + == maxTimeout) { // If the last one happens to be the same as the max timeout, select that setValue(String.valueOf(maxTimeout)); } else { @@ -128,4 +124,36 @@ public class TimeoutListPreference extends RestrictedListPreference { } } } + + @VisibleForTesting + void updateInitialValues() { + // Read default list of candidate values. + final CharSequence[] entries = getEntries(); + final CharSequence[] values = getEntryValues(); + // Filter out values based on config + final List revisedEntries = new ArrayList<>(); + final List revisedValues = new ArrayList<>(); + final long maxTimeout = getContext().getResources().getInteger( + R.integer.max_lock_after_timeout_ms); + if (entries == null || values == null) { + return; + } + Log.d(TAG, "max timeout: " + maxTimeout); + for (int i = 0; i < values.length; ++i) { + long timeout = Long.parseLong(values[i].toString()); + if (timeout <= maxTimeout) { + Log.d(TAG, "keeping timeout: " + values[i]); + revisedEntries.add(entries[i]); + revisedValues.add(values[i]); + } else { + Log.d(TAG, "Dropping timeout: " + values[i]); + } + } + + // Store final candidates in initial value lists. + mInitialEntries = revisedEntries.toArray(new CharSequence[0]); + setEntries(mInitialEntries); + mInitialValues = revisedValues.toArray(new CharSequence[0]); + setEntryValues(mInitialValues); + } } diff --git a/src/com/android/settings/display/TimeoutPreferenceController.java b/src/com/android/settings/display/TimeoutPreferenceController.java index 60b7e24b85b..c1c50690a0c 100644 --- a/src/com/android/settings/display/TimeoutPreferenceController.java +++ b/src/com/android/settings/display/TimeoutPreferenceController.java @@ -13,8 +13,6 @@ */ package com.android.settings.display; -import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; - import android.app.admin.DevicePolicyManager; import android.content.Context; import android.os.UserHandle; @@ -60,7 +58,7 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im public void updateState(Preference preference) { final TimeoutListPreference timeoutListPreference = (TimeoutListPreference) preference; final long currentTimeout = Settings.System.getLong(mContext.getContentResolver(), - SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE); + Settings.System.SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE); timeoutListPreference.setValue(String.valueOf(currentTimeout)); final DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); @@ -86,7 +84,8 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im public boolean onPreferenceChange(Preference preference, Object newValue) { try { int value = Integer.parseInt((String) newValue); - Settings.System.putInt(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, value); + Settings.System.putInt(mContext.getContentResolver(), + Settings.System.SCREEN_OFF_TIMEOUT, value); updateTimeoutPreferenceDescription((TimeoutListPreference) preference, value); } catch (NumberFormatException e) { Log.e(TAG, "could not persist screen timeout setting", e); @@ -94,7 +93,7 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im return true; } - public static CharSequence getTimeoutDescription( + private static CharSequence getTimeoutDescription( long currentTimeout, CharSequence[] entries, CharSequence[] values) { if (currentTimeout < 0 || entries == null || values == null || values.length != entries.length) { diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index 101a6b813f4..59028d3daf8 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -88,4 +88,7 @@ test@test.test + + + 1700000 diff --git a/tests/robotests/src/com/android/settings/display/TimeoutListPreferenceTest.java b/tests/robotests/src/com/android/settings/display/TimeoutListPreferenceTest.java index 55fcdacea51..7b67f0f54b1 100644 --- a/tests/robotests/src/com/android/settings/display/TimeoutListPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/display/TimeoutListPreferenceTest.java @@ -17,11 +17,11 @@ package com.android.settings.display; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.mock; import static org.robolectric.RuntimeEnvironment.application; import android.util.AttributeSet; +import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settingslib.RestrictedLockUtils; @@ -69,4 +69,23 @@ public class TimeoutListPreferenceTest { // should set to largest allowed value, which is 5 minute assertThat(mPreference.getValue()).isEqualTo("300000"); } + + @Test + @Config(qualifiers = "mcc999") + public void newInstance_hasLowTimeoutConfig_shouldRemoveLongTimeouts() { + final AttributeSet attributeSet = Robolectric.buildAttributeSet().build(); + final TimeoutListPreference pref = new TimeoutListPreference(application, attributeSet); + final long maxTimeout = application.getResources().getInteger( + R.integer.max_lock_after_timeout_ms); + pref.setEntries(R.array.screen_timeout_entries); + pref.setEntryValues(R.array.screen_timeout_values); + + pref.updateInitialValues(); + + final CharSequence[] values = pref.getEntryValues(); + for (CharSequence value : values) { + long timeout = Long.parseLong(value.toString()); + assertThat(timeout).isAtMost(maxTimeout); + } + } }