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:
@@ -64,7 +64,7 @@ public class InvisibleToggleAccessibilityServicePreferenceFragment extends
|
||||
@Override
|
||||
void onDialogButtonFromShortcutToggleClicked(View view) {
|
||||
super.onDialogButtonFromShortcutToggleClicked(view);
|
||||
if (!android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
|
||||
if (!android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
if (view.getId() == R.id.permission_enable_allow_button) {
|
||||
AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName,
|
||||
true);
|
||||
@@ -80,7 +80,7 @@ public class InvisibleToggleAccessibilityServicePreferenceFragment extends
|
||||
@Override
|
||||
void onAllowButtonFromShortcutToggleClicked() {
|
||||
super.onAllowButtonFromShortcutToggleClicked();
|
||||
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
|
||||
if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName, true);
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
|
||||
if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
mWarningDialog =
|
||||
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
|
||||
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
|
||||
@@ -175,7 +175,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
|
||||
if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
mWarningDialog =
|
||||
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
|
||||
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
|
||||
@@ -193,7 +193,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
|
||||
if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
mWarningDialog =
|
||||
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
|
||||
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
|
||||
@@ -332,7 +332,14 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
final int shortcutTypes = retrieveUserShortcutType(getPrefContext(),
|
||||
mComponentName.flattenToString(), UserShortcutType.SOFTWARE);
|
||||
if (preference.isChecked()) {
|
||||
if (!mToggleServiceSwitchPreference.isChecked()) {
|
||||
final boolean isWarningRequired;
|
||||
if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
isWarningRequired = getPrefContext().getSystemService(AccessibilityManager.class)
|
||||
.isAccessibilityServiceWarningRequired(getAccessibilityServiceInfo());
|
||||
} else {
|
||||
isWarningRequired = !mToggleServiceSwitchPreference.isChecked();
|
||||
}
|
||||
if (isWarningRequired) {
|
||||
preference.setChecked(false);
|
||||
showPopupDialog(DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE);
|
||||
} else {
|
||||
@@ -347,9 +354,16 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
|
||||
@Override
|
||||
public void onSettingsClicked(ShortcutPreference preference) {
|
||||
final boolean isServiceOnOrShortcutAdded = mShortcutPreference.isChecked()
|
||||
|| mToggleServiceSwitchPreference.isChecked();
|
||||
if (!isServiceOnOrShortcutAdded) {
|
||||
final boolean isWarningRequired;
|
||||
if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
isWarningRequired = getPrefContext().getSystemService(AccessibilityManager.class)
|
||||
.isAccessibilityServiceWarningRequired(getAccessibilityServiceInfo());
|
||||
} else {
|
||||
isWarningRequired = !(mShortcutPreference.isChecked()
|
||||
|| mToggleServiceSwitchPreference.isChecked());
|
||||
}
|
||||
|
||||
if (isWarningRequired) {
|
||||
showPopupDialog(DialogEnums.ENABLE_WARNING_FROM_SHORTCUT);
|
||||
} else {
|
||||
onAllowButtonFromShortcutClicked();
|
||||
@@ -541,7 +555,14 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
mToggleServiceSwitchPreference.setChecked(false);
|
||||
getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED,
|
||||
/* disableService */ false);
|
||||
if (!mShortcutPreference.isChecked()) {
|
||||
final boolean isWarningRequired;
|
||||
if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
|
||||
isWarningRequired = getPrefContext().getSystemService(AccessibilityManager.class)
|
||||
.isAccessibilityServiceWarningRequired(getAccessibilityServiceInfo());
|
||||
} else {
|
||||
isWarningRequired = !mShortcutPreference.isChecked();
|
||||
}
|
||||
if (isWarningRequired) {
|
||||
showPopupDialog(DialogEnums.ENABLE_WARNING_FROM_TOGGLE);
|
||||
} else {
|
||||
onAllowButtonFromEnableToggleClicked();
|
||||
|
@@ -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