Loading services/java/com/android/server/ViewServer.java +29 −4 Original line number Diff line number Diff line Loading @@ -216,8 +216,11 @@ class ViewServer implements Runnable { 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() { Loading Loading @@ -285,21 +288,43 @@ class ViewServer implements Runnable { } } 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(); } if (mNeedWindowListUpdate) { mNeedWindowListUpdate = false; needWindowListUpdate = true; } out.write("UPDATE\n"); if (mNeedFocusedWindowUpdate) { mNeedFocusedWindowUpdate = false; needFocusedWindowUpdate = true; } } 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); } finally { Loading services/java/com/android/server/WindowManagerService.java +21 −4 Original line number Diff line number Diff line Loading @@ -494,6 +494,7 @@ public class WindowManagerService extends IWindowManager.Stub public interface WindowChangeListener { public void windowsChanged(); public void focusChanged(); } final Configuration mTempConfiguration = new Configuration(); Loading Loading @@ -4829,6 +4830,21 @@ public class WindowManagerService extends IWindowManager.Stub } } 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(); Loading Loading @@ -7716,7 +7732,7 @@ public class WindowManagerService extends IWindowManager.Stub 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; Loading Loading @@ -7768,6 +7784,7 @@ public class WindowManagerService extends IWindowManager.Stub // Ignore if process has died. } } notifyFocusChanged(); } } break; Loading Loading @@ -8048,7 +8065,7 @@ public class WindowManagerService extends IWindowManager.Stub break; } case WINDOWS_CHANGED: { case REPORT_WINDOWS_CHANGE: { if (mWindowsChanged) { synchronized (mWindowMap) { mWindowsChanged = false; Loading Loading @@ -8279,8 +8296,8 @@ public class WindowManagerService extends IWindowManager.Stub } } 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; Loading Loading
services/java/com/android/server/ViewServer.java +29 −4 Original line number Diff line number Diff line Loading @@ -216,8 +216,11 @@ class ViewServer implements Runnable { 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() { Loading Loading @@ -285,21 +288,43 @@ class ViewServer implements Runnable { } } 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(); } if (mNeedWindowListUpdate) { mNeedWindowListUpdate = false; needWindowListUpdate = true; } out.write("UPDATE\n"); if (mNeedFocusedWindowUpdate) { mNeedFocusedWindowUpdate = false; needFocusedWindowUpdate = true; } } 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); } finally { Loading
services/java/com/android/server/WindowManagerService.java +21 −4 Original line number Diff line number Diff line Loading @@ -494,6 +494,7 @@ public class WindowManagerService extends IWindowManager.Stub public interface WindowChangeListener { public void windowsChanged(); public void focusChanged(); } final Configuration mTempConfiguration = new Configuration(); Loading Loading @@ -4829,6 +4830,21 @@ public class WindowManagerService extends IWindowManager.Stub } } 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(); Loading Loading @@ -7716,7 +7732,7 @@ public class WindowManagerService extends IWindowManager.Stub 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; Loading Loading @@ -7768,6 +7784,7 @@ public class WindowManagerService extends IWindowManager.Stub // Ignore if process has died. } } notifyFocusChanged(); } } break; Loading Loading @@ -8048,7 +8065,7 @@ public class WindowManagerService extends IWindowManager.Stub break; } case WINDOWS_CHANGED: { case REPORT_WINDOWS_CHANGE: { if (mWindowsChanged) { synchronized (mWindowMap) { mWindowsChanged = false; Loading Loading @@ -8279,8 +8296,8 @@ public class WindowManagerService extends IWindowManager.Stub } } 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; Loading