Use A11yManagerService to check if the A11yService warning is required.
Bug: 303511250 Test: m RunSettingsRoboTests ROBOTEST_FILTER=ToggleAccessibilityServicePreferenceFragmentTest Change-Id: Ibef748bd82ba166e377be0611df113ac09d052bc
This commit is contained in:
@@ -18,6 +18,7 @@ package com.android.settings.accessibility;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -31,8 +32,13 @@ import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.os.Bundle;
|
||||
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
import android.service.quicksettings.TileService;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.accessibility.Flags;
|
||||
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
@@ -40,8 +46,10 @@ import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
||||
import com.android.settings.widget.SettingsMainSwitchPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Answers;
|
||||
@@ -59,6 +67,9 @@ import java.util.List;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class ToggleAccessibilityServicePreferenceFragmentTest {
|
||||
|
||||
@Rule
|
||||
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||
|
||||
private static final String PLACEHOLDER_PACKAGE_NAME = "com.placeholder.example";
|
||||
private static final String PLACEHOLDER_PACKAGE_NAME2 = "com.placeholder.example2";
|
||||
private static final String PLACEHOLDER_SERVICE_CLASS_NAME = "a11yservice1";
|
||||
@@ -73,20 +84,25 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
|
||||
PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
|
||||
private static final String PLACEHOLDER_TILE_NAME2 =
|
||||
PLACEHOLDER_PACKAGE_NAME + "tile.placeholder2";
|
||||
private static final int NO_DIALOG = -1;
|
||||
|
||||
private TestToggleAccessibilityServicePreferenceFragment mFragment;
|
||||
private PreferenceScreen mScreen;
|
||||
private Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private Context mContext;
|
||||
|
||||
private ShadowAccessibilityManager mShadowAccessibilityManager;
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private PreferenceManager mPreferenceManager;
|
||||
@Mock
|
||||
private AccessibilityManager mMockAccessibilityManager;
|
||||
|
||||
@Before
|
||||
public void setUpTestFragment() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
mFragment = spy(new TestToggleAccessibilityServicePreferenceFragment());
|
||||
mFragment.setArguments(new Bundle());
|
||||
when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
|
||||
when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
|
||||
when(mFragment.getContext()).thenReturn(mContext);
|
||||
@@ -213,6 +229,86 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
|
||||
assertThat(mFragment.serviceSupportsAccessibilityButton()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
|
||||
public void enableService_warningRequired_showWarning() throws Throwable {
|
||||
setupServiceWarningRequired(true);
|
||||
mFragment.mToggleServiceSwitchPreference =
|
||||
new SettingsMainSwitchPreference(mContext, /* attrs= */null);
|
||||
|
||||
mFragment.onCheckedChanged(null, true);
|
||||
|
||||
assertThat(mFragment.mLastShownDialogId).isEqualTo(
|
||||
AccessibilityDialogUtils.DialogEnums.ENABLE_WARNING_FROM_TOGGLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
|
||||
public void enableService_warningNotRequired_dontShowWarning() throws Throwable {
|
||||
final AccessibilityServiceInfo info = setupServiceWarningRequired(false);
|
||||
mFragment.mToggleServiceSwitchPreference =
|
||||
new SettingsMainSwitchPreference(mContext, /* attrs= */null);
|
||||
mFragment.mPreferenceKey = info.getComponentName().flattenToString();
|
||||
|
||||
mFragment.onCheckedChanged(null, true);
|
||||
|
||||
assertThat(mFragment.mLastShownDialogId).isEqualTo(
|
||||
AccessibilityDialogUtils.DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
|
||||
public void toggleShortcutPreference_warningRequired_showWarning() throws Throwable {
|
||||
setupServiceWarningRequired(true);
|
||||
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
|
||||
|
||||
mFragment.mShortcutPreference.setChecked(true);
|
||||
mFragment.onToggleClicked(mFragment.mShortcutPreference);
|
||||
|
||||
assertThat(mFragment.mLastShownDialogId).isEqualTo(
|
||||
AccessibilityDialogUtils.DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE);
|
||||
assertThat(mFragment.mShortcutPreference.isChecked()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
|
||||
public void toggleShortcutPreference_warningNotRequired_dontShowWarning() throws Throwable {
|
||||
setupServiceWarningRequired(false);
|
||||
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
|
||||
|
||||
mFragment.mShortcutPreference.setChecked(true);
|
||||
mFragment.onToggleClicked(mFragment.mShortcutPreference);
|
||||
|
||||
assertThat(mFragment.mLastShownDialogId).isEqualTo(
|
||||
AccessibilityDialogUtils.DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
|
||||
assertThat(mFragment.mShortcutPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
|
||||
public void clickShortcutSettingsPreference_warningRequired_showWarning() throws Throwable {
|
||||
setupServiceWarningRequired(true);
|
||||
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
|
||||
|
||||
mFragment.onSettingsClicked(mFragment.mShortcutPreference);
|
||||
|
||||
assertThat(mFragment.mLastShownDialogId).isEqualTo(
|
||||
AccessibilityDialogUtils.DialogEnums.ENABLE_WARNING_FROM_SHORTCUT);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
|
||||
public void clickShortcutSettingsPreference_warningNotRequired_dontShowWarning()
|
||||
throws Throwable {
|
||||
setupServiceWarningRequired(false);
|
||||
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
|
||||
|
||||
mFragment.onSettingsClicked(mFragment.mShortcutPreference);
|
||||
|
||||
assertThat(mFragment.mLastShownDialogId).isEqualTo(
|
||||
AccessibilityDialogUtils.DialogEnums.EDIT_SHORTCUT);
|
||||
}
|
||||
|
||||
private void setupTileService(String packageName, String name, String tileName) {
|
||||
final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
|
||||
final ResolveInfo info = new ResolveInfo();
|
||||
@@ -222,6 +318,21 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
|
||||
shadowPackageManager.addResolveInfoForIntent(tileProbe, info);
|
||||
}
|
||||
|
||||
private AccessibilityServiceInfo setupServiceWarningRequired(boolean required)
|
||||
throws Throwable {
|
||||
final AccessibilityServiceInfo info = getFakeAccessibilityServiceInfo(
|
||||
PLACEHOLDER_PACKAGE_NAME,
|
||||
PLACEHOLDER_SERVICE_CLASS_NAME);
|
||||
info.flags |= AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON;
|
||||
mFragment.mComponentName = info.getComponentName();
|
||||
when(mContext.getSystemService(AccessibilityManager.class))
|
||||
.thenReturn(mMockAccessibilityManager);
|
||||
when(mMockAccessibilityManager.isAccessibilityServiceWarningRequired(any()))
|
||||
.thenReturn(required);
|
||||
when(mFragment.getAccessibilityServiceInfo()).thenReturn(info);
|
||||
return info;
|
||||
}
|
||||
|
||||
private static class FakeServiceInfo extends ServiceInfo {
|
||||
private String mTileName;
|
||||
|
||||
@@ -255,10 +366,16 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
|
||||
|
||||
private static class TestToggleAccessibilityServicePreferenceFragment
|
||||
extends ToggleAccessibilityServicePreferenceFragment {
|
||||
int mLastShownDialogId = NO_DIALOG;
|
||||
|
||||
@Override
|
||||
protected ComponentName getTileComponentName() {
|
||||
return PLACEHOLDER_TILE_COMPONENT_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showDialog(int dialogId) {
|
||||
mLastShownDialogId = dialogId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user