Task.java revision d16c565a607de754379fe699a4def21bd0e3de2f
1303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/* 2303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Copyright (C) 2014 The Android Open Source Project 3303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * 4303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Licensed under the Apache License, Version 2.0 (the "License"); 5303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * you may not use this file except in compliance with the License. 6303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * You may obtain a copy of the License at 7303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * 8303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * http://www.apache.org/licenses/LICENSE-2.0 9303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * 10303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Unless required by applicable law or agreed to in writing, software 11303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * distributed under the License is distributed on an "AS IS" BASIS, 12303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * See the License for the specific language governing permissions and 14303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * limitations under the License. 15303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung */ 16303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 17303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungpackage com.android.systemui.recents.model; 18303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 19a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guyimport android.content.ComponentName; 20303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.content.Intent; 21303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.graphics.Bitmap; 2293748a11cba1b44edbc2e888c997533461355594Winson Chungimport android.graphics.Color; 23303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.graphics.drawable.Drawable; 24ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chungimport com.android.systemui.recents.misc.Utilities; 25303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 26a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guyimport java.util.Objects; 27a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy 28303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 29303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/** 30303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * A task represents the top most task in the system's task stack. 31303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung */ 32303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungpublic class Task { 3304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung /* Task callbacks */ 3404dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public interface TaskCallbacks { 3504dfe0d26b944324ee920001f40d74cff47281d6Winson Chung /* Notifies when a task has been bound */ 368eaeb7dc93ed71b768a2ea8d45021cca010e8263Winson Chung public void onTaskDataLoaded(); 3704dfe0d26b944324ee920001f40d74cff47281d6Winson Chung /* Notifies when a task has been unbound */ 3804dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public void onTaskDataUnloaded(); 39d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung 40d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung /* Notifies when a task's stack id has changed. */ 41d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung public void onMultiStackDebugTaskStackIdChanged(); 4204dfe0d26b944324ee920001f40d74cff47281d6Winson Chung } 4304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung 44a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy /** The ComponentNameKey represents the unique primary key for a component 45a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy * belonging to a specified user. */ 46a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy public static class ComponentNameKey { 47a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy final ComponentName component; 48a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy final int userId; 49a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy 50a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy public ComponentNameKey(ComponentName cn, int user) { 51a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy component = cn; 52a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy userId = user; 53a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy } 54a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy 55a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy @Override 56a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy public int hashCode() { 57a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy return Objects.hash(component, userId); 58a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy } 59a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy 60a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy @Override 61a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy public boolean equals(Object o) { 62a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy if (!(o instanceof ComponentNameKey)) { 63a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy return false; 64a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy } 65a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy return component.equals(((ComponentNameKey) o).component) && 66a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy userId == ((ComponentNameKey) o).userId; 67a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy } 68a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy } 69a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy 7004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung /* The Task Key represents the unique primary key for the task */ 7104dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public static class TaskKey { 72a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy final ComponentNameKey mComponentNameKey; 7304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public final int id; 74d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung public int stackId; 75c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung public final Intent baseIntent; 764f0a49e6b9ad1b00972dbe8a751263aa6c482538Amith Yamasani public final int userId; 77ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung public long firstActiveTime; 78f1fbd77cf057e43926f9a0347692611386d09f40Winson Chung public long lastActiveTime; 7904dfe0d26b944324ee920001f40d74cff47281d6Winson Chung 80d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung public TaskKey(int id, int stackId, Intent intent, int userId, long firstActiveTime, 81d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung long lastActiveTime) { 82a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy mComponentNameKey = new ComponentNameKey(intent.getComponent(), userId); 8304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung this.id = id; 84d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung this.stackId = stackId; 85c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung this.baseIntent = intent; 864f0a49e6b9ad1b00972dbe8a751263aa6c482538Amith Yamasani this.userId = userId; 87ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung this.firstActiveTime = firstActiveTime; 88f1fbd77cf057e43926f9a0347692611386d09f40Winson Chung this.lastActiveTime = lastActiveTime; 89f1fbd77cf057e43926f9a0347692611386d09f40Winson Chung } 90f1fbd77cf057e43926f9a0347692611386d09f40Winson Chung 91a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy /** Returns the component name key for this task. */ 92a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy public ComponentNameKey getComponentNameKey() { 93a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy return mComponentNameKey; 94a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy } 95a734fc1ecedb316fdf6deddc169b8b0bddab76bfKenny Guy 9604dfe0d26b944324ee920001f40d74cff47281d6Winson Chung @Override 9704dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public boolean equals(Object o) { 984f0a49e6b9ad1b00972dbe8a751263aa6c482538Amith Yamasani if (!(o instanceof TaskKey)) { 994f0a49e6b9ad1b00972dbe8a751263aa6c482538Amith Yamasani return false; 1004f0a49e6b9ad1b00972dbe8a751263aa6c482538Amith Yamasani } 101d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung TaskKey otherKey = (TaskKey) o; 102d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung return id == otherKey.id && stackId == otherKey.stackId && userId == otherKey.userId; 10304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung } 10404dfe0d26b944324ee920001f40d74cff47281d6Winson Chung 10504dfe0d26b944324ee920001f40d74cff47281d6Winson Chung @Override 10604dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public int hashCode() { 107d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung return Objects.hash(id, stackId, userId); 10804dfe0d26b944324ee920001f40d74cff47281d6Winson Chung } 10904dfe0d26b944324ee920001f40d74cff47281d6Winson Chung 11004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung @Override 11104dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public String toString() { 1124f0a49e6b9ad1b00972dbe8a751263aa6c482538Amith Yamasani return "Task.Key: " + id + ", " 113d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung + "s: " + stackId + ", " 114f1fbd77cf057e43926f9a0347692611386d09f40Winson Chung + "u: " + userId + ", " 115f1fbd77cf057e43926f9a0347692611386d09f40Winson Chung + "lat: " + lastActiveTime + ", " 1164f0a49e6b9ad1b00972dbe8a751263aa6c482538Amith Yamasani + baseIntent.getComponent().getPackageName(); 11704dfe0d26b944324ee920001f40d74cff47281d6Winson Chung } 11804dfe0d26b944324ee920001f40d74cff47281d6Winson Chung } 11904dfe0d26b944324ee920001f40d74cff47281d6Winson Chung 12004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung public TaskKey key; 121ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung public TaskGrouping group; 122083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung public int taskAffiliation; 123ec396d6399c5c31d697d81e94aff459e9771b0c6Winson Chung public int taskAffiliationColor; 124dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chung public boolean isLaunchTarget; 1255e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung public Drawable applicationIcon; 12611e41baac63a42d7ddb7ba2cab40ee55443d262fWinson Chung public Drawable activityIcon; 1275e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung public String activityLabel; 128f5e22e71cb5f8699a4312c797af068f655cbe629Winson Chung public int colorPrimary; 12993748a11cba1b44edbc2e888c997533461355594Winson Chung public boolean useLightOnPrimaryColor; 130303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public Bitmap thumbnail; 1314be0445c66f19ed985aecbc2a572f5d8c6e2553aWinson Chung public boolean isActive; 13256e09b42a0f1670970872bef611a8036904ad6bfJason Monk public boolean lockToThisTask; 13356e09b42a0f1670970872bef611a8036904ad6bfJason Monk public boolean lockToTaskEnabled; 134bdd4b201e45ffa82dcd3b09fb9724d243c86c8d8Jorim Jaggi public Bitmap icon; 135bdd4b201e45ffa82dcd3b09fb9724d243c86c8d8Jorim Jaggi public String iconFilename; 136303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung TaskCallbacks mCb; 137303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 1380d767551c55d9e594a0b944bd1926c21a344b5aeWinson Chung public Task() { 13904400672962d2e12132f9465928cbf7615c147c4Winson Chung // Do nothing 1400d767551c55d9e594a0b944bd1926c21a344b5aeWinson Chung } 1410d767551c55d9e594a0b944bd1926c21a344b5aeWinson Chung 142a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung public Task(TaskKey key, boolean isActive, int taskAffiliation, int taskAffiliationColor, 143a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung String activityTitle, Drawable activityIcon, int colorPrimary, 144bdd4b201e45ffa82dcd3b09fb9724d243c86c8d8Jorim Jaggi boolean lockToThisTask, boolean lockToTaskEnabled, Bitmap icon, 145bdd4b201e45ffa82dcd3b09fb9724d243c86c8d8Jorim Jaggi String iconFilename) { 146a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung boolean isInAffiliationGroup = (taskAffiliation != key.id); 147ec396d6399c5c31d697d81e94aff459e9771b0c6Winson Chung boolean hasAffiliationGroupColor = isInAffiliationGroup && (taskAffiliationColor != 0); 148a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.key = key; 149083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung this.taskAffiliation = taskAffiliation; 150ec396d6399c5c31d697d81e94aff459e9771b0c6Winson Chung this.taskAffiliationColor = taskAffiliationColor; 1515e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung this.activityLabel = activityTitle; 1525e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung this.activityIcon = activityIcon; 153ec396d6399c5c31d697d81e94aff459e9771b0c6Winson Chung this.colorPrimary = hasAffiliationGroupColor ? taskAffiliationColor : colorPrimary; 154ec396d6399c5c31d697d81e94aff459e9771b0c6Winson Chung this.useLightOnPrimaryColor = Utilities.computeContrastBetweenColors(this.colorPrimary, 15593748a11cba1b44edbc2e888c997533461355594Winson Chung Color.WHITE) > 3f; 1564be0445c66f19ed985aecbc2a572f5d8c6e2553aWinson Chung this.isActive = isActive; 15756e09b42a0f1670970872bef611a8036904ad6bfJason Monk this.lockToThisTask = lockToTaskEnabled && lockToThisTask; 15856e09b42a0f1670970872bef611a8036904ad6bfJason Monk this.lockToTaskEnabled = lockToTaskEnabled; 159bdd4b201e45ffa82dcd3b09fb9724d243c86c8d8Jorim Jaggi this.icon = icon; 160bdd4b201e45ffa82dcd3b09fb9724d243c86c8d8Jorim Jaggi this.iconFilename = iconFilename; 161a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung } 162a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung 163a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung /** Copies the other task. */ 164a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung public void copyFrom(Task o) { 165a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.key = o.key; 166a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.taskAffiliation = o.taskAffiliation; 167a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.taskAffiliationColor = o.taskAffiliationColor; 168a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.activityLabel = o.activityLabel; 169a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.activityIcon = o.activityIcon; 170a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.colorPrimary = o.colorPrimary; 171a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.useLightOnPrimaryColor = o.useLightOnPrimaryColor; 172a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.isActive = o.isActive; 173a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.lockToThisTask = o.lockToThisTask; 174a4ccb86ddc8f9f486aee25fb836f4aff97bf7679Winson Chung this.lockToTaskEnabled = o.lockToTaskEnabled; 175303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 176303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 177303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Set the callbacks */ 178303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public void setCallbacks(TaskCallbacks cb) { 179303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mCb = cb; 180303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 181303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 182ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung /** Set the grouping */ 183ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung public void setGroup(TaskGrouping group) { 184ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung if (group != null && this.group != null) { 185ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung throw new RuntimeException("This task is already assigned to a group."); 186ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung } 187ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung this.group = group; 188ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung } 189ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung 190d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung /** Updates the stack id of this task. */ 191d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung public void setStackId(int stackId) { 192d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung key.stackId = stackId; 193d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung if (mCb != null) { 194d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung mCb.onMultiStackDebugTaskStackIdChanged(); 195d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung } 196d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung } 197d16c565a607de754379fe699a4def21bd0e3de2fWinson Chung 1984d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung /** Notifies the callback listeners that this task has been loaded */ 1998eaeb7dc93ed71b768a2ea8d45021cca010e8263Winson Chung public void notifyTaskDataLoaded(Bitmap thumbnail, Drawable applicationIcon) { 2005e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung this.applicationIcon = applicationIcon; 2014d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung this.thumbnail = thumbnail; 2024d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung if (mCb != null) { 2038eaeb7dc93ed71b768a2ea8d45021cca010e8263Winson Chung mCb.onTaskDataLoaded(); 2044d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2054d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2064d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung 2074d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung /** Notifies the callback listeners that this task has been unloaded */ 2085e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung public void notifyTaskDataUnloaded(Bitmap defaultThumbnail, Drawable defaultApplicationIcon) { 2095e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung applicationIcon = defaultApplicationIcon; 2104d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung thumbnail = defaultThumbnail; 2114d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung if (mCb != null) { 21204dfe0d26b944324ee920001f40d74cff47281d6Winson Chung mCb.onTaskDataUnloaded(); 2134d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2144d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2154d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung 216303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 217303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public boolean equals(Object o) { 218a10370fc2eb8eb95631592160c5f6281b9d75722Winson Chung // Check that the id matches 219303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Task t = (Task) o; 22004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung return key.equals(t.key); 221303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 222303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 223303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 224303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public String toString() { 225ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung String groupAffiliation = "no group"; 226ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung if (group != null) { 227083baf99ff1228e96ede96aac88c8200c4fdc2b2Winson Chung groupAffiliation = Integer.toString(group.affiliation); 228ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung } 229ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung return "Task (" + groupAffiliation + "): " + key.baseIntent.getComponent().getPackageName() + 230ffa2ec664479bff6b4b61d4c349d9db2cb37ca16Winson Chung " [" + super.toString() + "]"; 231303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 232303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung} 233