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