diff --git a/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java b/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java index 8aff2238a4c..a36d3ce467f 100644 --- a/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java +++ b/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java @@ -29,19 +29,30 @@ import com.android.settings.core.BasePreferenceController; import java.util.List; -public class AccessibilityUsagePreferenceController extends BasePreferenceController { +public class AccessibilityUsagePreferenceController extends BasePreferenceController { - private final @NonNull List mEnabledServiceInfos; + private final AccessibilityManager mAccessibilityManager; + @NonNull + private List mEnabledServiceInfos; public AccessibilityUsagePreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); - - final AccessibilityManager accessibilityManager = context.getSystemService( - AccessibilityManager.class); - mEnabledServiceInfos = accessibilityManager.getEnabledAccessibilityServiceList( + mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class); + mEnabledServiceInfos = mAccessibilityManager.getEnabledAccessibilityServiceList( AccessibilityServiceInfo.FEEDBACK_ALL_MASK); } + @Override + public void updateState(Preference preference) { + super.updateState(preference); + mEnabledServiceInfos = mAccessibilityManager.getEnabledAccessibilityServiceList( + AccessibilityServiceInfo.FEEDBACK_ALL_MASK); + + if (mEnabledServiceInfos.isEmpty()) { + preference.setVisible(false); + } + } + @Override public int getAvailabilityStatus() { return mEnabledServiceInfos.isEmpty() ? UNSUPPORTED_ON_DEVICE : AVAILABLE; diff --git a/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java index 33109b0638d..c07b1ad7995 100644 --- a/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java @@ -20,12 +20,13 @@ import static com.android.settings.core.BasePreferenceController.AVAILABLE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; import static com.google.common.truth.Truth.assertThat; + import android.accessibilityservice.AccessibilityServiceInfo; import android.content.Context; -import android.provider.DeviceConfig; import android.view.accessibility.AccessibilityManager; -import com.android.settings.Utils; +import androidx.preference.Preference; + import com.android.settings.testutils.shadow.ShadowDeviceConfig; import org.junit.After; @@ -65,10 +66,8 @@ public class AccessibilityUsagePreferenceControllerTest { @Test public void getAvailabilityStatus_noEnabledServices_shouldReturnUnsupported() { - DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, - Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); mAccessibilityManager.setEnabledAccessibilityServiceList(new ArrayList<>()); - AccessibilityUsagePreferenceController controller = + final AccessibilityUsagePreferenceController controller = new AccessibilityUsagePreferenceController(mContext, "test_key"); assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); @@ -76,13 +75,24 @@ public class AccessibilityUsagePreferenceControllerTest { @Test public void getAvailabilityStatus_enabledServices_shouldReturnAvailable() { - DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, - Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, "false", true); mAccessibilityManager.setEnabledAccessibilityServiceList( new ArrayList<>(Arrays.asList(new AccessibilityServiceInfo()))); - AccessibilityUsagePreferenceController controller = + final AccessibilityUsagePreferenceController controller = new AccessibilityUsagePreferenceController(mContext, "test_key"); assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE); } + + @Test + public void updateState_noEnabledServices_shouldHidePreference() { + mAccessibilityManager.setEnabledAccessibilityServiceList(new ArrayList<>()); + final AccessibilityUsagePreferenceController controller = + new AccessibilityUsagePreferenceController(mContext, "test_key"); + final Preference preference = new Preference(mContext); + preference.setVisible(true); + + controller.updateState(preference); + + assertThat(preference.isVisible()).isFalse(); + } }