Merge "Hides Screen Attention setting when AttentionService isn't installed." into sc-dev
diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
index 35f9c72..b21c6ac 100644
--- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
@@ -139,13 +139,17 @@
     }
 
     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 66f5ed3..18d1049 100644
--- a/src/com/android/settings/display/ScreenTimeoutSettings.java
+++ b/src/com/android/settings/display/ScreenTimeoutSettings.java
@@ -314,8 +314,7 @@
     }
 
     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 abb616a..41e4429 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 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 @@
     @Mock
     Preference mDisableOptionsPreference;
 
+    @Mock
+    private PackageManager mPackageManager;
+
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
@@ -90,6 +101,15 @@
         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(
@@ -148,6 +168,13 @@
     }
 
     @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();
         mSettings.mDisableOptionsPreference = mDisableOptionsPreference;