summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2013-05-24 12:50:15 -0700
committerCraig Mautner <cmautner@google.com>2013-05-24 12:50:15 -0700
commit5ff12101722874f5e7b0cadf06f4c53f4ec4b917 (patch)
treead1a1d7af2e94046c486e3cca357a5be6ad3bf4f /services/java
parent6d90fed076fad7874e04833110bb1d63cdbc7eac (diff)
downloadframeworks_base-5ff12101722874f5e7b0cadf06f4c53f4ec4b917.zip
frameworks_base-5ff12101722874f5e7b0cadf06f4c53f4ec4b917.tar.gz
frameworks_base-5ff12101722874f5e7b0cadf06f4c53f4ec4b917.tar.bz2
Add retrieval of StackBox info for more flexibility
First step in permitting StackBoxes to be manipulated by user. Necessary for Configuration changes coming down. Change-Id: I4029926a35e4fdc59a5759fd9e4bae10bb308413
Diffstat (limited to 'services/java')
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java32
-rw-r--r--services/java/com/android/server/wm/DisplayContent.java27
-rw-r--r--services/java/com/android/server/wm/StackBox.java9
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java7
4 files changed, 74 insertions, 1 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index dcb2984..603a6ed 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -58,6 +58,8 @@ import org.xmlpull.v1.XmlSerializer;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
+import android.app.ActivityManager.StackBoxInfo;
+import android.app.ActivityManager.StackInfo;
import android.app.ActivityManagerNative;
import android.app.ActivityOptions;
import android.app.ActivityThread;
@@ -6352,7 +6354,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
@Override
- public List<ActivityManager.StackInfo> getStacks() {
+ public List<StackInfo> getStacks() {
synchronized (this) {
ArrayList<ActivityManager.StackInfo> list = new ArrayList<ActivityManager.StackInfo>();
ArrayList<ActivityStack> stacks = mStackSupervisor.getStacks();
@@ -6381,6 +6383,34 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
+ private void addStackInfoToStackBoxInfo(StackBoxInfo stackBoxInfo, List<StackInfo> stackInfos) {
+ final int stackId = stackBoxInfo.stackId;
+ if (stackId >= 0) {
+ for (StackInfo stackInfo : stackInfos) {
+ if (stackId == stackInfo.stackId) {
+ stackBoxInfo.stack = stackInfo;
+ stackInfos.remove(stackInfo);
+ return;
+ }
+ }
+ } else {
+ addStackInfoToStackBoxInfo(stackBoxInfo.children[0], stackInfos);
+ addStackInfoToStackBoxInfo(stackBoxInfo.children[1], stackInfos);
+ }
+ }
+
+ @Override
+ public List<StackBoxInfo> getStackBoxes() {
+ List<StackBoxInfo> stackBoxInfos = mWindowManager.getStackBoxInfos();
+ synchronized (this) {
+ List<StackInfo> stackInfos = getStacks();
+ for (StackBoxInfo stackBoxInfo : stackBoxInfos) {
+ addStackInfoToStackBoxInfo(stackBoxInfo, stackInfos);
+ }
+ }
+ return stackBoxInfos;
+ }
+
@Override
public int getTaskForActivity(IBinder token, boolean onlyRoot) {
synchronized(this) {
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()) {