Task.java revision 5e3e5d8945249cfeb8bd59de112be88954ba62bf
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
19303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.content.Intent;
20303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.graphics.Bitmap;
21303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.graphics.drawable.Drawable;
22303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
23303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
24303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/**
25303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * A task represents the top most task in the system's task stack.
26303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung */
27303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungpublic class Task {
2804dfe0d26b944324ee920001f40d74cff47281d6Winson Chung    /* Task callbacks */
2904dfe0d26b944324ee920001f40d74cff47281d6Winson Chung    public interface TaskCallbacks {
3004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        /* Notifies when a task has been bound */
314c71aefcbd7f7bef5dab1d05d5f7001aaea1b067Winson Chung        public void onTaskDataLoaded(boolean reloadingTaskData);
3204dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        /* Notifies when a task has been unbound */
3304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        public void onTaskDataUnloaded();
3404dfe0d26b944324ee920001f40d74cff47281d6Winson Chung    }
3504dfe0d26b944324ee920001f40d74cff47281d6Winson Chung
3604dfe0d26b944324ee920001f40d74cff47281d6Winson Chung    /* The Task Key represents the unique primary key for the task */
3704dfe0d26b944324ee920001f40d74cff47281d6Winson Chung    public static class TaskKey {
3804dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        public final int id;
39c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung        public final Intent baseIntent;
4004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung
4104dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        public TaskKey(int id, Intent intent) {
4204dfe0d26b944324ee920001f40d74cff47281d6Winson Chung            this.id = id;
43c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung            this.baseIntent = intent;
4404dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        }
4504dfe0d26b944324ee920001f40d74cff47281d6Winson Chung
4604dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        @Override
4704dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        public boolean equals(Object o) {
4804dfe0d26b944324ee920001f40d74cff47281d6Winson Chung            return hashCode() == o.hashCode();
4904dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        }
5004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung
5104dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        @Override
5204dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        public int hashCode() {
5304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung            return id;
5404dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        }
5504dfe0d26b944324ee920001f40d74cff47281d6Winson Chung
5604dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        @Override
5704dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        public String toString() {
58c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung            return "Task.Key: " + id + ", " + baseIntent.getComponent().getPackageName();
5904dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        }
6004dfe0d26b944324ee920001f40d74cff47281d6Winson Chung    }
6104dfe0d26b944324ee920001f40d74cff47281d6Winson Chung
6204dfe0d26b944324ee920001f40d74cff47281d6Winson Chung    public TaskKey key;
635e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung    public Drawable applicationIcon;
645e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung    public String activityLabel;
655e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung    public Bitmap activityIcon;
66303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public Bitmap thumbnail;
674be0445c66f19ed985aecbc2a572f5d8c6e2553aWinson Chung    public boolean isActive;
68303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
69303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    TaskCallbacks mCb;
70303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
715e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung    public Task(int id, boolean isActive, Intent intent, String activityTitle,
725e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung                Bitmap activityIcon) {
7304dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        this.key = new TaskKey(id, intent);
745e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung        this.activityLabel = activityTitle;
755e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung        this.activityIcon = activityIcon;
764be0445c66f19ed985aecbc2a572f5d8c6e2553aWinson Chung        this.isActive = isActive;
77303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
78303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
79303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    /** Set the callbacks */
80303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public void setCallbacks(TaskCallbacks cb) {
81303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        mCb = cb;
82303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
83303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
844d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung    /** Notifies the callback listeners that this task has been loaded */
855e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung    public void notifyTaskDataLoaded(Bitmap thumbnail, Drawable applicationIcon,
865e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung                                     boolean reloadingTaskData) {
875e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung        this.applicationIcon = applicationIcon;
884d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung        this.thumbnail = thumbnail;
894d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung        if (mCb != null) {
904c71aefcbd7f7bef5dab1d05d5f7001aaea1b067Winson Chung            mCb.onTaskDataLoaded(reloadingTaskData);
914d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung        }
924d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung    }
934d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung
944d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung    /** Notifies the callback listeners that this task has been unloaded */
955e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung    public void notifyTaskDataUnloaded(Bitmap defaultThumbnail, Drawable defaultApplicationIcon) {
965e3e5d8945249cfeb8bd59de112be88954ba62bfWinson Chung        applicationIcon = defaultApplicationIcon;
974d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung        thumbnail = defaultThumbnail;
984d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung        if (mCb != null) {
9904dfe0d26b944324ee920001f40d74cff47281d6Winson Chung            mCb.onTaskDataUnloaded();
1004d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung        }
1014d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung    }
1024d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung
103303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    @Override
104303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public boolean equals(Object o) {
105a10370fc2eb8eb95631592160c5f6281b9d75722Winson Chung        // Check that the id matches
106303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        Task t = (Task) o;
10704dfe0d26b944324ee920001f40d74cff47281d6Winson Chung        return key.equals(t.key);
108303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
109303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
110303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    @Override
111303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public String toString() {
112c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung        return "Task: " + key.baseIntent.getComponent().getPackageName() + " [" + super.toString() + "]";
113303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
114303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung}
115