Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12155084 authored by Tsung-Mao Fang's avatar Tsung-Mao Fang
Browse files

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
parent dc9de754
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -31,15 +31,26 @@ 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);
        mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class);
        mEnabledServiceInfos = mAccessibilityManager.getEnabledAccessibilityServiceList(
                AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
    }

        final AccessibilityManager accessibilityManager = context.getSystemService(
                AccessibilityManager.class);
        mEnabledServiceInfos = accessibilityManager.getEnabledAccessibilityServiceList(
    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        mEnabledServiceInfos = mAccessibilityManager.getEnabledAccessibilityServiceList(
                AccessibilityServiceInfo.FEEDBACK_ALL_MASK);

        if (mEnabledServiceInfos.isEmpty()) {
            preference.setVisible(false);
        }
    }

    @Override
+18 −8
Original line number Diff line number Diff line
@@ -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();
    }
}