diff options
Diffstat (limited to 'services/java/com/android/server/wm')
3 files changed, 43 insertions, 0 deletions
diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java index 0dbcfb8..8ad2ef1 100644 --- a/services/java/com/android/server/wm/DisplayContent.java +++ b/services/java/com/android/server/wm/DisplayContent.java @@ -21,6 +21,7 @@ import static com.android.server.wm.WindowManagerService.DEBUG_STACK; import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY; import static com.android.server.wm.WindowManagerService.TAG; +import android.app.ActivityManager.StackBoxInfo; import android.graphics.Rect; import android.graphics.Region; import android.util.Slog; @@ -284,6 +285,32 @@ class DisplayContent { mStackBoxes.remove(box); } + StackBoxInfo getStackBoxInfo(StackBox box) { + StackBoxInfo info = new StackBoxInfo(); + info.stackBoxId = box.mStackBoxId; + info.weight = box.mWeight; + info.vertical = box.mVertical; + info.bounds = new Rect(box.mBounds); + if (box.mStack != null) { + info.stackId = box.mStack.mStackId; + // ActivityManagerService will fill in the StackInfo. + } else { + info.stackId = -1; + info.children = new StackBoxInfo[2]; + info.children[0] = getStackBoxInfo(box.mFirst); + info.children[1] = getStackBoxInfo(box.mSecond); + } + return info; + } + + ArrayList<StackBoxInfo> getStackBoxInfos() { + ArrayList<StackBoxInfo> list = new ArrayList<StackBoxInfo>(); + for (int stackBoxNdx = mStackBoxes.size() - 1; stackBoxNdx >= 0; --stackBoxNdx) { + list.add(getStackBoxInfo(mStackBoxes.get(stackBoxNdx))); + } + return list; + } + /** * Move the home StackBox to the top or bottom of mStackBoxes. That is the only place * it is allowed to be. This is a nop if the home StackBox is already in the correct position. diff --git a/services/java/com/android/server/wm/StackBox.java b/services/java/com/android/server/wm/StackBox.java index 3bd1d4c..e2fd105 100644 --- a/services/java/com/android/server/wm/StackBox.java +++ b/services/java/com/android/server/wm/StackBox.java @@ -39,6 +39,11 @@ public class StackBox { /** Used with {@link WindowManagerService#createStack}. Put on a lower layer on display. */ public static final int TASK_STACK_GOES_UNDER = 5; + static int sCurrentBoxId = 0; + + /** Unique id for this box */ + final int mStackBoxId; + /** The service */ final WindowManagerService mService; @@ -74,6 +79,10 @@ public class StackBox { Rect mTmpRect = new Rect(); StackBox(WindowManagerService service, DisplayContent displayContent, StackBox parent) { + synchronized (StackBox.class) { + mStackBoxId = sCurrentBoxId++; + } + mService = service; mDisplayContent = displayContent; mParent = parent; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 3ebe083..d19fb2d 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -43,6 +43,7 @@ import com.android.server.power.PowerManagerService; import com.android.server.power.ShutdownThread; import android.Manifest; +import android.app.ActivityManager.StackBoxInfo; import android.app.ActivityManagerNative; import android.app.IActivityManager; import android.app.StatusBarManager; @@ -4882,6 +4883,12 @@ public class WindowManagerService extends IWindowManager.Stub } } + public ArrayList<StackBoxInfo> getStackBoxInfos() { + synchronized(mWindowMap) { + return getDefaultDisplayContentLocked().getStackBoxInfos(); + } + } + public Rect getStackBounds(int stackId) { DisplayContentsIterator iterator = new DisplayContentsIterator(); while (iterator.hasNext()) { |