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
This commit is contained in:
Tsung-Mao Fang
2019-09-20 17:02:47 +08:00
parent dc9de754e3
commit 12155084d8
2 changed files with 35 additions and 14 deletions

View File

@@ -31,17 +31,28 @@ import java.util.List;
public class AccessibilityUsagePreferenceController extends BasePreferenceController {
private final @NonNull List<AccessibilityServiceInfo> mEnabledServiceInfos;
private final AccessibilityManager mAccessibilityManager;
@NonNull
private List<AccessibilityServiceInfo> 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;

View File

@@ -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();
}
}