TaskGrouping.java revision 083baf99ff1228e96ede96aac88c8200c4fdc2b2
1ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chungpackage com.android.systemui.recents.model;
2ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
3ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chungimport java.util.ArrayList;
4a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chungimport java.util.HashMap;
5ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
6ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung/** Represents a grouping of tasks witihin a stack. */
7ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chungpublic class TaskGrouping {
8ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
9083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung    int affiliation;
10ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    long latestActiveTimeInGroup;
11ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
12083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung    Task.TaskKey mFrontMostTaskKey;
13083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung    ArrayList<Task.TaskKey> mTaskKeys = new ArrayList<Task.TaskKey>();
14083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung    HashMap<Task.TaskKey, Integer> mTaskKeyIndices = new HashMap<Task.TaskKey, Integer>();
15ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
16ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Creates a group with a specified affiliation. */
17083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung    public TaskGrouping(int affiliation) {
18ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        this.affiliation = affiliation;
19ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
20ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
21ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Adds a new task to this group. */
22ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    void addTask(Task t) {
23083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        mTaskKeys.add(t.key);
24ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        if (t.key.lastActiveTime > latestActiveTimeInGroup) {
25ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung            latestActiveTimeInGroup = t.key.lastActiveTime;
26ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        }
27ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        t.setGroup(this);
28a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        updateTaskIndices();
29ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
30ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
31ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Removes a task from this group. */
32ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    void removeTask(Task t) {
33083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        mTaskKeys.remove(t.key);
34ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        latestActiveTimeInGroup = 0;
35083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        int taskCount = mTaskKeys.size();
36ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        for (int i = 0; i < taskCount; i++) {
37083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung            long lastActiveTime = mTaskKeys.get(i).lastActiveTime;
38ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung            if (lastActiveTime > latestActiveTimeInGroup) {
39ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung                latestActiveTimeInGroup = lastActiveTime;
40ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung            }
41ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        }
42ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        t.setGroup(null);
43a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        updateTaskIndices();
44ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
45ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
46ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Gets the front task */
47ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    public boolean isFrontMostTask(Task t) {
48083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        return (t.key == mFrontMostTaskKey);
49ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
50ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
51ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Finds the index of a given task in a group. */
52ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    public int indexOf(Task t) {
53083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        return mTaskKeyIndices.get(t.key);
54ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
55ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
56ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Returns the number of tasks in this group. */
57083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung    public int getTaskCount() { return mTaskKeys.size(); }
58a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung
59a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung    /** Updates the mapping of tasks to indices. */
60a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung    private void updateTaskIndices() {
61083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        if (mTaskKeys.isEmpty()) {
62083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung            mFrontMostTaskKey = null;
63083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung            mTaskKeyIndices.clear();
64083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung            return;
65083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        }
66083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung
67083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        mFrontMostTaskKey = mTaskKeys.get(mTaskKeys.size() - 1);
68083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        mTaskKeyIndices.clear();
69083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung        int taskCount = mTaskKeys.size();
70a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        for (int i = 0; i < taskCount; i++) {
71083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung            Task.TaskKey k = mTaskKeys.get(i);
72083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung            mTaskKeyIndices.put(k, i);
73a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        }
74a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung    }
75ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung}
76