OSDN Git Service

55dfe4561de85cbad4f4c17893cf86ef0d7d2fba
[android-x86/frameworks-base.git] / packages / SystemUI / src / com / android / systemui / recents / model / Task.java
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.systemui.recents.model;
18
19 import android.content.ComponentName;
20 import android.content.Intent;
21 import android.graphics.Bitmap;
22 import android.graphics.Color;
23 import android.graphics.drawable.Drawable;
24 import com.android.systemui.recents.misc.Utilities;
25
26 import java.util.Objects;
27
28
29 /**
30  * A task represents the top most task in the system's task stack.
31  */
32 public class Task {
33     /* Task callbacks */
34     public interface TaskCallbacks {
35         /* Notifies when a task has been bound */
36         public void onTaskDataLoaded();
37         /* Notifies when a task has been unbound */
38         public void onTaskDataUnloaded();
39     }
40
41     /** The ComponentNameKey represents the unique primary key for a component
42      * belonging to a specified user. */
43     public static class ComponentNameKey {
44         final ComponentName component;
45         final int userId;
46
47         public ComponentNameKey(ComponentName cn, int user) {
48             component = cn;
49             userId = user;
50         }
51
52         @Override
53         public int hashCode() {
54             return Objects.hash(component, userId);
55         }
56
57         @Override
58         public boolean equals(Object o) {
59             if (!(o instanceof ComponentNameKey)) {
60                 return false;
61             }
62             return component.equals(((ComponentNameKey) o).component) &&
63                     userId == ((ComponentNameKey) o).userId;
64         }
65     }
66
67     /* The Task Key represents the unique primary key for the task */
68     public static class TaskKey {
69         final ComponentNameKey mComponentNameKey;
70         public final int id;
71         public final Intent baseIntent;
72         public final int userId;
73         public long firstActiveTime;
74         public long lastActiveTime;
75
76         public TaskKey(int id, Intent intent, int userId, long firstActiveTime, long lastActiveTime) {
77             mComponentNameKey = new ComponentNameKey(intent.getComponent(), userId);
78             this.id = id;
79             this.baseIntent = intent;
80             this.userId = userId;
81             this.firstActiveTime = firstActiveTime;
82             this.lastActiveTime = lastActiveTime;
83         }
84
85         /** Returns the component name key for this task. */
86         public ComponentNameKey getComponentNameKey() {
87             return mComponentNameKey;
88         }
89
90         @Override
91         public boolean equals(Object o) {
92             if (!(o instanceof TaskKey)) {
93                 return false;
94             }
95             return id == ((TaskKey) o).id
96                     && userId == ((TaskKey) o).userId;
97         }
98
99         @Override
100         public int hashCode() {
101             return (id << 5) + userId;
102         }
103
104         @Override
105         public String toString() {
106             return "Task.Key: " + id + ", "
107                     + "u: " + userId + ", "
108                     + "lat: " + lastActiveTime + ", "
109                     + baseIntent.getComponent().getPackageName();
110         }
111     }
112
113     public TaskKey key;
114     public TaskGrouping group;
115     public int taskAffiliation;
116     public int taskAffiliationColor;
117     public boolean isLaunchTarget;
118     public Drawable applicationIcon;
119     public Drawable activityIcon;
120     public String activityLabel;
121     public int colorPrimary;
122     public boolean useLightOnPrimaryColor;
123     public Bitmap thumbnail;
124     public boolean isActive;
125     public boolean lockToThisTask;
126     public boolean lockToTaskEnabled;
127     public Bitmap icon;
128     public String iconFilename;
129     TaskCallbacks mCb;
130
131     public Task() {
132         // Do nothing
133     }
134
135     public Task(TaskKey key, boolean isActive, int taskAffiliation, int taskAffiliationColor,
136                 String activityTitle, Drawable activityIcon, int colorPrimary,
137                 boolean lockToThisTask, boolean lockToTaskEnabled, Bitmap icon,
138                 String iconFilename) {
139         boolean isInAffiliationGroup = (taskAffiliation != key.id);
140         boolean hasAffiliationGroupColor = isInAffiliationGroup && (taskAffiliationColor != 0);
141         this.key = key;
142         this.taskAffiliation = taskAffiliation;
143         this.taskAffiliationColor = taskAffiliationColor;
144         this.activityLabel = activityTitle;
145         this.activityIcon = activityIcon;
146         this.colorPrimary = hasAffiliationGroupColor ? taskAffiliationColor : colorPrimary;
147         this.useLightOnPrimaryColor = Utilities.computeContrastBetweenColors(this.colorPrimary,
148                 Color.WHITE) > 3f;
149         this.isActive = isActive;
150         this.lockToThisTask = lockToTaskEnabled && lockToThisTask;
151         this.lockToTaskEnabled = lockToTaskEnabled;
152         this.icon = icon;
153         this.iconFilename = iconFilename;
154     }
155
156     /** Copies the other task. */
157     public void copyFrom(Task o) {
158         this.key = o.key;
159         this.taskAffiliation = o.taskAffiliation;
160         this.taskAffiliationColor = o.taskAffiliationColor;
161         this.activityLabel = o.activityLabel;
162         this.activityIcon = o.activityIcon;
163         this.colorPrimary = o.colorPrimary;
164         this.useLightOnPrimaryColor = o.useLightOnPrimaryColor;
165         this.isActive = o.isActive;
166         this.lockToThisTask = o.lockToThisTask;
167         this.lockToTaskEnabled = o.lockToTaskEnabled;
168     }
169
170     /** Set the callbacks */
171     public void setCallbacks(TaskCallbacks cb) {
172         mCb = cb;
173     }
174
175     /** Set the grouping */
176     public void setGroup(TaskGrouping group) {
177         if (group != null && this.group != null) {
178             throw new RuntimeException("This task is already assigned to a group.");
179         }
180         this.group = group;
181     }
182
183     /** Notifies the callback listeners that this task has been loaded */
184     public void notifyTaskDataLoaded(Bitmap thumbnail, Drawable applicationIcon) {
185         this.applicationIcon = applicationIcon;
186         this.thumbnail = thumbnail;
187         if (mCb != null) {
188             mCb.onTaskDataLoaded();
189         }
190     }
191
192     /** Notifies the callback listeners that this task has been unloaded */
193     public void notifyTaskDataUnloaded(Bitmap defaultThumbnail, Drawable defaultApplicationIcon) {
194         applicationIcon = defaultApplicationIcon;
195         thumbnail = defaultThumbnail;
196         if (mCb != null) {
197             mCb.onTaskDataUnloaded();
198         }
199     }
200
201     @Override
202     public boolean equals(Object o) {
203         // Check that the id matches
204         Task t = (Task) o;
205         return key.equals(t.key);
206     }
207
208     @Override
209     public String toString() {
210         String groupAffiliation = "no group";
211         if (group != null) {
212             groupAffiliation = Integer.toString(group.affiliation);
213         }
214         return "Task (" + groupAffiliation + "): " + key.baseIntent.getComponent().getPackageName() +
215                 " [" + super.toString() + "]";
216     }
217 }