Merge "Inter process interrogation ocassionally gets stuck."
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
index 071701e..25b980b 100644
--- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -104,6 +104,7 @@
public void setSameThreadMessage(Message message) {
synchronized (mInstanceLock) {
mSameThreadMessage = message;
+ mInstanceLock.notifyAll();
}
}
@@ -125,7 +126,6 @@
Thread.currentThread().getId());
// If the scale is zero the call has failed.
if (windowScale > 0) {
- handleSameThreadMessageIfNeeded();
AccessibilityNodeInfo info = getFindAccessibilityNodeInfoResultAndClear(
interactionId);
finalizeAccessibilityNodeInfo(info, connection, windowScale);
@@ -142,7 +142,7 @@
* in the currently active window and starts from the root View in the window.
*
* @param connection A connection for interacting with the system.
- * @param id The id of the node.
+ * @param viewId The id of the view.
* @return An {@link AccessibilityNodeInfo} if found, null otherwise.
*/
public AccessibilityNodeInfo findAccessibilityNodeInfoByViewIdInActiveWindow(
@@ -153,7 +153,6 @@
viewId, interactionId, this, Thread.currentThread().getId());
// If the scale is zero the call has failed.
if (windowScale > 0) {
- handleSameThreadMessageIfNeeded();
AccessibilityNodeInfo info = getFindAccessibilityNodeInfoResultAndClear(
interactionId);
finalizeAccessibilityNodeInfo(info, connection, windowScale);
@@ -182,7 +181,6 @@
text, interactionId, this, Thread.currentThread().getId());
// If the scale is zero the call has failed.
if (windowScale > 0) {
- handleSameThreadMessageIfNeeded();
List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
interactionId);
finalizeAccessibilityNodeInfos(infos, connection, windowScale);
@@ -217,7 +215,6 @@
Thread.currentThread().getId());
// If the scale is zero the call has failed.
if (windowScale > 0) {
- handleSameThreadMessageIfNeeded();
List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
interactionId);
finalizeAccessibilityNodeInfos(infos, connection, windowScale);
@@ -246,7 +243,6 @@
accessibilityWindowId, accessibilityViewId, action, interactionId, this,
Thread.currentThread().getId());
if (success) {
- handleSameThreadMessageIfNeeded();
return getPerformAccessibilityActionResult(interactionId);
}
} catch (RemoteException re) {
@@ -363,6 +359,11 @@
final long startTimeMillis = SystemClock.uptimeMillis();
while (true) {
try {
+ Message sameProcessMessage = getSameProcessMessageAndClear();
+ if (sameProcessMessage != null) {
+ sameProcessMessage.getTarget().handleMessage(sameProcessMessage);
+ }
+
if (mInteractionId == interactionId) {
return true;
}
@@ -402,17 +403,6 @@
}
/**
- * Handles the message stored if the interacted and interacting
- * threads are the same otherwise this is a NOP.
- */
- private void handleSameThreadMessageIfNeeded() {
- Message sameProcessMessage = getSameProcessMessageAndClear();
- if (sameProcessMessage != null) {
- sameProcessMessage.getTarget().handleMessage(sameProcessMessage);
- }
- }
-
- /**
* Finalize an {@link AccessibilityNodeInfo} before passing it to the client.
*
* @param info The info.