From 12155084d8ced094cf8855fd094ac31c8652259e Mon Sep 17 00:00:00 2001 From: Tsung-Mao Fang Date: Fri, 20 Sep 2019 17:02:47 +0800 Subject: [PATCH] Hide a11y usage when there is no enabled a11y service A11y usage still shows in privacy page after user disable a11y with a11y usage dialog. We need to check again whether there is any enabled a11y after screen comes back to foreground. Change-Id: Icf7aa7dc9d802765ec49df8651385397f454cd48 Fix: 140207216 Test: robotest --- ...ccessibilityUsagePreferenceController.java | 23 +++++++++++----- ...sibilityUsagePreferenceControllerTest.java | 26 +++++++++++++------ 2 files changed, 35 insertions(+), 14 deletions(-) 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(); + } }