Task.java revision 466f3216505bd039a285881e06ead631331fe368
1b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner/* 2b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * Copyright (C) 2013 The Android Open Source Project 3b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * 4b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * Licensed under the Apache License, Version 2.0 (the "License"); 5b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * you may not use this file except in compliance with the License. 6b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * You may obtain a copy of the License at 7b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * 8b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * http://www.apache.org/licenses/LICENSE-2.0 9b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * 10b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * Unless required by applicable law or agreed to in writing, software 11b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * distributed under the License is distributed on an "AS IS" BASIS, 12b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * See the License for the specific language governing permissions and 14b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner * limitations under the License. 15b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner */ 16b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner 17b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautnerpackage com.android.server.wm; 18b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner 19466f3216505bd039a285881e06ead631331fe368Filip Gruszczynskiimport static android.app.ActivityManager.DOCKED_STACK_ID; 2042bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautnerimport static com.android.server.wm.WindowManagerService.TAG; 21e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport static com.android.server.wm.WindowManagerService.DEBUG_RESIZE; 22e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautnerimport static com.android.server.wm.WindowManagerService.DEBUG_STACK; 23234dbf875f795fdb72f82dc6ea805201ee31fb0eStefan Kuhneimport static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID; 2442bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner 25e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport android.content.res.Configuration; 26e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport android.graphics.Rect; 272c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautnerimport android.util.EventLog; 2842bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautnerimport android.util.Slog; 29e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport android.util.SparseArray; 30e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport android.util.TypedValue; 31e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport android.view.DisplayInfo; 32e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport android.view.Surface; 33e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 34e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautnerimport com.android.server.EventLogTags; 352c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner 36e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport java.io.PrintWriter; 37e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleimport java.util.ArrayList; 38e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 39e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwaleclass Task implements DimLayer.DimLayerUser { 40e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale /** Amount of time in milliseconds to animate the dim surface from one value to another, 41e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale * when no window animation is driving it. */ 42e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private static final int DEFAULT_DIM_DURATION = 200; 43e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 442cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale // Return value from {@link setBounds} indicating no change was made to the Task bounds. 452cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale static final int BOUNDS_CHANGE_NONE = 0; 462cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale // Return value from {@link setBounds} indicating the position of the Task bounds changed. 472cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale static final int BOUNDS_CHANGE_POSITION = 1; 482cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale // Return value from {@link setBounds} indicating the size of the Task bounds changed. 492cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale static final int BOUNDS_CHANGE_SIZE = 1 << 1; 502cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale 51c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner TaskStack mStack; 5205d6272bad2d707b488a6f8784ce8aea5e25b110Craig Mautner final AppTokenList mAppTokens = new AppTokenList(); 5383162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner final int mTaskId; 54ac6f843c917b68ea8805711965b149a9338e3a0eCraig Mautner final int mUserId; 559ef471f7f2f59de032d7cb9c3c7241486109979eCraig Mautner boolean mDeferRemoval = false; 56e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner final WindowManagerService mService; 57b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner 58e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Content limits relative to the DisplayContent this sits in. 59e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private Rect mBounds = new Rect(); 60e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 61e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Device rotation as of the last time {@link #mBounds} was set. 62e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale int mRotation; 63e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 64e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Whether mBounds is fullscreen 65e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private boolean mFullscreen = true; 66e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 67e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Contains configurations settings that are different from the global configuration due to 68e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // stack specific operations. E.g. {@link #setBounds}. 69e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale Configuration mOverrideConfig; 70e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 71e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // For comparison with DisplayContent bounds. 72e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private Rect mTmpRect = new Rect(); 73e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // For handling display rotations. 74e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private Rect mTmpRect2 = new Rect(); 75e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 763005e75585dcda30b64603e320e0711b583624ddChong Zhang // Whether the task is currently being drag-resized 773005e75585dcda30b64603e320e0711b583624ddChong Zhang private boolean mDragResizing; 783005e75585dcda30b64603e320e0711b583624ddChong Zhang 79e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // The particular window with FLAG_DIM_BEHIND set. If null, hide mDimLayer. 80e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale WindowStateAnimator mDimWinAnimator; 81e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Used to support {@link android.view.WindowManager.LayoutParams#FLAG_DIM_BEHIND} 82e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private DimLayer mDimLayer; 83e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Set to false at the start of performLayoutAndPlaceSurfaces. If it is still false by the end 84e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // then stop any dimming. 85e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private boolean mContinueDimming; 86e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Shared dim layer for fullscreen tasks. {@link #mDimLayer} will point to this instead 87e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // of creating a new object per fullscreen task on a display. 88e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private static final SparseArray<DimLayer> sSharedFullscreenDimLayers = new SparseArray<>(); 89e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 90ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski Task(int taskId, TaskStack stack, int userId, WindowManagerService service, Rect bounds, 91ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski Configuration config) { 9283162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner mTaskId = taskId; 93c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mStack = stack; 94ac6f843c917b68ea8805711965b149a9338e3a0eCraig Mautner mUserId = userId; 95e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner mService = service; 96ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski setBounds(bounds, config); 97c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 98c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 99c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner DisplayContent getDisplayContent() { 100c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner return mStack.getDisplayContent(); 101c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 102c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 103c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner void addAppToken(int addPos, AppWindowToken wtoken) { 10442bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner final int lastPos = mAppTokens.size(); 10583162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner if (addPos >= lastPos) { 10683162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner addPos = lastPos; 10783162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner } else { 10883162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner for (int pos = 0; pos < lastPos && pos < addPos; ++pos) { 10983162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner if (mAppTokens.get(pos).removed) { 11083162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner // addPos assumes removed tokens are actually gone. 11183162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner ++addPos; 11283162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner } 11301f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner } 11442bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner } 115c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner mAppTokens.add(addPos, wtoken); 11683162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner wtoken.mTask = this; 11742bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner mDeferRemoval = false; 118c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 119c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner 120e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner void removeLocked() { 121e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner if (!mAppTokens.isEmpty() && mStack.isAnimating()) { 12283162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner if (DEBUG_STACK) Slog.i(TAG, "removeTask: deferring removing taskId=" + mTaskId); 123e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner mDeferRemoval = true; 124e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner return; 125e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner } 12683162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + mTaskId); 12783162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "removeTask"); 128e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner mDeferRemoval = false; 129e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner mStack.removeTask(this); 13083162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner mService.mTaskIdToTask.delete(mTaskId); 131e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner } 132e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner 13353a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale void moveTaskToStack(TaskStack stack, boolean toTop) { 13453a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale if (stack == mStack) { 13553a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale return; 13653a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale } 13753a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale if (DEBUG_STACK) Slog.i(TAG, "moveTaskToStack: removing taskId=" + mTaskId 13853a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale + " from stack=" + mStack); 139000957cef387dc7d08fc6563e2221e9023194984Wale Ogunwale EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "moveTask"); 14053a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale if (mStack != null) { 14153a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale mStack.removeTask(this); 14253a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale } 14353a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale stack.addTask(this, toTop); 14453a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale } 14553a29a90f35f72462c0d6ad650921d5566c1f8f0Wale Ogunwale 146ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale void positionTaskInStack(TaskStack stack, int position) { 147ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale if (mStack != null && stack != mStack) { 148ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: removing taskId=" + mTaskId 149ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale + " from stack=" + mStack); 150ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "moveTask"); 151ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale mStack.removeTask(this); 152ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale } 153ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale stack.positionTask(this, position, showForAllUsers()); 154ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale } 155ddc1cb2c15549ed23dce9d416680a009fa6ae23cWale Ogunwale 156c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner boolean removeAppToken(AppWindowToken wtoken) { 15742bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner boolean removed = mAppTokens.remove(wtoken); 158c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner if (mAppTokens.size() == 0) { 159000957cef387dc7d08fc6563e2221e9023194984Wale Ogunwale EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, 1602c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner "removeAppToken: last token"); 161e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner if (mDeferRemoval) { 162e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner removeLocked(); 163e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner } 164c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner } 16583162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner wtoken.mTask = null; 16683162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner /* Leave mTaskId for now, it might be useful for debug 16783162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner wtoken.mTaskId = -1; 16883162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner */ 16942bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner return removed; 170b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner } 1715d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner 172cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner void setSendingToBottom(boolean toBottom) { 173cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner for (int appTokenNdx = 0; appTokenNdx < mAppTokens.size(); appTokenNdx++) { 174cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner mAppTokens.get(appTokenNdx).sendingToBottom = toBottom; 175cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner } 176cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner } 177cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner 178ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski /** Set the task bounds. Passing in null sets the bounds to fullscreen. */ 1792cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale int setBounds(Rect bounds, Configuration config) { 180ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski if (config == null) { 181ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski config = Configuration.EMPTY; 182b34a7ad1af54132b6b046ab8f768e0ffb81cf581Wale Ogunwale } 183ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski if (bounds == null && !Configuration.EMPTY.equals(config)) { 184ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski throw new IllegalArgumentException("null bounds but non empty configuration: " 185ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski + config); 186b34a7ad1af54132b6b046ab8f768e0ffb81cf581Wale Ogunwale } 187ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski if (bounds != null && Configuration.EMPTY.equals(config)) { 188ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski throw new IllegalArgumentException("non null bounds, but empty configuration"); 189b34a7ad1af54132b6b046ab8f768e0ffb81cf581Wale Ogunwale } 190e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale boolean oldFullscreen = mFullscreen; 191e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale int rotation = Surface.ROTATION_0; 192e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final DisplayContent displayContent = mStack.getDisplayContent(); 193e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (displayContent != null) { 194e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale displayContent.getLogicalDisplayRect(mTmpRect); 195e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale rotation = displayContent.getDisplayInfo().rotation; 196e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (bounds == null) { 197e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale bounds = mTmpRect; 198e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mFullscreen = true; 199e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else { 200234dbf875f795fdb72f82dc6ea805201ee31fb0eStefan Kuhne if (mStack.mStackId != FREEFORM_WORKSPACE_STACK_ID || bounds.isEmpty()) { 201234dbf875f795fdb72f82dc6ea805201ee31fb0eStefan Kuhne // ensure bounds are entirely within the display rect 202234dbf875f795fdb72f82dc6ea805201ee31fb0eStefan Kuhne if (!bounds.intersect(mTmpRect)) { 203234dbf875f795fdb72f82dc6ea805201ee31fb0eStefan Kuhne // Can't set bounds outside the containing display...Sorry! 2042cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale return BOUNDS_CHANGE_NONE; 205234dbf875f795fdb72f82dc6ea805201ee31fb0eStefan Kuhne } 206e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 207e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mFullscreen = mTmpRect.equals(bounds); 208e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 209e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 210e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 211e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (bounds == null) { 212e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Can't set to fullscreen if we don't have a display to get bounds from... 2132cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale return BOUNDS_CHANGE_NONE; 214e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 215e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mBounds.equals(bounds) && oldFullscreen == mFullscreen && mRotation == rotation) { 2162cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale return BOUNDS_CHANGE_NONE; 2172cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale } 2182cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale 2192cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale int boundsChange = BOUNDS_CHANGE_NONE; 2202cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale if (mBounds.left != bounds.left || mBounds.right != bounds.right) { 2212cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale boundsChange |= BOUNDS_CHANGE_POSITION; 2222cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale } 2232cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale if (mBounds.width() != bounds.width() || mBounds.height() != bounds.height()) { 2242cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale boundsChange |= BOUNDS_CHANGE_SIZE; 225e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 226e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 227e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mBounds.set(bounds); 228e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mRotation = rotation; 229e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale updateDimLayer(); 230ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski mOverrideConfig = mFullscreen ? Configuration.EMPTY : config; 2312cc92f55c0257cdc837585b36987c610fb0a8251Wale Ogunwale return boundsChange; 232e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 233e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 23487b21722c2336490ecf8b66f6acfc46ce8cc6f46Chong Zhang boolean resizeLocked(Rect bounds, Configuration configuration, boolean forced) { 2353005e75585dcda30b64603e320e0711b583624ddChong Zhang int boundsChanged = setBounds(bounds, configuration); 23687b21722c2336490ecf8b66f6acfc46ce8cc6f46Chong Zhang if (forced) { 2373005e75585dcda30b64603e320e0711b583624ddChong Zhang boundsChanged |= BOUNDS_CHANGE_SIZE; 2383005e75585dcda30b64603e320e0711b583624ddChong Zhang } 2393005e75585dcda30b64603e320e0711b583624ddChong Zhang if (boundsChanged == BOUNDS_CHANGE_NONE) { 2403005e75585dcda30b64603e320e0711b583624ddChong Zhang return false; 2413005e75585dcda30b64603e320e0711b583624ddChong Zhang } 2423005e75585dcda30b64603e320e0711b583624ddChong Zhang if ((boundsChanged & BOUNDS_CHANGE_SIZE) == BOUNDS_CHANGE_SIZE) { 2433005e75585dcda30b64603e320e0711b583624ddChong Zhang resizeWindows(); 2443005e75585dcda30b64603e320e0711b583624ddChong Zhang } 2453005e75585dcda30b64603e320e0711b583624ddChong Zhang return true; 2463005e75585dcda30b64603e320e0711b583624ddChong Zhang } 2473005e75585dcda30b64603e320e0711b583624ddChong Zhang 248e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void getBounds(Rect out) { 249e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale out.set(mBounds); 250e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 251e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 2523005e75585dcda30b64603e320e0711b583624ddChong Zhang void setDragResizing(boolean dragResizing) { 2533005e75585dcda30b64603e320e0711b583624ddChong Zhang mDragResizing = dragResizing; 2543005e75585dcda30b64603e320e0711b583624ddChong Zhang } 2553005e75585dcda30b64603e320e0711b583624ddChong Zhang 2563005e75585dcda30b64603e320e0711b583624ddChong Zhang boolean isDragResizing() { 2573005e75585dcda30b64603e320e0711b583624ddChong Zhang return mDragResizing; 2583005e75585dcda30b64603e320e0711b583624ddChong Zhang } 2593005e75585dcda30b64603e320e0711b583624ddChong Zhang 260e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void updateDisplayInfo(final DisplayContent displayContent) { 261e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (displayContent == null) { 262e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return; 263e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 264e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mFullscreen) { 265ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski setBounds(null, Configuration.EMPTY); 266e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return; 267e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 268e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final int newRotation = displayContent.getDisplayInfo().rotation; 269e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mRotation == newRotation) { 270e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return; 271e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 272e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 273e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Device rotation changed. We don't want the task to move around on the screen when 274e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // this happens, so update the task bounds so it stays in the same place. 2759474421a56c8bf66086a9d253013687eb5207331Wale Ogunwale mTmpRect2.set(mBounds); 2769474421a56c8bf66086a9d253013687eb5207331Wale Ogunwale displayContent.rotateBounds(mRotation, newRotation, mTmpRect2); 277ebcc875f10f05db7365cd8afbf4e9425221ab14dFilip Gruszczynski setBounds(mTmpRect2, mOverrideConfig); 278e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 279e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 280e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale /** Updates the dim layer bounds, recreating it if needed. */ 281e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private void updateDimLayer() { 282e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale DimLayer newDimLayer; 283e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final boolean previousFullscreen = 284e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer != null && sSharedFullscreenDimLayers.indexOfValue(mDimLayer) > -1; 285e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final int displayId = mStack.getDisplayContent().getDisplayId(); 286e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mFullscreen) { 287e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (previousFullscreen) { 288e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Nothing to do here... 289e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return; 290e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 291e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Use shared fullscreen dim layer 292e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale newDimLayer = sSharedFullscreenDimLayers.get(displayId); 293e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (newDimLayer == null) { 294e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mDimLayer != null) { 295e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Re-purpose the previous dim layer. 296e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale newDimLayer = mDimLayer; 297e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else { 298e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Create new full screen dim layer. 299e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale newDimLayer = new DimLayer(mService, this, displayId); 300e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 301e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale newDimLayer.setBounds(mBounds); 302e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale sSharedFullscreenDimLayers.put(displayId, newDimLayer); 303e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else if (mDimLayer != null) { 304e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.destroySurface(); 305e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 306e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else { 307e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale newDimLayer = (mDimLayer == null || previousFullscreen) 308e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale ? new DimLayer(mService, this, displayId) : mDimLayer; 309e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale newDimLayer.setBounds(mBounds); 310e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 311e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer = newDimLayer; 312e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 313e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 314e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale boolean animateDimLayers() { 315e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final int dimLayer; 316e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final float dimAmount; 317e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mDimWinAnimator == null) { 318e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale dimLayer = mDimLayer.getLayer(); 319e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale dimAmount = 0; 320e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else { 321e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale dimLayer = mDimWinAnimator.mAnimLayer - WindowManagerService.LAYER_OFFSET_DIM; 322e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale dimAmount = mDimWinAnimator.mWin.mAttrs.dimAmount; 323e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 324e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final float targetAlpha = mDimLayer.getTargetAlpha(); 325e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (targetAlpha != dimAmount) { 326e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mDimWinAnimator == null) { 327e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.hide(DEFAULT_DIM_DURATION); 328e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else { 329e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale long duration = (mDimWinAnimator.mAnimating && mDimWinAnimator.mAnimation != null) 330e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale ? mDimWinAnimator.mAnimation.computeDurationHint() 331e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale : DEFAULT_DIM_DURATION; 332e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (targetAlpha > dimAmount) { 333e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale duration = getDimBehindFadeDuration(duration); 334e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 335e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.show(dimLayer, dimAmount, duration); 336e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 337e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else if (mDimLayer.getLayer() != dimLayer) { 338e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.setLayer(dimLayer); 339e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 340e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mDimLayer.isAnimating()) { 341e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (!mService.okToDisplay()) { 342e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Jump to the end of the animation. 343e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.show(); 344e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else { 345e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return mDimLayer.stepAnimation(); 346e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 347e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 348e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return false; 349e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 350e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 351e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale private long getDimBehindFadeDuration(long duration) { 352e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale TypedValue tv = new TypedValue(); 353e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mService.mContext.getResources().getValue( 354e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale com.android.internal.R.fraction.config_dimBehindFadeDuration, tv, true); 355e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (tv.type == TypedValue.TYPE_FRACTION) { 356e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale duration = (long)tv.getFraction(duration, duration); 357e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else if (tv.type >= TypedValue.TYPE_FIRST_INT && tv.type <= TypedValue.TYPE_LAST_INT) { 358e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale duration = tv.data; 359e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 360e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return duration; 361e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 362e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 363e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void clearContinueDimming() { 364e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mContinueDimming = false; 365e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 366e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 367e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void setContinueDimming() { 368e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mContinueDimming = true; 369e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 370e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 371e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale boolean getContinueDimming() { 372e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return mContinueDimming; 373e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 374e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 375e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale boolean isDimming() { 376e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return mDimLayer.isDimming(); 377e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 378e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 379e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale boolean isDimming(WindowStateAnimator winAnimator) { 380e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return mDimWinAnimator == winAnimator && isDimming(); 381e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 382e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 383e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void startDimmingIfNeeded(WindowStateAnimator newWinAnimator) { 384e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Only set dim params on the highest dimmed layer. 385e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Don't turn on for an unshown surface, or for any layer but the highest dimmed layer. 386e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (newWinAnimator.mSurfaceShown && (mDimWinAnimator == null 387e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale || !mDimWinAnimator.mSurfaceShown 388e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale || mDimWinAnimator.mAnimLayer < newWinAnimator.mAnimLayer)) { 389e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimWinAnimator = newWinAnimator; 390e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mDimWinAnimator.mWin.mAppToken == null 391e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale && !mFullscreen && mStack.getDisplayContent() != null) { 392e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale // Dim should cover the entire screen for system windows. 393e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mStack.getDisplayContent().getLogicalDisplayRect(mTmpRect); 394e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.setBounds(mTmpRect); 395e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 396e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 397e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 398e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 399e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void stopDimmingIfNeeded() { 400e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (!mContinueDimming && isDimming()) { 401e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimWinAnimator = null; 402e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.setBounds(mBounds); 403e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 404e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 405e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 406e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void close() { 407e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mDimLayer != null) { 408e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.destroySurface(); 409e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer = null; 410e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 411e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 412e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 413e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale void resizeWindows() { 414e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final ArrayList<WindowState> resizingWindows = mService.mResizingWindows; 415e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale for (int activityNdx = mAppTokens.size() - 1; activityNdx >= 0; --activityNdx) { 416e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final ArrayList<WindowState> windows = mAppTokens.get(activityNdx).allAppWindows; 417e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) { 418e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale final WindowState win = windows.get(winNdx); 419e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (!resizingWindows.contains(win)) { 420e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (DEBUG_RESIZE) Slog.d(TAG, "setBounds: Resizing " + win); 421e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale resizingWindows.add(win); 422e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 423e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 424e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 425e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 426e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 4276dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale boolean showForAllUsers() { 4283fcb4a89750d6df42f850021cd754500fc084086Wale Ogunwale final int tokensCount = mAppTokens.size(); 4296dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale return (tokensCount != 0) && mAppTokens.get(tokensCount - 1).showForAllUsers; 4303fcb4a89750d6df42f850021cd754500fc084086Wale Ogunwale } 4313fcb4a89750d6df42f850021cd754500fc084086Wale Ogunwale 43209b21efb97d539543259b33e2da9d4c7a41966c8Chong Zhang boolean inFreeformWorkspace() { 43309b21efb97d539543259b33e2da9d4c7a41966c8Chong Zhang return mStack != null && mStack.mStackId == FREEFORM_WORKSPACE_STACK_ID; 43409b21efb97d539543259b33e2da9d4c7a41966c8Chong Zhang } 43509b21efb97d539543259b33e2da9d4c7a41966c8Chong Zhang 436466f3216505bd039a285881e06ead631331fe368Filip Gruszczynski boolean inDockedWorkspace() { 437466f3216505bd039a285881e06ead631331fe368Filip Gruszczynski return mStack != null && mStack.mStackId == DOCKED_STACK_ID; 438466f3216505bd039a285881e06ead631331fe368Filip Gruszczynski } 439466f3216505bd039a285881e06ead631331fe368Filip Gruszczynski 4405d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner @Override 441e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale public boolean isFullscreen() { 442e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return mFullscreen; 443e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 444e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 445e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale @Override 446e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale public DisplayInfo getDisplayInfo() { 447e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale return mStack.getDisplayContent().getDisplayInfo(); 448e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 449e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 450e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale @Override 4515d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner public String toString() { 45283162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner return "{taskId=" + mTaskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}"; 4535d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner } 454e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale 455e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale public void printTo(String prefix, PrintWriter pw) { 456e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale pw.print(prefix); pw.print("taskId="); pw.print(mTaskId); 457e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale pw.print(prefix); pw.print("appTokens="); pw.print(mAppTokens); 458e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale pw.print(prefix); pw.print("mdr="); pw.println(mDeferRemoval); 459e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale if (mDimLayer.isDimming()) { 460e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale pw.print(prefix); pw.println("mDimLayer:"); 461e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale mDimLayer.printTo(prefix + " ", pw); 462e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale pw.print(prefix); pw.print("mDimWinAnimator="); pw.println(mDimWinAnimator); 463e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } else { 464e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale pw.println(); 465e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 466e4a0c5722b1d8db95dfc842d716452dbbf02c86dWale Ogunwale } 467b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner} 468