diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java index b5186462b3b..b187c876ac8 100644 --- a/src/com/android/settings/display/ScreenTimeoutSettings.java +++ b/src/com/android/settings/display/ScreenTimeoutSettings.java @@ -26,8 +26,13 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; import android.provider.Settings; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.style.ClickableSpan; import android.util.Log; +import android.view.View; +import androidx.annotation.NonNull; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; @@ -97,15 +102,6 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy); mPrivacyPreference.setSelectable(false); mPrivacyPreference.setLayoutResource(R.layout.preference_footer); - - mDisableOptionsPreference = new FooterPreference(context); - mDisableOptionsPreference.setLayoutResource(R.layout.preference_footer); - mDisableOptionsPreference.setTitle(R.string.admin_disabled_other_options); - mDisableOptionsPreference.setIcon(R.drawable.ic_info_outline_24dp); - - // The 'disabled by admin' preference should always be at the end of the setting page. - mDisableOptionsPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE); - mPrivacyPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE - 1); } @Override @@ -138,14 +134,6 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements final PreferenceScreen screen = getPreferenceScreen(); screen.removeAll(); - if (mAdmin != null) { - mDisableOptionsPreference.setOnPreferenceClickListener(p -> { - RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin); - return true; - }); - screen.addPreference(mDisableOptionsPreference); - } - final List candidateList = getCandidates(); if (candidateList == null) { return; @@ -165,14 +153,43 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements } if (mAdmin != null) { - mDisableOptionsPreference.setOnPreferenceClickListener(p -> { - RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin); - return true; - }); + setupDisabledFooterPreference(); screen.addPreference(mDisableOptionsPreference); } } + @VisibleForTesting + void setupDisabledFooterPreference() { + final String textDisabledByAdmin = getResources().getString( + R.string.admin_disabled_other_options); + final String textMoreDetails = getResources().getString(R.string.admin_more_details); + + final SpannableString spannableString = new SpannableString( + textDisabledByAdmin + System.lineSeparator() + textMoreDetails); + final ClickableSpan clickableSpan = new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin); + } + }; + + if (textDisabledByAdmin != null && textMoreDetails != null) { + spannableString.setSpan(clickableSpan, textDisabledByAdmin.length() + 1, + textDisabledByAdmin.length() + textMoreDetails.length() + 1, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + + mDisableOptionsPreference = new FooterPreference(getContext()); + mDisableOptionsPreference.setLayoutResource(R.layout.preference_footer); + mDisableOptionsPreference.setTitle(spannableString); + mDisableOptionsPreference.setSelectable(false); + mDisableOptionsPreference.setIcon(R.drawable.ic_info_outline_24dp); + + // The 'disabled by admin' preference should always be at the end of the setting page. + mDisableOptionsPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE); + mPrivacyPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE - 1); + } + @Override protected String getDefaultKey() { return getCurrentSystemScreenTimeout(getContext()); diff --git a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java index efc45e02fe8..f0bf95c38fd 100644 --- a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java +++ b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java @@ -23,6 +23,7 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -138,6 +139,7 @@ public class ScreenTimeoutSettingsTest { public void updateCandidates_enforcedAdmin_showDisabledByAdminPreference() { mSettings.mAdmin = new RestrictedLockUtils.EnforcedAdmin(); mSettings.mDisableOptionsPreference = mDisableOptionsPreference; + doNothing().when(mSettings).setupDisabledFooterPreference(); mSettings.updateCandidates();