Task.java revision 01f79cf91610ec9f85345ea6eeae50ea2f28578f
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
1942bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautnerimport static com.android.server.wm.WindowManagerService.TAG;
2042bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner
212c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautnerimport android.util.EventLog;
2242bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautnerimport android.util.Slog;
232c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner
24c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautnerclass Task {
25c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    TaskStack mStack;
2605d6272bad2d707b488a6f8784ce8aea5e25b110Craig Mautner    final AppTokenList mAppTokens = new AppTokenList();
2705d6272bad2d707b488a6f8784ce8aea5e25b110Craig Mautner    final int taskId;
28ac6f843c917b68ea8805711965b149a9338e3a0eCraig Mautner    final int mUserId;
299ef471f7f2f59de032d7cb9c3c7241486109979eCraig Mautner    boolean mDeferRemoval = false;
30b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner
31ac6f843c917b68ea8805711965b149a9338e3a0eCraig Mautner    Task(AppWindowToken wtoken, TaskStack stack, int userId) {
32b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner        taskId = wtoken.groupId;
33b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner        mAppTokens.add(wtoken);
34c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        mStack = stack;
35ac6f843c917b68ea8805711965b149a9338e3a0eCraig Mautner        mUserId = userId;
36c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    }
37c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner
38c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    DisplayContent getDisplayContent() {
39c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        return mStack.getDisplayContent();
40c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    }
41c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner
42c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    void addAppToken(int addPos, AppWindowToken wtoken) {
4342bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        final int lastPos = mAppTokens.size();
4401f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner        for (int pos = 0; pos < lastPos && pos < addPos; ++pos) {
4501f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner            if (mAppTokens.get(pos).removed) {
4601f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner                // addPos assumes removed tokens are actually gone.
4701f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner                ++addPos;
4801f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner            }
4942bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        }
50c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        mAppTokens.add(addPos, wtoken);
5142bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        mDeferRemoval = false;
52c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    }
53c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner
54c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    boolean removeAppToken(AppWindowToken wtoken) {
5542bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        boolean removed = mAppTokens.remove(wtoken);
56c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        if (mAppTokens.size() == 0) {
572c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner            EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, taskId,
582c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner                    "removeAppToken: last token");
59c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        }
6042bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        return removed;
61b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner    }
625d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner
635d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner    @Override
645d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner    public String toString() {
654cd0c13f8f765118a24e31548c058b5029481beaCraig Mautner        return "{taskId=" + taskId + " appTokens=" + mAppTokens + "}";
665d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner    }
67b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner}
68