Task.java revision e3119b7d353e71d1f94ddff932b722b4d285931e
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;
20e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautnerimport static com.android.server.wm.WindowManagerService.DEBUG_STACK;
2142bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner
222c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautnerimport android.util.EventLog;
2342bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautnerimport android.util.Slog;
24e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautnerimport com.android.server.EventLogTags;
252c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner
26c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautnerclass Task {
27c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    TaskStack mStack;
2805d6272bad2d707b488a6f8784ce8aea5e25b110Craig Mautner    final AppTokenList mAppTokens = new AppTokenList();
2905d6272bad2d707b488a6f8784ce8aea5e25b110Craig Mautner    final int taskId;
30ac6f843c917b68ea8805711965b149a9338e3a0eCraig Mautner    final int mUserId;
319ef471f7f2f59de032d7cb9c3c7241486109979eCraig Mautner    boolean mDeferRemoval = false;
32e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner    final WindowManagerService mService;
33b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner
34e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner    Task(AppWindowToken wtoken, TaskStack stack, int userId, WindowManagerService service) {
35b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner        taskId = wtoken.groupId;
36b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner        mAppTokens.add(wtoken);
37c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        mStack = stack;
38ac6f843c917b68ea8805711965b149a9338e3a0eCraig Mautner        mUserId = userId;
39e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        mService = service;
40c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    }
41c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner
42c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    DisplayContent getDisplayContent() {
43c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        return mStack.getDisplayContent();
44c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    }
45c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner
46c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    void addAppToken(int addPos, AppWindowToken wtoken) {
4742bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        final int lastPos = mAppTokens.size();
4801f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner        for (int pos = 0; pos < lastPos && pos < addPos; ++pos) {
4901f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner            if (mAppTokens.get(pos).removed) {
5001f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner                // addPos assumes removed tokens are actually gone.
5101f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner                ++addPos;
5201f79cf91610ec9f85345ea6eeae50ea2f28578fCraig Mautner            }
5342bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        }
54c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        mAppTokens.add(addPos, wtoken);
5542bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        mDeferRemoval = false;
56c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    }
57c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner
58e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner    void removeLocked() {
59e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        if (!mAppTokens.isEmpty() && mStack.isAnimating()) {
60e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner            if (DEBUG_STACK) Slog.i(TAG, "removeTask: deferring removing taskId=" + taskId);
61e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner            mDeferRemoval = true;
62e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner            return;
63e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        }
64e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + taskId);
65e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, taskId, "removeTask");
66e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        mDeferRemoval = false;
67e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        mStack.removeTask(this);
68e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner        mService.mTaskIdToTask.delete(taskId);
69e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner    }
70e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner
71c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner    boolean removeAppToken(AppWindowToken wtoken) {
7242bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        boolean removed = mAppTokens.remove(wtoken);
73c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        if (mAppTokens.size() == 0) {
742c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner            EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, taskId,
752c2549c5f44b712dbbf66a69d91f07d6f5336ee6Craig Mautner                    "removeAppToken: last token");
76e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner            if (mDeferRemoval) {
77e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner                removeLocked();
78e3119b7d353e71d1f94ddff932b722b4d285931eCraig Mautner            }
79c00204b4d14d49a0417b44ca21aee4f0d4c466e0Craig Mautner        }
8042bf39edbdad19f51497938d0a3469dd772f19e8Craig Mautner        return removed;
81b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner    }
825d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner
83cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner    void setSendingToBottom(boolean toBottom) {
84cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner        for (int appTokenNdx = 0; appTokenNdx < mAppTokens.size(); appTokenNdx++) {
85cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner            mAppTokens.get(appTokenNdx).sendingToBottom = toBottom;
86cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner        }
87cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner    }
88cbd84af39a329890013b0c3b6763280ba2ad78c9Craig Mautner
895d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner    @Override
905d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner    public String toString() {
913d7ca31c9e4a076cef5339ae58d5cafb2efbbc8fCraig Mautner        return "{taskId=" + taskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}";
925d9c7be84d9628c1cf199fcf9015942835c4671bCraig Mautner    }
93b1fd65c0ff5784b90d765edb7e3c3115d767dff0Craig Mautner}
94