Update a11y edit shortcut screen's text and tutorial text
Bug: 323792194 Test: manual Test: atest com.android.settings.accessibility Test: atest com.android.settings.accessibility.shortcuts Flag: N/A simple string changes NO_IFTTT=Introduce new IfThisThenThat lint Change-Id: I7ba4096d669453c33257880407e85ffe76d358f8
This commit is contained in:
@@ -32,18 +32,27 @@ import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
import android.platform.test.annotations.EnableFlags;
|
||||
import android.platform.test.flag.junit.SetFlagsRule;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.util.ArrayMap;
|
||||
import android.view.View;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextSwitcher;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.server.accessibility.Flags;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.SubSettings;
|
||||
import com.android.settings.testutils.AccessibilityTestUtils;
|
||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
@@ -54,16 +63,22 @@ import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadows.ShadowAccessibilityManager;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/** Tests for {@link AccessibilityGestureNavigationTutorial}. */
|
||||
@Config(shadows = SettingsShadowResources.class)
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class AccessibilityGestureNavigationTutorialTest {
|
||||
private static final String FAKE_FEATURE_NAME = "Fake Feature Name";
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Rule
|
||||
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
|
||||
@Mock
|
||||
private DialogInterface.OnClickListener mOnClickListener;
|
||||
@Mock
|
||||
@@ -79,7 +94,7 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void createTutorialPages_shortcutListIsEmpty_throwsException() {
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -87,36 +102,42 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
mShortcutTypes |= UserShortcutType.TRIPLETAP;
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
|
||||
assertThat(createShortcutTutorialPages(mContext,
|
||||
mShortcutTypes)).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(
|
||||
createShortcutTutorialPages(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME, /* inSetupWizard= */ false)
|
||||
).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(alertDialog).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
|
||||
@EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
|
||||
public void createTutorialPages_turnOnTwoFingerTripleTapShortcut_hasOnePage() {
|
||||
mShortcutTypes |= UserShortcutType.TWOFINGER_DOUBLETAP;
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
|
||||
assertThat(createShortcutTutorialPages(mContext,
|
||||
mShortcutTypes)).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(
|
||||
createShortcutTutorialPages(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME, /* inSetupWizard= */ false)
|
||||
).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(alertDialog).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
@EnableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void createTutorialPages_turnOnQuickSettingShortcut_hasOnePage() {
|
||||
mShortcutTypes |= UserShortcutType.QUICK_SETTINGS;
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
|
||||
assertThat(createShortcutTutorialPages(mContext,
|
||||
mShortcutTypes)).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(
|
||||
createShortcutTutorialPages(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME, /* inSetupWizard= */ false)
|
||||
).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(alertDialog).isNotNull();
|
||||
}
|
||||
|
||||
@@ -125,10 +146,12 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
|
||||
assertThat(createShortcutTutorialPages(mContext,
|
||||
mShortcutTypes)).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(
|
||||
createShortcutTutorialPages(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME, /* inSetupWizard= */ false)
|
||||
).hasSize(/* expectedSize= */ 1);
|
||||
assertThat(alertDialog).isNotNull();
|
||||
}
|
||||
|
||||
@@ -138,36 +161,69 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
mShortcutTypes |= UserShortcutType.HARDWARE;
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
|
||||
assertThat(createShortcutTutorialPages(mContext,
|
||||
mShortcutTypes)).hasSize(/* expectedSize= */ 2);
|
||||
assertThat(
|
||||
createShortcutTutorialPages(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME, /* inSetupWizard= */ false)
|
||||
).hasSize(/* expectedSize= */ 2);
|
||||
assertThat(alertDialog).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createTutorialPages_turnOnSoftwareShortcut_linkButtonVisible() {
|
||||
public void createTutorialPages_turnOnA11yGestureShortcut_linkButtonShownWithText() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(
|
||||
mContext, /* gestureNavEnabled= */ true, /* floatingButtonEnabled= */ false);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).getVisibility())
|
||||
.isEqualTo(View.VISIBLE);
|
||||
Button btn = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
|
||||
assertThat(btn).isNotNull();
|
||||
assertThat(btn.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(btn.getText().toString()).isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_configure_software_shortcut_type));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createTutorialPages_turnOnSoftwareAndHardwareShortcut_linkButtonVisible() {
|
||||
public void createTutorialPages_turnOnA11yNavButtonShortcut_linkButtonShownWithText() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
mShortcutTypes |= UserShortcutType.HARDWARE;
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(
|
||||
mContext, /* gestureNavEnabled= */ false, /* floatingButtonEnabled= */ false);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).getVisibility())
|
||||
.isEqualTo(View.VISIBLE);
|
||||
Button btn = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
|
||||
assertThat(btn).isNotNull();
|
||||
assertThat(btn.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(btn.getText().toString()).isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_configure_software_shortcut_type));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createTutorialPages_turnOnFloatingButtonShortcut_linkButtonShownWithText() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(
|
||||
mContext, /* gestureNavEnabled= */ false, /* floatingButtonEnabled= */ true);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
Button btn = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
|
||||
assertThat(btn).isNotNull();
|
||||
assertThat(btn.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(btn.getText().toString()).isEqualTo(
|
||||
mContext.getString(R.string.accessibility_tutorial_dialog_link_button));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -175,7 +231,7 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
mShortcutTypes |= UserShortcutType.HARDWARE;
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
@@ -188,20 +244,293 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialogForSetupWizard(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialogForSetupWizard(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).getVisibility())
|
||||
.isEqualTo(View.GONE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void createAccessibilityTutorialDialog_qsShortcut_inSuwTalkbackOn_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.QUICK_SETTINGS;
|
||||
setTouchExplorationEnabled(true);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_quick_setting);
|
||||
Map<String, Object> arguments = new ArrayMap<>();
|
||||
arguments.put("count", 2);
|
||||
arguments.put("featureName", FAKE_FEATURE_NAME);
|
||||
final CharSequence instruction = StringUtil.getIcuPluralsString(mContext,
|
||||
arguments,
|
||||
R.string.accessibility_tutorial_dialog_message_quick_setting);
|
||||
final SpannableStringBuilder expectedInstruction = new SpannableStringBuilder();
|
||||
expectedInstruction
|
||||
.append(mContext.getText(
|
||||
R.string.accessibility_tutorial_dialog_shortcut_unavailable_in_suw))
|
||||
.append("\n\n");
|
||||
expectedInstruction.append(instruction);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialogForSetupWizard(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void createAccessibilityTutorialDialog_qsShortcut_notInSuwTalkbackOn_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.QUICK_SETTINGS;
|
||||
setTouchExplorationEnabled(true);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_quick_setting);
|
||||
Map<String, Object> arguments = new ArrayMap<>();
|
||||
arguments.put("count", 2);
|
||||
arguments.put("featureName", FAKE_FEATURE_NAME);
|
||||
final CharSequence expectedInstruction = StringUtil.getIcuPluralsString(mContext,
|
||||
arguments,
|
||||
R.string.accessibility_tutorial_dialog_message_quick_setting);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void createAccessibilityTutorialDialog_qsShortcut_inSuwTalkbackOff_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.QUICK_SETTINGS;
|
||||
setTouchExplorationEnabled(false);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_quick_setting);
|
||||
Map<String, Object> arguments = new ArrayMap<>();
|
||||
arguments.put("count", 1);
|
||||
arguments.put("featureName", FAKE_FEATURE_NAME);
|
||||
final CharSequence instruction = StringUtil.getIcuPluralsString(mContext,
|
||||
arguments,
|
||||
R.string.accessibility_tutorial_dialog_message_quick_setting);
|
||||
final SpannableStringBuilder expectedInstruction = new SpannableStringBuilder();
|
||||
expectedInstruction.append(mContext.getText(
|
||||
R.string.accessibility_tutorial_dialog_shortcut_unavailable_in_suw))
|
||||
.append("\n\n");
|
||||
expectedInstruction.append(instruction);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialogForSetupWizard(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void createAccessibilityTutorialDialog_qsShortcut_notInSuwTalkbackOff_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.QUICK_SETTINGS;
|
||||
setTouchExplorationEnabled(false);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_quick_setting);
|
||||
Map<String, Object> arguments = new ArrayMap<>();
|
||||
arguments.put("count", 1);
|
||||
arguments.put("featureName", FAKE_FEATURE_NAME);
|
||||
final CharSequence expectedInstruction = StringUtil.getIcuPluralsString(mContext,
|
||||
arguments,
|
||||
R.string.accessibility_tutorial_dialog_message_quick_setting);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createAccessibilityTutorialDialog_volumeKeysShortcut_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.HARDWARE;
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_volume);
|
||||
final CharSequence expectedInstruction = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_message_volume);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createAccessibilityTutorialDialog_tripleTapShortcut_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.TRIPLETAP;
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_triple);
|
||||
final CharSequence expectedInstruction = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_tripletap_instruction, 3);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
|
||||
public void createAccessibilityTutorialDialog_twoFingerDoubleTapShortcut_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.TWOFINGER_DOUBLETAP;
|
||||
final int numFingers = 2;
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_two_finger_double, numFingers);
|
||||
final String expectedInstruction = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_twofinger_doubletap_instruction, numFingers);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createAccessibilityTutorialDialog_floatingButtonShortcut_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(
|
||||
mContext, /* gestureNavEnabled= */ false, /* floatingButtonEnabled= */ true);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_button);
|
||||
final String expectedInstruction = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_message_floating_button);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createAccessibilityTutorialDialog_navA11yButtonShortcut_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(
|
||||
mContext, /* gestureNavEnabled= */ false, /* floatingButtonEnabled= */ false);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_button);
|
||||
final String expectedInstruction = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_message_button);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createAccessibilityTutorialDialog_gestureShortcut_talkbackOn_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
setTouchExplorationEnabled(true);
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(
|
||||
mContext, /* gestureNavEnabled= */ true, /* floatingButtonEnabled= */ false);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_gesture);
|
||||
final String expectedInstruction = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 3,
|
||||
R.string.accessibility_tutorial_dialog_gesture_shortcut_instruction);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createAccessibilityTutorialDialog_gestureShortcut_talkbackOff_verifyText() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
setTouchExplorationEnabled(false);
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(
|
||||
mContext, /* gestureNavEnabled= */ true, /* floatingButtonEnabled= */ false);
|
||||
final String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_tutorial_dialog_title_gesture);
|
||||
final String expectedInstruction = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 2,
|
||||
R.string.accessibility_tutorial_dialog_gesture_shortcut_instruction);
|
||||
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verifyTutorialTitleAndInstruction(
|
||||
alertDialog,
|
||||
expectedTitle,
|
||||
expectedInstruction);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void performClickOnPositiveButton_turnOnSoftwareShortcut_dismiss() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
|
||||
ShadowLooper.idleMainLooper();
|
||||
@@ -213,8 +542,10 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
public void performClickOnPositiveButton_turnOnSoftwareShortcut_callOnClickListener() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, mOnClickListener);
|
||||
createAccessibilityTutorialDialog(
|
||||
mContext, mShortcutTypes, mOnClickListener, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
|
||||
ShadowLooper.idleMainLooper();
|
||||
@@ -226,7 +557,8 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
public void performClickOnNegativeButton_turnOnSoftwareShortcut_directToSettingsPage() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
Activity activity = Robolectric.buildActivity(Activity.class).create().get();
|
||||
final AlertDialog alertDialog = createAccessibilityTutorialDialog(activity, mShortcutTypes);
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(activity, mShortcutTypes, FAKE_FEATURE_NAME);
|
||||
alertDialog.show();
|
||||
|
||||
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
|
||||
@@ -251,4 +583,22 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
assertThat(alertDialog.isShowing()).isFalse();
|
||||
verify(mOnDismissListener).onDismiss(alertDialog);
|
||||
}
|
||||
|
||||
private void setTouchExplorationEnabled(boolean enable) {
|
||||
ShadowAccessibilityManager am = shadowOf(
|
||||
mContext.getSystemService(AccessibilityManager.class));
|
||||
am.setTouchExplorationEnabled(enable);
|
||||
}
|
||||
|
||||
private void verifyTutorialTitleAndInstruction(AlertDialog alertDialog, String expectedTitle,
|
||||
String expectedInstruction) {
|
||||
TextSwitcher titleView = alertDialog.findViewById(R.id.title);
|
||||
assertThat(titleView).isNotNull();
|
||||
assertThat(((TextView) titleView.getCurrentView()).getText().toString()).isEqualTo(
|
||||
expectedTitle);
|
||||
TextSwitcher instructionView = alertDialog.findViewById(R.id.instruction);
|
||||
assertThat(instructionView).isNotNull();
|
||||
assertThat(((TextView) instructionView.getCurrentView()).getText().toString()).isEqualTo(
|
||||
expectedInstruction);
|
||||
}
|
||||
}
|
||||
|
@@ -16,8 +16,6 @@
|
||||
|
||||
package com.android.settings.accessibility.shortcuts;
|
||||
|
||||
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
|
||||
|
||||
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
|
||||
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
|
||||
import static com.android.settings.accessibility.shortcuts.EditShortcutsPreferenceFragment.SHORTCUT_SETTINGS;
|
||||
@@ -38,10 +36,12 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.platform.test.annotations.EnableFlags;
|
||||
import android.platform.test.flag.junit.SetFlagsRule;
|
||||
import android.provider.Settings;
|
||||
import android.util.Pair;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.accessibility.Flags;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.testing.FragmentScenario;
|
||||
@@ -58,9 +58,11 @@ import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.SubSettings;
|
||||
import com.android.settings.accessibility.AccessibilityUtil;
|
||||
import com.android.settings.accessibility.PreferredShortcuts;
|
||||
import com.android.settings.testutils.AccessibilityTestUtils;
|
||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
|
||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||
|
||||
@@ -72,6 +74,7 @@ import org.junit.runner.RunWith;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowAccessibilityManager;
|
||||
import org.robolectric.shadows.ShadowContentResolver;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
@@ -81,6 +84,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -96,6 +100,8 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
private static final CharSequence SCREEN_TITLE = "Fake shortcut title";
|
||||
private static final ComponentName TARGET_FAKE_COMPONENT =
|
||||
new ComponentName("FakePackage", "FakeClass");
|
||||
private static final ComponentName TARGET_FAKE_COMPONENT_TILE =
|
||||
new ComponentName("FakePackage", "FakeTile");
|
||||
private static final String TARGET = MAGNIFICATION_CONTROLLER_NAME;
|
||||
private static final Set<String> TARGETS = Set.of(TARGET);
|
||||
|
||||
@@ -109,12 +115,14 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
AccessibilityTestUtils.setSoftwareShortcutMode(mContext, /* gestureNavEnabled= */
|
||||
true, /* floatingButtonEnabled= */ false);
|
||||
SettingsShadowResources.overrideResource(
|
||||
com.android.internal.R.integer.config_navBarInteractionMode,
|
||||
NAV_BAR_MODE_GESTURAL);
|
||||
Settings.Secure.putInt(mContext.getContentResolver(),
|
||||
Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
|
||||
Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE);
|
||||
com.android.internal.R.bool.config_quickSettingsSupported, true);
|
||||
com.android.settings.testutils.shadow.ShadowAccessibilityManager a11yManager =
|
||||
Shadow.extract(mContext.getSystemService(AccessibilityManager.class));
|
||||
a11yManager.setA11yFeatureToTileMap(
|
||||
Map.of(TARGET_FAKE_COMPONENT, TARGET_FAKE_COMPONENT_TILE));
|
||||
|
||||
mActivity = Robolectric.buildActivity(FragmentActivity.class).get();
|
||||
}
|
||||
@@ -158,7 +166,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void fragmentCreated_inSuw_controllersTargetsSet() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ true);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ true, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
mFragmentScenario.onFragment(fragment -> {
|
||||
@@ -174,7 +182,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void fragmentCreated_notInSuw_controllersTargetsSet() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
mFragmentScenario.onFragment(fragment -> {
|
||||
@@ -195,7 +203,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
assertThat(contentResolver.getContentObservers(uri)).isEmpty();
|
||||
}
|
||||
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
for (Uri uri : SHORTCUT_SETTINGS) {
|
||||
@@ -207,7 +215,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
public void fragmentDestroyed_unregisterSettingsObserver() {
|
||||
ShadowContentResolver contentResolver = shadowOf(mContext.getContentResolver());
|
||||
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false)
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET)
|
||||
.moveToState(Lifecycle.State.CREATED);
|
||||
mFragmentScenario.onFragment(EditShortcutsPreferenceFragment::onDestroy);
|
||||
|
||||
@@ -218,7 +226,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void onVolumeKeysShortcutSettingChanged_volumeKeyControllerUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
ShortcutUtils.optInValueToSettings(
|
||||
@@ -233,7 +241,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void onSoftwareShortcutSettingChanged_softwareControllersUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
ShortcutUtils.optInValueToSettings(
|
||||
@@ -249,7 +257,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void onSoftwareShortcutModeChanged_softwareControllersUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
ShortcutUtils.optInValueToSettings(
|
||||
@@ -265,7 +273,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void onTripleTapShortcutSettingChanged_tripleTapShortcutControllerUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
Settings.Secure.putInt(
|
||||
@@ -283,7 +291,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void onTwoFingersShortcutSettingChanged_twoFingersDoubleTapShortcutControllerUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
|
||||
Settings.Secure.putInt(
|
||||
@@ -302,12 +310,12 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void fragmentResumed_enableTouchExploration_gestureShortcutOptionSummaryUpdated() {
|
||||
String expectedSummary = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_gesture_talkback)
|
||||
String expectedSummary = StringUtil.getIcuPluralsString(mContext, 3,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_gesture)
|
||||
+ "\n\n"
|
||||
+ mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.RESUMED);
|
||||
|
||||
ShadowAccessibilityManager am = shadowOf(
|
||||
@@ -323,12 +331,12 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void fragmentPaused_enableTouchExploration_gestureShortcutOptionSummaryNotUpdated() {
|
||||
String expectedSummary = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_gesture)
|
||||
String expectedSummary = StringUtil.getIcuPluralsString(mContext, 2,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_gesture)
|
||||
+ "\n\n"
|
||||
+ mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.RESUMED).moveToState(Lifecycle.State.STARTED);
|
||||
|
||||
ShadowAccessibilityManager am = shadowOf(
|
||||
@@ -342,9 +350,49 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void fragmentResumed_enableTouchExploration_qsShortcutOptionSummaryUpdated() {
|
||||
String expectedSummary = StringUtil.getIcuPluralsString(mContext, 2,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_quick_settings);
|
||||
mFragmentScenario = createFragScenario(
|
||||
/* isInSuw= */ false, TARGET_FAKE_COMPONENT.flattenToString());
|
||||
mFragmentScenario.moveToState(Lifecycle.State.RESUMED);
|
||||
|
||||
ShadowAccessibilityManager am = shadowOf(
|
||||
mContext.getSystemService(AccessibilityManager.class));
|
||||
am.setTouchExplorationEnabled(true);
|
||||
|
||||
mFragmentScenario.onFragment(fragment -> {
|
||||
Preference preference = fragment.findPreference(
|
||||
mContext.getString(R.string.accessibility_shortcut_quick_settings_pref));
|
||||
assertThat(preference.getSummary().toString()).isEqualTo(expectedSummary);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void fragmentPaused_enableTouchExploration_qsShortcutOptionSummaryNotUpdated() {
|
||||
String expectedSummary = StringUtil.getIcuPluralsString(mContext, 1,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_quick_settings);
|
||||
mFragmentScenario = createFragScenario(
|
||||
/* isInSuw= */ false, TARGET_FAKE_COMPONENT.flattenToString());
|
||||
mFragmentScenario.moveToState(Lifecycle.State.RESUMED).moveToState(Lifecycle.State.STARTED);
|
||||
|
||||
ShadowAccessibilityManager am = shadowOf(
|
||||
mContext.getSystemService(AccessibilityManager.class));
|
||||
am.setTouchExplorationEnabled(true);
|
||||
|
||||
mFragmentScenario.onFragment(fragment -> {
|
||||
Preference preference = fragment.findPreference(
|
||||
mContext.getString(R.string.accessibility_shortcut_quick_settings_pref));
|
||||
assertThat(preference.getSummary().toString()).isEqualTo(expectedSummary);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onAdvancedPreferenceClicked_advancedShouldBecomeInvisible() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.RESUMED);
|
||||
mFragmentScenario.onFragment(fragment -> {
|
||||
Preference advanced = fragment.findPreference(
|
||||
@@ -372,7 +420,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void fragmentRecreated_collapsed_advancedRemainVisible() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.RESUMED);
|
||||
|
||||
mFragmentScenario.recreate();
|
||||
@@ -386,7 +434,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void fragmentResumed_preferredShortcutsUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.RESUMED);
|
||||
// Move the fragment to the background
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
@@ -408,7 +456,7 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void onVolumeKeysShortcutSettingChanged_preferredShortcutsUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
assertThat(
|
||||
PreferredShortcuts.retrieveUserShortcutType(
|
||||
@@ -481,22 +529,25 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
|
||||
public void onQuickSettingsShortcutSettingChanged_preferredShortcutsUpdated() {
|
||||
mFragmentScenario = createFragScenario(/* isInSuw= */ false);
|
||||
final String target = TARGET_FAKE_COMPONENT.flattenToString();
|
||||
mFragmentScenario = createFragScenario(
|
||||
/* isInSuw= */ false, TARGET_FAKE_COMPONENT.flattenToString());
|
||||
mFragmentScenario.moveToState(Lifecycle.State.CREATED);
|
||||
int currentPreferredShortcut =
|
||||
PreferredShortcuts.retrieveUserShortcutType(mContext, TARGET);
|
||||
PreferredShortcuts.retrieveUserShortcutType(mContext, target);
|
||||
assertThat(currentPreferredShortcut
|
||||
& ShortcutConstants.UserShortcutType.QUICK_SETTINGS).isEqualTo(0);
|
||||
|
||||
ShortcutUtils.optInValueToSettings(
|
||||
mContext, ShortcutConstants.UserShortcutType.QUICK_SETTINGS, TARGET);
|
||||
mContext, ShortcutConstants.UserShortcutType.QUICK_SETTINGS, target);
|
||||
|
||||
// Calls onFragment so that the change to Setting is notified to its observer
|
||||
mFragmentScenario.onFragment(fragment ->
|
||||
assertThat(
|
||||
PreferredShortcuts.retrieveUserShortcutType(
|
||||
mContext, TARGET)
|
||||
mContext, target)
|
||||
).isEqualTo(ShortcutConstants.UserShortcutType.QUICK_SETTINGS)
|
||||
);
|
||||
}
|
||||
@@ -537,10 +588,11 @@ public class EditShortcutsPreferenceFragmentTest {
|
||||
return retControllers;
|
||||
}
|
||||
|
||||
private FragmentScenario<EditShortcutsPreferenceFragment> createFragScenario(boolean isInSuw) {
|
||||
private FragmentScenario<EditShortcutsPreferenceFragment> createFragScenario(
|
||||
boolean isInSuw, String target) {
|
||||
Bundle args = new Bundle();
|
||||
args.putStringArray(
|
||||
EditShortcutsPreferenceFragment.ARG_KEY_SHORTCUT_TARGETS, new String[]{TARGET});
|
||||
EditShortcutsPreferenceFragment.ARG_KEY_SHORTCUT_TARGETS, new String[]{target});
|
||||
FragmentScenario<EditShortcutsPreferenceFragment> scenario =
|
||||
FragmentScenario.launch(
|
||||
EditShortcutsPreferenceFragment.class, args,
|
||||
|
@@ -24,7 +24,6 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
@@ -74,19 +73,24 @@ public class FloatingButtonShortcutOptionControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_inSuw_verifySummaryEmpty() {
|
||||
public void getSummary_inSuw_verifySummary() {
|
||||
String expectedSummary = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_floating_button);
|
||||
mController.setInSetupWizard(true);
|
||||
|
||||
assertThat(TextUtils.isEmpty(mController.getSummary())).isTrue();
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expectedSummary);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_notInSuw_verifySummary() {
|
||||
String expectedSummary = mContext.getText(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_floating_button)
|
||||
+ "\n\n"
|
||||
+ mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating);
|
||||
mController.setInSetupWizard(false);
|
||||
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating));
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expectedSummary);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -34,6 +34,7 @@ import androidx.test.core.app.ApplicationProvider;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.testutils.AccessibilityTestUtils;
|
||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -82,10 +83,13 @@ public class GestureShortcutOptionControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationDisabled_verifySummary() {
|
||||
public void getSummary_touchExplorationDisabled_notInSuw_verifySummary() {
|
||||
enableTouchExploration(false);
|
||||
String expected = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_gesture)
|
||||
mController.setInSetupWizard(false);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 2,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_gesture)
|
||||
+ "\n\n"
|
||||
+ mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating);
|
||||
@@ -94,10 +98,25 @@ public class GestureShortcutOptionControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationEnabled_verifySummary() {
|
||||
public void getSummary_touchExplorationDisabled_inSuw_verifySummary() {
|
||||
enableTouchExploration(false);
|
||||
mController.setInSetupWizard(true);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 2,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_gesture);
|
||||
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationEnabled_notInSuw_verifySummary() {
|
||||
enableTouchExploration(true);
|
||||
String expected = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_gesture_talkback)
|
||||
mController.setInSetupWizard(false);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 3,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_gesture)
|
||||
+ "\n\n"
|
||||
+ mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_software_floating);
|
||||
@@ -105,6 +124,18 @@ public class GestureShortcutOptionControllerTest {
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationEnabled_inSuw_verifySummary() {
|
||||
enableTouchExploration(true);
|
||||
mController.setInSetupWizard(true);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 3,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_gesture);
|
||||
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isShortcutAvailable_inSuw_returnFalse() {
|
||||
mController.setInSetupWizard(true);
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.accessibility.shortcuts;
|
||||
|
||||
import static com.android.settings.testutils.AccessibilityTestUtils.setupMockAccessibilityManager;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.spy;
|
||||
@@ -40,12 +42,14 @@ import com.android.internal.accessibility.util.ShortcutUtils;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.testutils.AccessibilityTestUtils;
|
||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -55,6 +59,7 @@ import java.util.Set;
|
||||
/**
|
||||
* Tests for {@link QuickSettingsShortcutOptionController}
|
||||
*/
|
||||
@Config(shadows = SettingsShadowResources.class)
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class QuickSettingsShortcutOptionControllerTest {
|
||||
private static final String PREF_KEY = "prefKey";
|
||||
@@ -87,15 +92,60 @@ public class QuickSettingsShortcutOptionControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void displayPreference_verifyScreenTextSet() {
|
||||
public void displayPreference_verifyScreenTitleSet() {
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
|
||||
assertThat(mShortcutOptionPreference.getTitle().toString()).isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_title_quick_settings));
|
||||
assertThat(mShortcutOptionPreference.getSummary().toString()).isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_quick_settings));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationDisabled_inSuw_verifySummary() {
|
||||
enableTouchExploration(false);
|
||||
mController.setInSetupWizard(true);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 1,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_quick_settings_suw);
|
||||
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationDisabled_notInSuw_verifySummary() {
|
||||
enableTouchExploration(false);
|
||||
mController.setInSetupWizard(false);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 1,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_quick_settings);
|
||||
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationEnabled_inSuw_verifySummary() {
|
||||
enableTouchExploration(true);
|
||||
mController.setInSetupWizard(true);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 2,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_quick_settings_suw);
|
||||
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_touchExplorationEnabled_notInSuw_verifySummary() {
|
||||
enableTouchExploration(true);
|
||||
mController.setInSetupWizard(false);
|
||||
String expected = StringUtil.getIcuPluralsString(
|
||||
mContext,
|
||||
/* count= */ 2,
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_quick_settings);
|
||||
|
||||
assertThat(mController.getSummary().toString()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -177,4 +227,9 @@ public class QuickSettingsShortcutOptionControllerTest {
|
||||
|
||||
assertThat(mController.isChecked()).isFalse();
|
||||
}
|
||||
|
||||
private void enableTouchExploration(boolean enable) {
|
||||
AccessibilityManager am = setupMockAccessibilityManager(mContext);
|
||||
when(am.isTouchExplorationEnabled()).thenReturn(enable);
|
||||
}
|
||||
}
|
||||
|
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.icu.text.MessageFormat;
|
||||
import android.os.UserHandle;
|
||||
import android.platform.test.annotations.DisableFlags;
|
||||
import android.platform.test.annotations.EnableFlags;
|
||||
@@ -83,16 +82,16 @@ public class TripleTapShortcutOptionControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void displayPreference_verifyScreenTestSet() {
|
||||
public void displayPreference_verifyTitleSummaryText() {
|
||||
String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_screen_title_triple_tap);
|
||||
String expectedSummary = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_screen_summary_triple_tap, 3);
|
||||
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
|
||||
assertThat(mShortcutOptionPreference.getTitle().toString()).isEqualTo(
|
||||
mContext.getString(R.string.accessibility_shortcut_edit_dialog_title_triple_tap));
|
||||
assertThat(mShortcutOptionPreference.getSummary().toString()).isEqualTo(
|
||||
MessageFormat.format(
|
||||
mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_triple_tap),
|
||||
3));
|
||||
assertThat(mShortcutOptionPreference.getTitle().toString()).isEqualTo(expectedTitle);
|
||||
assertThat(mShortcutOptionPreference.getSummary().toString()).isEqualTo(expectedSummary);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -24,7 +24,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.icu.text.MessageFormat;
|
||||
import android.os.UserHandle;
|
||||
import android.platform.test.annotations.DisableFlags;
|
||||
import android.platform.test.annotations.EnableFlags;
|
||||
@@ -82,15 +81,15 @@ public class TwoFingerDoubleTapShortcutOptionControllerTest {
|
||||
|
||||
@Test
|
||||
public void displayPreference_verifyScreenTextSet() {
|
||||
String expectedTitle = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_screen_title_two_finger_double_tap, 2);
|
||||
String expectedSummary = mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_screen_summary_two_finger_double_tap, 2);
|
||||
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
|
||||
assertThat(mShortcutOptionPreference.getTitle().toString()).isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_title_two_finger_double_tap));
|
||||
assertThat(mShortcutOptionPreference.getSummary().toString()).isEqualTo(
|
||||
MessageFormat.format(mContext.getString(
|
||||
R.string.accessibility_shortcut_edit_dialog_summary_two_finger_double_tap),
|
||||
2));
|
||||
assertThat(mShortcutOptionPreference.getTitle().toString()).isEqualTo(expectedTitle);
|
||||
assertThat(mShortcutOptionPreference.getSummary().toString()).isEqualTo(expectedSummary);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -16,14 +16,15 @@
|
||||
|
||||
package com.android.settings.testutils.shadow;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.UserIdInt;
|
||||
import android.content.ComponentName;
|
||||
import android.util.ArrayMap;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -31,12 +32,21 @@ import java.util.Map;
|
||||
*/
|
||||
@Implements(AccessibilityManager.class)
|
||||
public class ShadowAccessibilityManager extends org.robolectric.shadows.ShadowAccessibilityManager {
|
||||
private Map<ComponentName, ComponentName> mA11yFeatureToTileMap = new ArrayMap<>();
|
||||
|
||||
/**
|
||||
* Implements a hidden method {@link AccessibilityManager.getA11yFeatureToTileMap} and returns
|
||||
* an empty map.
|
||||
* Implements a hidden method {@link AccessibilityManager.getA11yFeatureToTileMap}
|
||||
*/
|
||||
@Implementation
|
||||
public Map<ComponentName, ComponentName> getA11yFeatureToTileMap(@UserIdInt int userId) {
|
||||
return Collections.emptyMap();
|
||||
return mA11yFeatureToTileMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set fake a11y feature to tile mapping
|
||||
*/
|
||||
public void setA11yFeatureToTileMap(
|
||||
@NonNull Map<ComponentName, ComponentName> a11yFeatureToTileMap) {
|
||||
mA11yFeatureToTileMap = a11yFeatureToTileMap;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user