StackBox.java revision 9e4f28cfa157fff89e42859edc9cce546508491f
1c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner/* 2c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * Copyright (C) 2013 The Android Open Source Project 3c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * 4c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * Licensed under the Apache License, Version 2.0 (the "License"); 5c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * you may not use this file except in compliance with the License. 6c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * You may obtain a copy of the License at 7c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * 8c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * http://www.apache.org/licenses/LICENSE-2.0 9c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * 10c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * Unless required by applicable law or agreed to in writing, software 11c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * distributed under the License is distributed on an "AS IS" BASIS, 12c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * See the License for the specific language governing permissions and 14c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner * limitations under the License. 15c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner */ 16c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 17c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautnerpackage com.android.server.wm; 18c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 19c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautnerimport android.graphics.Rect; 20c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 219e4f28cfa157fff89e42859edc9cce546508491fCraig Mautnerimport static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID; 229e4f28cfa157fff89e42859edc9cce546508491fCraig Mautner 2300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautnerimport java.io.PrintWriter; 24d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautnerimport java.util.ArrayList; 25d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner 26c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautnerpublic class StackBox { 27c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner /** For use with {@link WindowManagerService#createStack} */ 28c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner public static final int TASK_STACK_GOES_BEFORE = 0; 29c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner public static final int TASK_STACK_GOES_AFTER = 1; 30c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner public static final int TASK_STACK_GOES_ABOVE = 2; 31c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner public static final int TASK_STACK_GOES_BELOW = 3; 32c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner public static final int TASK_STACK_GOES_OVER = 4; 33c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner public static final int TASK_STACK_GOES_UNDER = 5; 34c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 3500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** The display this box sits in. */ 36c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner final DisplayContent mDisplayContent; 3700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 3800af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Non-null indicates this is mFirst or mSecond of a parent StackBox. Null indicates this 3900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * is this entire size of mDisplayContent. */ 40c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner StackBox mParent; 4100af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 4200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** First child, this is null exactly when mStack is non-null. */ 43c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner StackBox mFirst; 4400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 4500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Second child, this is null exactly when mStack is non-null. */ 46c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner StackBox mSecond; 4700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 4800af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Stack of Tasks, this is null exactly when mFirst and mSecond are non-null. */ 49c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner TaskStack mStack; 5000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 5100af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Content limits relative to the DisplayContent this sits in. */ 52c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner Rect mBounds; 5300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 5400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Relative orientation of mFirst and mSecond. */ 5500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner boolean mVertical; 5600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 5700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Dirty flag. Something inside this or some descendant of this has changed. */ 58c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner boolean layoutNeeded; 5900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 6000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Used to keep from reallocating a temporary array to hold the list of Tasks below */ 61d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner ArrayList<Task> mTmpTasks = new ArrayList<Task>(); 62c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 63c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner StackBox(DisplayContent displayContent, Rect bounds) { 64c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mDisplayContent = displayContent; 65c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mBounds = bounds; 66c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 67c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 68c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner /** Propagate #layoutNeeded bottom up. */ 69c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner void makeDirty() { 70c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner layoutNeeded = true; 71c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (mParent != null) { 72c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mParent.makeDirty(); 73c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 74c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 75c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 76c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner /** Propagate #layoutNeeded top down. */ 77c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner void makeClean() { 78c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner layoutNeeded = false; 79c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (mFirst != null) { 80c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mFirst.makeClean(); 81c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mSecond.makeClean(); 82c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 83c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 84c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 8500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** 8600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * Detremine if a particular TaskStack is in this StackBox or any of its descendants. 8700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @param stackId The TaskStack being considered. 8800af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @return true if the specified TaskStack is in this box or its descendants. False otherwise. 8900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner */ 9000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner boolean contains(int stackId) { 9100af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner if (mStack != null) { 9200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner return mStack.mStackId == stackId; 9300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner } 9400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner return mFirst.contains(stackId) || mSecond.contains(stackId); 9500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner } 9600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 9700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** 9800af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * Create a new TaskStack relative to a specified one by splitting the StackBox containing 9900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * the specified TaskStack into two children. The size and position each of the new StackBoxes 10000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * is determined by the passed parameters. 10100af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @param stackId The id of the new TaskStack to create. 10200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @param relativeStackId The id of the TaskStack to place the new one next to. 10300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @param position One of the static TASK_STACK_GOES_xxx positions defined in this class. 10400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @param weight The percentage size of the parent StackBox to devote to the new TaskStack. 10500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @return The new TaskStack. 10600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner */ 107c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner TaskStack split(int stackId, int relativeStackId, int position, float weight) { 108c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (mStack != null) { 109c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (mStack.mStackId == relativeStackId) { 110c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner // Found it! 111c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner TaskStack stack = new TaskStack(stackId, this); 112c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner TaskStack firstStack; 113c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner TaskStack secondStack; 114c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner int width, height, split; 115c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner switch (position) { 116c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner default: 117c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner case TASK_STACK_GOES_BEFORE: 118c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner case TASK_STACK_GOES_AFTER: 119c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mVertical = false; 120c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner width = (int)(weight * mBounds.width()); 121c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner height = mBounds.height(); 122c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (position == TASK_STACK_GOES_BEFORE) { 123c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner firstStack = stack; 124c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner secondStack = mStack; 125c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner split = mBounds.left + width; 126c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } else { 127c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner firstStack = mStack; 128c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner secondStack = stack; 129c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner split = mBounds.right - width; 130c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 131c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner break; 132c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner case TASK_STACK_GOES_ABOVE: 133c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner case TASK_STACK_GOES_BELOW: 134c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mVertical = true; 135c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner width = mBounds.width(); 136c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner height = (int)(weight * mBounds.height()); 137c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (position == TASK_STACK_GOES_ABOVE) { 138c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner firstStack = stack; 139c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner secondStack = mStack; 140c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner split = mBounds.top + height; 141c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } else { 142c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner firstStack = mStack; 143c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner secondStack = stack; 144c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner split = mBounds.bottom - height; 145c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 146c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner break; 147c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 148c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mFirst = new StackBox(mDisplayContent, new Rect(mBounds.left, mBounds.top, 149c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mVertical ? mBounds.right : split, mVertical ? split : mBounds.bottom)); 150c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mFirst.mStack = firstStack; 151c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mSecond = new StackBox(mDisplayContent, new Rect(mVertical ? mBounds.left : split, 152c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mVertical ? split : mBounds.top, mBounds.right, mBounds.bottom)); 153c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mSecond.mStack = secondStack; 154c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mStack = null; 155c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner return stack; 156c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 15700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner // Not the intended TaskStack. 158c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner return null; 159c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 160c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 161c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner // Propagate the split to see if the target task stack is in either sub box. 162c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner TaskStack stack = mFirst.split(stackId, relativeStackId, position, weight); 163c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (stack != null) { 164c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner return stack; 165c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 166c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner return mSecond.split(stackId, relativeStackId, position, weight); 167c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 168c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 16900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** 17000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @return List of all Tasks underneath this StackBox. The order is currently mFirst followed 17100af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * by mSecond putting mSecond Tasks more recent than mFirst Tasks. 17200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * TODO: Change to MRU ordering. 17300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner */ 174d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner ArrayList<Task> getTasks() { 175d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner mTmpTasks.clear(); 176d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner if (mStack != null) { 177d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner mTmpTasks.addAll(mStack.getTasks()); 178d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner } else { 179d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner mTmpTasks.addAll(mFirst.getTasks()); 180d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner mTmpTasks.addAll(mSecond.getTasks()); 181d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner } 182d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner return mTmpTasks; 183d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner } 184d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner 18500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Combine a child StackBox into its parent. 18600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @param child The surviving child to be merge up into this StackBox. */ 18700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner void absorb(StackBox child) { 18800af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mFirst = child.mFirst; 18900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mSecond = child.mSecond; 19000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mStack = child.mStack; 191c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner layoutNeeded = true; 192c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 193c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 19400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Return the stackId of the first mFirst StackBox with a non-null mStack */ 19500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner int getStackId() { 19600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner if (mStack != null) { 19700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner return mStack.mStackId; 198c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 19900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner return mFirst.getStackId(); 200c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 201c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 20200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** Remove this box and propagate its sibling's content up to their parent. 20300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner * @return The first stackId of the resulting StackBox. */ 20400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner int removeStack() { 2059e4f28cfa157fff89e42859edc9cce546508491fCraig Mautner if (mParent == null) { 2069e4f28cfa157fff89e42859edc9cce546508491fCraig Mautner mDisplayContent.removeStackBox(this); 2079e4f28cfa157fff89e42859edc9cce546508491fCraig Mautner return HOME_STACK_ID; 2089e4f28cfa157fff89e42859edc9cce546508491fCraig Mautner } 20900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner if (mParent.mFirst == this) { 21000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mParent.absorb(mParent.mSecond); 21100af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner } else { 21200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mParent.absorb(mParent.mFirst); 213c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 21400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mParent.makeDirty(); 21500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner return getStackId(); 216c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 217c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 21800af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner /** TODO: */ 219c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner boolean resize(int stackId, float weight) { 220c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner return false; 221c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 22200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner 22300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner public void dump(String prefix, PrintWriter pw) { 22400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner pw.print(prefix); pw.print("mParent="); pw.println(mParent); 22500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner pw.print(prefix); pw.print("mFirst="); pw.println(mFirst); 22600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner pw.print(prefix); pw.print("mSecond="); pw.println(mSecond); 22700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner pw.print(prefix); pw.print("mBounds="); pw.print(mBounds.toShortString()); 2289e4f28cfa157fff89e42859edc9cce546508491fCraig Mautner pw.print(" mVertical="); pw.print(mVertical); 2299e4f28cfa157fff89e42859edc9cce546508491fCraig Mautner pw.print(" layoutNeeded="); pw.println(layoutNeeded); 23000af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner if (mStack != null) { 23100af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner pw.print(prefix); pw.print("mStack="); pw.println(mStack); 23200af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mStack.dump(prefix + " ", pw); 23300af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner } else { 23400af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner pw.print(prefix); pw.print("mFirst="); pw.println(mStack); 23500af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mFirst.dump(prefix + " ", pw); 23600af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner pw.print(prefix); pw.print("mSecond="); pw.println(mStack); 23700af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner mSecond.dump(prefix + " ", pw); 23800af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner } 23900af9fe6ae0da5b716212fa754163d90b60c1ee6Craig Mautner } 240c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner} 241