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