diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java index 7f85f7d8891..8faae30bdc7 100644 --- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java @@ -17,8 +17,12 @@ import static android.provider.Settings.Secure.ADAPTIVE_SLEEP; import android.Manifest; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.provider.Settings; +import android.service.attention.AttentionService; +import android.text.TextUtils; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; @@ -62,10 +66,24 @@ public class AdaptiveSleepPreferenceController extends TogglePreferenceControlle public static int isControllerAvailable(Context context) { return context.getResources().getBoolean( com.android.internal.R.bool.config_adaptive_sleep_available) + && isAttentionServiceAvailable(context) ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } + private static boolean isAttentionServiceAvailable(Context context) { + final PackageManager packageManager = context.getPackageManager(); + final String resolvePackage = packageManager.getAttentionServicePackageName(); + if (TextUtils.isEmpty(resolvePackage)) { + return false; + } + final Intent intent = new Intent(AttentionService.SERVICE_INTERFACE).setPackage( + resolvePackage); + final ResolveInfo resolveInfo = packageManager.resolveService(intent, + PackageManager.MATCH_SYSTEM_ONLY); + return resolveInfo != null && resolveInfo.serviceInfo != null; + } + static boolean hasSufficientPermission(PackageManager packageManager) { final String attentionPackage = packageManager.getAttentionServicePackageName(); return attentionPackage != null && packageManager.checkPermission( diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java index 295eac5b71f..964fce30102 100644 --- a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java @@ -16,17 +16,22 @@ package com.android.settings.display; -import static android.provider.Settings.System.ADAPTIVE_SLEEP; +import static android.provider.Settings.Secure.ADAPTIVE_SLEEP; + +import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; 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.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.provider.Settings; @@ -75,6 +80,14 @@ public class AdaptiveSleepPreferenceControllerTest { when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); } + @Test + public void isControllerAvailable_ServiceUnavailable_returnUnsupported() { + doReturn(null).when(mPackageManager).resolveService(isA(Intent.class), anyInt()); + + assertThat(AdaptiveSleepPreferenceController.isControllerAvailable(mContext)).isEqualTo( + UNSUPPORTED_ON_DEVICE); + } + @Test public void onPreferenceChange_turnOn_returnOn() { mController.onPreferenceChange(null, true);