1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.server.wm;
18
19import static com.android.server.wm.WindowManagerService.TAG;
20
21import android.util.EventLog;
22import android.util.Slog;
23
24class Task {
25    TaskStack mStack;
26    final AppTokenList mAppTokens = new AppTokenList();
27    final int taskId;
28    final int mUserId;
29    boolean mDeferRemoval = false;
30
31    Task(AppWindowToken wtoken, TaskStack stack, int userId) {
32        taskId = wtoken.groupId;
33        mAppTokens.add(wtoken);
34        mStack = stack;
35        mUserId = userId;
36    }
37
38    DisplayContent getDisplayContent() {
39        return mStack.getDisplayContent();
40    }
41
42    void addAppToken(int addPos, AppWindowToken wtoken) {
43        final int lastPos = mAppTokens.size();
44        for (int pos = 0; pos < lastPos && pos < addPos; ++pos) {
45            if (mAppTokens.get(pos).removed) {
46                // addPos assumes removed tokens are actually gone.
47                ++addPos;
48            }
49        }
50        mAppTokens.add(addPos, wtoken);
51        mDeferRemoval = false;
52    }
53
54    boolean removeAppToken(AppWindowToken wtoken) {
55        boolean removed = mAppTokens.remove(wtoken);
56        if (mAppTokens.size() == 0) {
57            EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, taskId,
58                    "removeAppToken: last token");
59        }
60        return removed;
61    }
62
63    void setSendingToBottom(boolean toBottom) {
64        for (int appTokenNdx = 0; appTokenNdx < mAppTokens.size(); appTokenNdx++) {
65            mAppTokens.get(appTokenNdx).sendingToBottom = toBottom;
66        }
67    }
68
69    @Override
70    public String toString() {
71        return "{taskId=" + taskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}";
72    }
73}
74