diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java index b86a070cf84..356c76f47ea 100644 --- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java @@ -138,13 +138,17 @@ public class AdaptiveSleepPreferenceController { } public static int isControllerAvailable(Context context) { - return context.getResources().getBoolean( - com.android.internal.R.bool.config_adaptive_sleep_available) - && isAttentionServiceAvailable(context) + return isAdaptiveSleepSupported(context) ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } + static boolean isAdaptiveSleepSupported(Context context) { + return context.getResources().getBoolean( + com.android.internal.R.bool.config_adaptive_sleep_available) + && isAttentionServiceAvailable(context); + } + private static boolean isAttentionServiceAvailable(Context context) { final PackageManager packageManager = context.getPackageManager(); final String resolvePackage = packageManager.getAttentionServicePackageName(); diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java index b4d120e4e83..f79dc07ee02 100644 --- a/src/com/android/settings/display/ScreenTimeoutSettings.java +++ b/src/com/android/settings/display/ScreenTimeoutSettings.java @@ -313,8 +313,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements } private static boolean isScreenAttentionAvailable(Context context) { - return context.getResources().getBoolean( - com.android.internal.R.bool.config_adaptive_sleep_available); + return AdaptiveSleepPreferenceController.isAdaptiveSleepSupported(context); } private static class TimeoutCandidateInfo extends CandidateInfo { diff --git a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java index abb616a5e3e..41e442997cf 100644 --- a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java +++ b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java @@ -22,16 +22,24 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.isA; 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; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; import android.content.res.Resources; import android.provider.SearchIndexableResource; import android.provider.Settings; @@ -80,6 +88,9 @@ public class ScreenTimeoutSettingsTest { @Mock Preference mDisableOptionsPreference; + @Mock + private PackageManager mPackageManager; + @Before public void setup() { MockitoAnnotations.initMocks(this); @@ -90,6 +101,15 @@ public class ScreenTimeoutSettingsTest { mContentResolver = mContext.getContentResolver(); mResources = spy(mContext.getResources()); + doReturn(mPackageManager).when(mContext).getPackageManager(); + when(mPackageManager.getAttentionServicePackageName()).thenReturn("some.package"); + when(mPackageManager.checkPermission(any(), any())).thenReturn( + PackageManager.PERMISSION_GRANTED); + final ResolveInfo attentionServiceResolveInfo = new ResolveInfo(); + attentionServiceResolveInfo.serviceInfo = new ServiceInfo(); + when(mPackageManager.resolveService(isA(Intent.class), anyInt())).thenReturn( + attentionServiceResolveInfo); + 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( @@ -147,6 +167,13 @@ public class ScreenTimeoutSettingsTest { verify(mSettings.mAdaptiveSleepController, never()).addToScreen(mPreferenceScreen); } + @Test + public void updateCandidates_AttentionServiceNotInstalled_doNoShowAdaptiveSleepPreference() { + when(mPackageManager.resolveService(isA(Intent.class), anyInt())).thenReturn(null); + + verify(mSettings.mAdaptiveSleepController, never()).addToScreen(mPreferenceScreen); + } + @Test public void updateCandidates_enforcedAdmin_showDisabledByAdminPreference() { mSettings.mAdmin = new RestrictedLockUtils.EnforcedAdmin();