Loading core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java +50 −46 Original line number Diff line number Diff line Loading @@ -46,6 +46,10 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.os.Handler; import android.support.test.uiautomator.By; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObject2; import android.support.test.uiautomator.Until; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.IAccessibilityManager; Loading @@ -57,6 +61,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; import com.android.internal.accessibility.dialog.AccessibilityShortcutChooserActivity; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; Loading @@ -73,8 +78,14 @@ import java.util.Collections; @RunWith(AndroidJUnit4.class) public class AccessibilityShortcutChooserActivityTest { private static final String ONE_HANDED_MODE = "One-Handed mode"; private static final String DENY_LABEL = "Deny"; private static final String EDIT_LABEL = "Edit shortcuts"; private static final String LIST_TITLE_LABEL = "Choose features to use"; private static final String TEST_LABEL = "TEST_LABEL"; private static final ComponentName TEST_COMPONENT_NAME = new ComponentName("package", "class"); private static final long UI_TIMEOUT_MS = 1000; private UiDevice mDevice; private ActivityScenario<TestAccessibilityShortcutChooserActivity> mScenario; private TestAccessibilityShortcutChooserActivity mActivity; @Rule Loading @@ -92,6 +103,8 @@ public class AccessibilityShortcutChooserActivityTest { @Before public void setUp() throws Exception { mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); mDevice.wakeUp(); when(mAccessibilityServiceInfo.getResolveInfo()).thenReturn(mResolveInfo); mResolveInfo.serviceInfo = mServiceInfo; mServiceInfo.applicationInfo = mApplicationInfo; Loading @@ -102,27 +115,36 @@ public class AccessibilityShortcutChooserActivityTest { when(mAccessibilityManagerService.isAccessibilityTargetAllowed( anyString(), anyInt(), anyInt())).thenReturn(true); TestAccessibilityShortcutChooserActivity.setupForTesting(mAccessibilityManagerService); mScenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); mScenario.onActivity(activity -> mActivity = activity); mScenario.moveToState(Lifecycle.State.CREATED); mScenario.moveToState(Lifecycle.State.STARTED); mScenario.moveToState(Lifecycle.State.RESUMED); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } @After public void cleanUp() { mScenario.moveToState(Lifecycle.State.DESTROYED); } @Test public void doubleClickTestServiceAndClickDenyButton_permissionDialogDoesNotExist() { final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); openShortcutsList(); // Performing the double-click is flaky so retry if needed. for (int attempt = 1; attempt <= 2; attempt++) { onView(withText(TEST_LABEL)).perform(scrollTo(), doubleClick()); onView(withId(R.id.accessibility_permission_enable_deny_button)).perform(scrollTo(), click()); if (mDevice.wait(Until.hasObject(By.text(DENY_LABEL)), UI_TIMEOUT_MS)) { break; } } onView(withText(DENY_LABEL)).perform(scrollTo(), click()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); onView(withId(R.id.accessibility_permissionDialog_title)).inRoot(isDialog()).check( doesNotExist()); scenario.moveToState(Lifecycle.State.DESTROYED); } @Test Loading @@ -130,60 +152,42 @@ public class AccessibilityShortcutChooserActivityTest { throws Exception { when(mAccessibilityManagerService.isAccessibilityTargetAllowed( eq(TEST_COMPONENT_NAME.getPackageName()), anyInt(), anyInt())).thenReturn(false); final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.onActivity(activity -> mActivity = activity); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); openShortcutsList(); onView(withText(TEST_LABEL)).perform(scrollTo(), click()); verify(mAccessibilityManagerService).sendRestrictedDialogIntent( eq(TEST_COMPONENT_NAME.getPackageName()), anyInt(), anyInt()); scenario.moveToState(Lifecycle.State.DESTROYED); } @Test public void popEditShortcutMenuList_oneHandedModeEnabled_shouldBeInListView() { TestUtils.setOneHandedModeEnabled(this, /* enabled= */ true); final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); openShortcutsList(); onView(allOf(withClassName(endsWith("ListView")), isDisplayed())).perform(swipeUp()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); mDevice.wait(Until.hasObject(By.text(ONE_HANDED_MODE)), UI_TIMEOUT_MS); onView(withText(ONE_HANDED_MODE)).inRoot(isDialog()).check(matches(isDisplayed())); scenario.moveToState(Lifecycle.State.DESTROYED); } @Test public void popEditShortcutMenuList_oneHandedModeDisabled_shouldNotBeInListView() { TestUtils.setOneHandedModeEnabled(this, /* enabled= */ false); final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); openShortcutsList(); onView(allOf(withClassName(endsWith("ListView")), isDisplayed())).perform(swipeUp()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); onView(withText(ONE_HANDED_MODE)).inRoot(isDialog()).check(doesNotExist()); scenario.moveToState(Lifecycle.State.DESTROYED); } private void openShortcutsList() { UiObject2 editButton = mDevice.findObject(By.text(EDIT_LABEL)); if (editButton != null) { editButton.click(); } mDevice.wait(Until.hasObject(By.textStartsWith(LIST_TITLE_LABEL)), UI_TIMEOUT_MS); } /** Loading Loading
core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java +50 −46 Original line number Diff line number Diff line Loading @@ -46,6 +46,10 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.os.Handler; import android.support.test.uiautomator.By; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObject2; import android.support.test.uiautomator.Until; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.IAccessibilityManager; Loading @@ -57,6 +61,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; import com.android.internal.accessibility.dialog.AccessibilityShortcutChooserActivity; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; Loading @@ -73,8 +78,14 @@ import java.util.Collections; @RunWith(AndroidJUnit4.class) public class AccessibilityShortcutChooserActivityTest { private static final String ONE_HANDED_MODE = "One-Handed mode"; private static final String DENY_LABEL = "Deny"; private static final String EDIT_LABEL = "Edit shortcuts"; private static final String LIST_TITLE_LABEL = "Choose features to use"; private static final String TEST_LABEL = "TEST_LABEL"; private static final ComponentName TEST_COMPONENT_NAME = new ComponentName("package", "class"); private static final long UI_TIMEOUT_MS = 1000; private UiDevice mDevice; private ActivityScenario<TestAccessibilityShortcutChooserActivity> mScenario; private TestAccessibilityShortcutChooserActivity mActivity; @Rule Loading @@ -92,6 +103,8 @@ public class AccessibilityShortcutChooserActivityTest { @Before public void setUp() throws Exception { mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); mDevice.wakeUp(); when(mAccessibilityServiceInfo.getResolveInfo()).thenReturn(mResolveInfo); mResolveInfo.serviceInfo = mServiceInfo; mServiceInfo.applicationInfo = mApplicationInfo; Loading @@ -102,27 +115,36 @@ public class AccessibilityShortcutChooserActivityTest { when(mAccessibilityManagerService.isAccessibilityTargetAllowed( anyString(), anyInt(), anyInt())).thenReturn(true); TestAccessibilityShortcutChooserActivity.setupForTesting(mAccessibilityManagerService); mScenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); mScenario.onActivity(activity -> mActivity = activity); mScenario.moveToState(Lifecycle.State.CREATED); mScenario.moveToState(Lifecycle.State.STARTED); mScenario.moveToState(Lifecycle.State.RESUMED); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } @After public void cleanUp() { mScenario.moveToState(Lifecycle.State.DESTROYED); } @Test public void doubleClickTestServiceAndClickDenyButton_permissionDialogDoesNotExist() { final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); openShortcutsList(); // Performing the double-click is flaky so retry if needed. for (int attempt = 1; attempt <= 2; attempt++) { onView(withText(TEST_LABEL)).perform(scrollTo(), doubleClick()); onView(withId(R.id.accessibility_permission_enable_deny_button)).perform(scrollTo(), click()); if (mDevice.wait(Until.hasObject(By.text(DENY_LABEL)), UI_TIMEOUT_MS)) { break; } } onView(withText(DENY_LABEL)).perform(scrollTo(), click()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); onView(withId(R.id.accessibility_permissionDialog_title)).inRoot(isDialog()).check( doesNotExist()); scenario.moveToState(Lifecycle.State.DESTROYED); } @Test Loading @@ -130,60 +152,42 @@ public class AccessibilityShortcutChooserActivityTest { throws Exception { when(mAccessibilityManagerService.isAccessibilityTargetAllowed( eq(TEST_COMPONENT_NAME.getPackageName()), anyInt(), anyInt())).thenReturn(false); final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.onActivity(activity -> mActivity = activity); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); openShortcutsList(); onView(withText(TEST_LABEL)).perform(scrollTo(), click()); verify(mAccessibilityManagerService).sendRestrictedDialogIntent( eq(TEST_COMPONENT_NAME.getPackageName()), anyInt(), anyInt()); scenario.moveToState(Lifecycle.State.DESTROYED); } @Test public void popEditShortcutMenuList_oneHandedModeEnabled_shouldBeInListView() { TestUtils.setOneHandedModeEnabled(this, /* enabled= */ true); final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); openShortcutsList(); onView(allOf(withClassName(endsWith("ListView")), isDisplayed())).perform(swipeUp()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); mDevice.wait(Until.hasObject(By.text(ONE_HANDED_MODE)), UI_TIMEOUT_MS); onView(withText(ONE_HANDED_MODE)).inRoot(isDialog()).check(matches(isDisplayed())); scenario.moveToState(Lifecycle.State.DESTROYED); } @Test public void popEditShortcutMenuList_oneHandedModeDisabled_shouldNotBeInListView() { TestUtils.setOneHandedModeEnabled(this, /* enabled= */ false); final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class); scenario.moveToState(Lifecycle.State.CREATED); scenario.moveToState(Lifecycle.State.STARTED); scenario.moveToState(Lifecycle.State.RESUMED); onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot( isDialog()).check(matches(isDisplayed())); onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click()); openShortcutsList(); onView(allOf(withClassName(endsWith("ListView")), isDisplayed())).perform(swipeUp()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); onView(withText(ONE_HANDED_MODE)).inRoot(isDialog()).check(doesNotExist()); scenario.moveToState(Lifecycle.State.DESTROYED); } private void openShortcutsList() { UiObject2 editButton = mDevice.findObject(By.text(EDIT_LABEL)); if (editButton != null) { editButton.click(); } mDevice.wait(Until.hasObject(By.textStartsWith(LIST_TITLE_LABEL)), UI_TIMEOUT_MS); } /** Loading