Merge changes from topic "BackportUiAutomatorRetry" am: ff062f6e73 am: ed29b2da3c am: 0c6faf40fd
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1471402
Change-Id: I78fcebc34c06e43f607a566f2b3d2faa78f6520b
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 721525d..2ef147b 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -62,6 +62,7 @@
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeoutException;
/**
* Base class for implementing application instrumentation code. When running
@@ -90,6 +91,8 @@
private static final String TAG = "Instrumentation";
+ private static final long CONNECT_TIMEOUT_MILLIS = 5000;
+
/**
* @hide
*/
@@ -2125,6 +2128,13 @@
* Equivalent to {@code getUiAutomation(0)}. If a {@link UiAutomation} exists with different
* flags, the flags on that instance will be changed, and then it will be returned.
* </p>
+ * <p>
+ * Compatibility mode: This method is infallible for apps targeted for
+ * {@link Build.VERSION_CODES#R} and earlier versions; for apps targeted for later versions, it
+ * will return null if {@link UiAutomation} fails to connect. The caller can check the return
+ * value and retry on error.
+ * </p>
+ *
* @return The UI automation instance.
*
* @see UiAutomation
@@ -2152,6 +2162,12 @@
* If a {@link UiAutomation} exists with different flags, the flags on that instance will be
* changed, and then it will be returned.
* </p>
+ * <p>
+ * Compatibility mode: This method is infallible for apps targeted for
+ * {@link Build.VERSION_CODES#R} and earlier versions; for apps targeted for later versions, it
+ * will return null if {@link UiAutomation} fails to connect. The caller can check the return
+ * value and retry on error.
+ * </p>
*
* @param flags The flags to be passed to the UiAutomation, for example
* {@link UiAutomation#FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES}.
@@ -2173,8 +2189,17 @@
} else {
mUiAutomation.disconnect();
}
- mUiAutomation.connect(flags);
- return mUiAutomation;
+ if (getTargetContext().getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.R) {
+ mUiAutomation.connect(flags);
+ return mUiAutomation;
+ }
+ try {
+ mUiAutomation.connectWithTimeout(flags, CONNECT_TIMEOUT_MILLIS);
+ return mUiAutomation;
+ } catch (TimeoutException e) {
+ mUiAutomation.destroy();
+ mUiAutomation = null;
+ }
}
return null;
}