Adding focus change notification

Change-Id: I49709c97aaf63bcd44695d99c61dbbee228416f4
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 833d08e..c6e5cd2 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -495,6 +495,7 @@
 
     public interface WindowChangeListener {
         public void windowsChanged();
+        public void focusChanged();
     }
 
     final Configuration mTempConfiguration = new Configuration();
@@ -4831,6 +4832,21 @@
         }
     }
 
+    private void notifyFocusChanged() {
+        WindowChangeListener[] windowChangeListeners;
+        synchronized(mWindowMap) {
+            if(mWindowChangeListeners.isEmpty()) {
+                return;
+            }
+            windowChangeListeners = new WindowChangeListener[mWindowChangeListeners.size()];
+            windowChangeListeners = mWindowChangeListeners.toArray(windowChangeListeners);
+        }
+        int N = windowChangeListeners.length;
+        for(int i = 0; i < N; i++) {
+            windowChangeListeners[i].focusChanged();
+        }
+    }
+
     private WindowState findWindow(int hashCode) {
         if (hashCode == -1) {
             return getFocusedWindow();
@@ -7720,7 +7736,7 @@
         public static final int ENABLE_SCREEN = 16;
         public static final int APP_FREEZE_TIMEOUT = 17;
         public static final int SEND_NEW_CONFIGURATION = 18;
-        public static final int WINDOWS_CHANGED = 19;
+        public static final int REPORT_WINDOWS_CHANGE = 19;
 
         private Session mLastReportedHold;
 
@@ -7772,6 +7788,7 @@
                                 // Ignore if process has died.
                             }
                         }
+                        notifyFocusChanged();
                     }
                 } break;
 
@@ -8052,7 +8069,7 @@
                     break;
                 }
 
-                case WINDOWS_CHANGED: {
+                case REPORT_WINDOWS_CHANGE: {
                     if (mWindowsChanged) {
                         synchronized (mWindowMap) {
                             mWindowsChanged = false;
@@ -8283,8 +8300,8 @@
                 }
             }
             if (mWindowsChanged && !mWindowChangeListeners.isEmpty()) {
-                mH.removeMessages(H.WINDOWS_CHANGED);
-                mH.sendMessage(mH.obtainMessage(H.WINDOWS_CHANGED));
+                mH.removeMessages(H.REPORT_WINDOWS_CHANGE);
+                mH.sendMessage(mH.obtainMessage(H.REPORT_WINDOWS_CHANGE));
             }
         } catch (RuntimeException e) {
             mInLayout = false;