Fix NotificationTest on small screen.

The send button may be hidden by IME window if the screen size is small.
This CL dismisses IME to help UiAutomator find the send button.

An alternative approach would be to scroll up the notification.
However, the fact that IME window covers notification makes it hard to
scroll the notification programatically.

Bug: 265259897
Bug: 269715255
Test: atest InputMethodStressTest:NotificationTest#testDirectReply
Change-Id: Iad6dd98b01a3ba6824c1bc3ad8b4d9c9a648ad96
This commit is contained in:
Kohsuke Yatoh
2023-02-28 13:19:32 +00:00
parent c605985f51
commit 6639d6e2d9

View File

@@ -42,6 +42,7 @@ import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.BySelector;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.UiObject2;
import androidx.test.uiautomator.Until;
import org.junit.After;
@@ -74,7 +75,7 @@ public final class NotificationTest {
// This is for AOSP System UI for phones. When testing customized System UI, please modify here.
private static final BySelector REPLY_SEND_BUTTON_SELECTOR =
By.res("com.android.systemui", "remote_input_send");
By.res("com.android.systemui", "remote_input_send").enabled(true);
@Rule
public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
@@ -119,7 +120,15 @@ public final class NotificationTest {
mUiDevice.pressKeyCode(KeyEvent.KEYCODE_A);
mUiDevice.pressKeyCode(KeyEvent.KEYCODE_B);
mUiDevice.pressKeyCode(KeyEvent.KEYCODE_C);
mUiDevice.wait(Until.findObject(REPLY_SEND_BUTTON_SELECTOR.enabled(true)), TIMEOUT).click();
UiObject2 sendButton = mUiDevice.wait(
Until.findObject(REPLY_SEND_BUTTON_SELECTOR), TIMEOUT);
if (sendButton == null) {
// If the screen is too small, sendButton may be hidden by IME.
// Dismiss IME and try again.
mUiDevice.pressBack();
sendButton = mUiDevice.wait(Until.findObject(REPLY_SEND_BUTTON_SELECTOR), TIMEOUT);
}
sendButton.click();
// Verify that IME is gone.
assertThat(mUiDevice.wait(Until.gone(By.pkg(getImePackage(mContext))), TIMEOUT)).isTrue();
}