Introduce multiple displays with DisplayContent.
Fix a couple of bugs that turned up.
Remove touch/focus from display. Add iterators for access.
Respond to comments. Remove TODOs, and some deviceId parameters.
Change-Id: Idcdb4f1979aa7b14634d450fd0333d6eff26994d
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index aff519e..43ff3987 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -35,6 +35,7 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;
+import android.view.DisplayInfo;
import android.view.Gravity;
import android.view.IApplicationToken;
import android.view.IWindow;
@@ -47,6 +48,9 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+class WindowList extends ArrayList<WindowState> {
+}
+
/**
* A window in the window manager.
*/
@@ -251,18 +255,18 @@
boolean mHasSurface = false;
- int mDisplayId;
+ DisplayContent mDisplayContent;
WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token,
WindowState attachedWindow, int seq, WindowManager.LayoutParams a,
- int viewVisibility, int displayId) {
+ int viewVisibility, final DisplayContent displayContent) {
mService = service;
mSession = s;
mClient = c;
mToken = token;
mAttrs.copyFrom(a);
mViewVisibility = viewVisibility;
- mDisplayId = displayId;
+ mDisplayContent = displayContent;
mPolicy = mService.mPolicy;
mContext = mService.mContext;
DeathRecipient deathRecipient = new DeathRecipient();
@@ -346,7 +350,8 @@
mYOffset = 0;
mLayer = 0;
mInputWindowHandle = new InputWindowHandle(
- mAppToken != null ? mAppToken.mInputApplicationHandle : null, this);
+ mAppToken != null ? mAppToken.mInputApplicationHandle : null, this,
+ displayContent.getDisplayId());
}
void attach() {
@@ -482,8 +487,9 @@
}
if (mIsWallpaper && (fw != frame.width() || fh != frame.height())) {
- mService.updateWallpaperOffsetLocked(this,
- mService.mDisplayInfo.appWidth, mService.mDisplayInfo.appHeight, false);
+ final DisplayInfo displayInfo = mDisplayContent.getDisplayInfo();
+ mService.updateWallpaperOffsetLocked(this, displayInfo.appWidth, displayInfo.appHeight,
+ false);
}
if (WindowManagerService.localLOGV) {
@@ -547,6 +553,7 @@
public boolean getNeedsMenuLw(WindowManagerPolicy.WindowState bottom) {
int index = -1;
WindowState ws = this;
+ WindowList windows = getWindowList();
while (true) {
if ((ws.mAttrs.privateFlags
& WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY) != 0) {
@@ -561,13 +568,13 @@
// look behind it.
// First, we may need to determine the starting position.
if (index < 0) {
- index = mService.mWindows.indexOf(ws);
+ index = windows.indexOf(ws);
}
index--;
if (index < 0) {
return false;
}
- ws = mService.mWindows.get(index);
+ ws = windows.get(index);
}
}
@@ -991,8 +998,13 @@
}
}
+ WindowList getWindowList() {
+ return mDisplayContent.getWindowList();
+ }
+
void dump(PrintWriter pw, String prefix, boolean dumpAll) {
- pw.print(prefix); pw.print("mSession="); pw.print(mSession);
+ pw.print(prefix); pw.print("mDisplayId="); pw.print(mDisplayContent.getDisplayId());
+ pw.print(" mSession="); pw.print(mSession);
pw.print(" mClient="); pw.println(mClient.asBinder());
pw.print(prefix); pw.print("mAttrs="); pw.println(mAttrs);
pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth);