Merge "Fix event dispatcher problem when event is posted" into lmp-mr1-wfc-dev
automerge: e710854
* commit 'e710854c4e7ac87b98bf137fb66d83d226c105df':
Fix event dispatcher problem when event is posted
diff --git a/Common/src/com/googlecode/android_scripting/facade/EventFacade.java b/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
index a459155..4b65c99 100644
--- a/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
@@ -176,6 +176,7 @@
@RpcParameter(name = "timeout", description = "the maximum time to wait (in ms)") @RpcOptional Integer timeout)
throws InterruptedException {
Event result = null;
+ final FutureResult<Event> futureEvent;
synchronized (mEventQueue) { // First check to make sure it isn't already there
for (Event event : mEventQueue) {
if (event.getName().equals(eventName)) {
@@ -185,27 +186,31 @@
return result;
}
}
- }
- final FutureResult<Event> futureEvent = new FutureResult<Event>();
- addNamedEventObserver(eventName, new EventObserver() {
- @Override
- public void onEventReceived(Event event) {
- if (event.getName().equals(eventName)) {
- synchronized (futureEvent) {
- if (!futureEvent.isDone()) {
- futureEvent.set(event);
- removeEventObserver(this);
+ futureEvent = new FutureResult<Event>();
+ addNamedEventObserver(eventName, new EventObserver() {
+ @Override
+ public void onEventReceived(Event event) {
+ if (event.getName().equals(eventName)) {
+ synchronized (futureEvent) {
+ if (!futureEvent.isDone()) {
+ futureEvent.set(event);
+ //TODO(navtej) Remove log.
+ Log.v(String.format("Removeing observer (%s) got event (%s)",this, event));
+ removeEventObserver(this);
+ }
+ if(removeEvent)
+ mEventQueue.remove(event);
}
- if(removeEvent)
- mEventQueue.remove(event);
}
}
+ });
+ }
+ if (futureEvent != null) {
+ if (timeout != null) {
+ result = futureEvent.get(timeout, TimeUnit.MILLISECONDS);
+ } else {
+ result = futureEvent.get();
}
- });
- if (timeout != null) {
- result = futureEvent.get(timeout, TimeUnit.MILLISECONDS);
- } else {
- result = futureEvent.get();
}
return result;
}
@@ -216,24 +221,26 @@
throws InterruptedException {
Event result = null;
final FutureResult<Event> futureEvent = new FutureResult<Event>();
+ EventObserver observer;
synchronized (mEventQueue) { // Anything in queue?
if (mEventQueue.size() > 0) {
- return mEventQueue.poll(); // return it.
+ return mEventQueue.poll(); // return it.
}
- }
- EventObserver observer = new EventObserver() {
- @Override
- public void onEventReceived(Event event) { // set up observer for any events.
- synchronized (futureEvent) {
- if (!futureEvent.isDone()) {
- futureEvent.set(event);
+ observer = new EventObserver() {
+ @Override
+ public void onEventReceived(Event event) { // set up observer for any events.
+ synchronized (futureEvent) {
+ if (!futureEvent.isDone()) {
+ futureEvent.set(event);
+ //TODO(navtej) Remove log.
+ Log.v(String.format("onEventReceived for event (%s)", event));
+ }
+ mEventQueue.remove(event);
}
- removeEventObserver(this);
- mEventQueue.remove(event);
}
- }
- };
- addGlobalEventObserver(observer);
+ };
+ addGlobalEventObserver(observer);
+ }
if (timeout != null) {
result = futureEvent.get(timeout, TimeUnit.MILLISECONDS);
if(result == null){
@@ -242,7 +249,11 @@
} else {
result = futureEvent.get();
}
- removeEventObserver(observer); // Make quite sure this goes away.
+ //TODO(navtej) Remove log.
+ Log.v(String.format("Removeing observer (%s) got event (%s)", observer, result ));
+ if (observer != null) {
+ removeEventObserver(observer); // Make quite sure this goes away.
+ }
return result;
}
@@ -291,6 +302,8 @@
}
}
synchronized (mGlobalEventObservers) {
+ //TODO(navtej) Remove log.
+ Log.v(String.format("mGlobalEventObservers size (%s)", mGlobalEventObservers.size()));
for (EventObserver observer : mGlobalEventObservers) {
observer.onEventReceived(event);
}
@@ -344,6 +357,7 @@
}
bEventServerRunning = false;
mEventServer.shutdown();
+ Log.v(String.format("stopEventDispatcher (%s)", mEventServer ));
removeEventObserver(mEventServer);
mEventServer = null;
}