NotificationData.java revision 379020aec619c66d3e040de01f0726687fd2ad85
1503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato/*
2503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * Copyright (C) 2008 The Android Open Source Project
3503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *
4503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
5503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * you may not use this file except in compliance with the License.
6503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * You may obtain a copy of the License at
7503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *
8503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
9503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *
10503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * Unless required by applicable law or agreed to in writing, software
11503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
12503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * See the License for the specific language governing permissions and
14503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * limitations under the License.
15503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato */
16503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
1779de0c550037a5328bbc7f4fddaf02f192a5c283Joe Onoratopackage com.android.systemui.statusbar;
18503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
1920da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onoratoimport android.app.Notification;
20e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport android.os.IBinder;
21e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport android.view.View;
22503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
23e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport com.android.internal.statusbar.StatusBarNotification;
24e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
25379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandlerimport java.util.Comparator;
26e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport java.util.ArrayList;
27e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
28e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato/**
29e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato * The list of currently displaying notifications.
30e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato */
31503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratopublic class NotificationData {
32e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public static final class Entry {
33e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        public IBinder key;
34e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        public StatusBarNotification notification;
3566b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        public StatusBarIconView icon;
369c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        public View row; // the outer expanded view
379c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        public View content; // takes the click events and sends the PendingIntent
389c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        public View expanded; // the inflated RemoteViews
393eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler        public Entry() {}
403eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler        public Entry(IBinder key, StatusBarNotification n, StatusBarIconView ic) {
413eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler            this.key = key;
423eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler            this.notification = n;
433eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler            this.icon = ic;
443eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler        }
45e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
46e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    private final ArrayList<Entry> mEntries = new ArrayList<Entry>();
47379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler    private final Comparator<Entry> mEntryCmp = new Comparator<Entry>() {
48379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        public int compare(Entry a, Entry b) {
49379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler            return (int)(a.notification.notification.when - b.notification.notification.when);
50379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        }
51379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler    };
52e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
53e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public int size() {
54e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return mEntries.size();
55e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
56e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
57379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler    public Entry findByKey(IBinder key) {
58379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        for (Entry e : mEntries) {
59379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler            if (e.key == key) {
60379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler                return e;
610e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato            }
620e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        }
63379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        return null;
640e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato    }
650e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato
663eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler    public int add(Entry entry) {
67379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        int i;
68379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        int N = mEntries.size();
69379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        for (i=0; i<N; i++) {
70379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler            if (mEntryCmp.compare(mEntries.get(i), entry) > 0) {
71379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler                break;
72379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler            }
73379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        }
74379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        mEntries.add(i, entry);
75379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        return i;
763eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler    }
773eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler
789c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato    public int add(IBinder key, StatusBarNotification notification, View row, View content,
799c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato            View expanded, StatusBarIconView icon) {
80e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        Entry entry = new Entry();
81e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.key = key;
82e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.notification = notification;
839c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        entry.row = row;
849c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        entry.content = content;
85e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.expanded = expanded;
8666b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        entry.icon = icon;
873eebd1ffbf4583270e6926e9c74ff088a2113e07Daniel Sandler        return add(entry);
88e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
89e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
9066b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato    public Entry remove(IBinder key) {
91379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        Entry e = findByKey(key);
92379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        if (e != null) {
93379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler            mEntries.remove(e);
94e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        }
95379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        return e;
96503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
9720da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato
9820da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    /**
9920da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     * Return whether there are any visible items (i.e. items without an error).
10020da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     */
10120da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    public boolean hasVisibleItems() {
102379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        for (Entry e : mEntries) {
103379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler            if (e.expanded != null) { // the view successfully inflated
1049c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato                return true;
1059c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato            }
1069c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        }
1079c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        return false;
10820da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    }
10920da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato
11020da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    /**
11120da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     * Return whether there are any clearable items (that aren't errors).
11220da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     */
11320da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    public boolean hasClearableItems() {
114379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler        for (Entry e : mEntries) {
115379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler            if (e.expanded != null) { // the view successfully inflated
116379020aec619c66d3e040de01f0726687fd2ad85Daniel Sandler                if ((e.notification.notification.flags & Notification.FLAG_NO_CLEAR) == 0) {
1179c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato                    return true;
1189c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato                }
11920da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato            }
12020da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato        }
12120da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato        return false;
12220da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    }
123503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato}
124