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