TaskGrouping.java revision 1907cd478209f01a4215d9a3a76294c2c77c9a63
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 561907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung /** Returns whether a task is in this grouping. */ 571907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung public boolean containsTask(Task t) { 581907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung return mTaskKeyIndices.containsKey(t.key); 591907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung } 601907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung 611907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung /** Returns whether one task is above another in the group. If they are not in the same group, 621907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung * this returns false. */ 631907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung public boolean isTaskAboveTask(Task t, Task below) { 641907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung return mTaskKeyIndices.containsKey(t.key) && mTaskKeyIndices.containsKey(below.key) && 651907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung mTaskKeyIndices.get(t.key) > mTaskKeyIndices.get(below.key); 661907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung } 671907cd478209f01a4215d9a3a76294c2c77c9a63Winson Chung 68ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung /** Returns the number of tasks in this group. */ 69083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung public int getTaskCount() { return mTaskKeys.size(); } 70a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung 71a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung /** Updates the mapping of tasks to indices. */ 72a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung private void updateTaskIndices() { 73083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung if (mTaskKeys.isEmpty()) { 74083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung mFrontMostTaskKey = null; 75083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung mTaskKeyIndices.clear(); 76083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung return; 77083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung } 78083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung 79083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung mFrontMostTaskKey = mTaskKeys.get(mTaskKeys.size() - 1); 80083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung mTaskKeyIndices.clear(); 81083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung int taskCount = mTaskKeys.size(); 82a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung for (int i = 0; i < taskCount; i++) { 83083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung Task.TaskKey k = mTaskKeys.get(i); 84083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung mTaskKeyIndices.put(k, i); 85a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung } 86a433fa9c17772f563163ff7db177d091d6aebd5bWinson Chung } 87ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung} 88