Adding focus change notification

Change-Id: I49709c97aaf63bcd44695d99c61dbbee228416f4
diff --git a/services/java/com/android/server/ViewServer.java b/services/java/com/android/server/ViewServer.java
index 9c7db9b..b369f71 100644
--- a/services/java/com/android/server/ViewServer.java
+++ b/services/java/com/android/server/ViewServer.java
@@ -216,8 +216,11 @@
     class ViewServerWorker implements Runnable, WindowManagerService.WindowChangeListener {
         private Socket mClient;
         private boolean mNeedWindowListUpdate;
+        private boolean mNeedFocusedWindowUpdate;
         public ViewServerWorker(Socket client) {
             mClient = client;
+            mNeedWindowListUpdate = false;
+            mNeedFocusedWindowUpdate = false;
         }
 
         public void run() {
@@ -285,20 +288,42 @@
             }
         }
 
+        public void focusChanged() {
+            synchronized(this) {
+                mNeedFocusedWindowUpdate = true;
+                notifyAll();
+            }
+        }
+
         private boolean windowManagerAutolistLoop() {
             mWindowManager.addWindowChangeListener(this);
             BufferedWriter out = null;
             try {
                 out = new BufferedWriter(new OutputStreamWriter(mClient.getOutputStream()));
                 while (!Thread.interrupted()) {
+                    boolean needWindowListUpdate = false;
+                    boolean needFocusedWindowUpdate = false;
                     synchronized (this) {
-                        while (!mNeedWindowListUpdate) {
+                        while (!mNeedWindowListUpdate && !mNeedFocusedWindowUpdate) {
                             wait();
                         }
-                        mNeedWindowListUpdate = false;
+                        if (mNeedWindowListUpdate) {
+                            mNeedWindowListUpdate = false;
+                            needWindowListUpdate = true;
+                        }
+                        if (mNeedFocusedWindowUpdate) {
+                            mNeedFocusedWindowUpdate = false;
+                            needFocusedWindowUpdate = true;
+                        }
                     }
-                    out.write("UPDATE\n");
-                    out.flush();
+                    if(needWindowListUpdate) {
+                        out.write("LIST UPDATE\n");
+                        out.flush();
+                    }
+                    if(needFocusedWindowUpdate) {
+                        out.write("FOCUS UPDATE\n");
+                        out.flush();
+                    }
                 }
             } catch (Exception e) {
                 Slog.w(LOG_TAG, "Connection error: ", e);