TaskGrouping.java revision a433fa9c17772f563163ff7db177d091d6aebd5b
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
9ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    String affiliation;
10ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    long latestActiveTimeInGroup;
11ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
12ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    ArrayList<Task.TaskKey> mTasks = new ArrayList<Task.TaskKey>();
13a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung    HashMap<Task.TaskKey, Integer> mTaskIndices = new HashMap<Task.TaskKey, Integer>();
14ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
15ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Creates a group with a specified affiliation. */
16ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    public TaskGrouping(String affiliation) {
17ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        this.affiliation = affiliation;
18ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
19ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
20ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Adds a new task to this group. */
21ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    void addTask(Task t) {
22ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        mTasks.add(t.key);
23ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        if (t.key.lastActiveTime > latestActiveTimeInGroup) {
24ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung            latestActiveTimeInGroup = t.key.lastActiveTime;
25ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        }
26ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        t.setGroup(this);
27a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        updateTaskIndices();
28ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
29ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
30ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Removes a task from this group. */
31ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    void removeTask(Task t) {
32ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        mTasks.remove(t.key);
33ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        latestActiveTimeInGroup = 0;
34ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        int taskCount = mTasks.size();
35ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        for (int i = 0; i < taskCount; i++) {
36ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung            long lastActiveTime = mTasks.get(i).lastActiveTime;
37ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung            if (lastActiveTime > latestActiveTimeInGroup) {
38ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung                latestActiveTimeInGroup = lastActiveTime;
39ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung            }
40ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        }
41ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        t.setGroup(null);
42a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        updateTaskIndices();
43ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
44ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
45ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Gets the front task */
46ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    public boolean isFrontMostTask(Task t) {
47ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung        return t.key.equals(mTasks.get(mTasks.size() - 1));
48ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
49ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
50ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Finds the index of a given task in a group. */
51ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    public int indexOf(Task t) {
52a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        return mTaskIndices.get(t.key);
53ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    }
54ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung
55ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    /** Returns the number of tasks in this group. */
56ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung    public int getTaskCount() { return mTasks.size(); }
57a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung
58a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung    /** Updates the mapping of tasks to indices. */
59a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung    private void updateTaskIndices() {
60a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        mTaskIndices.clear();
61a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        int taskCount = mTasks.size();
62a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        for (int i = 0; i < taskCount; i++) {
63a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung            Task.TaskKey k = mTasks.get(i);
64a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung            mTaskIndices.put(k, i);
65a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung        }
66a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung    }
67ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung}
68