NotificationData.java revision 9c1d823465fa0bd782b2ea4afc518835b4bfecce
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
17503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratopackage com.android.policy.statusbar.phone;
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
25e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport java.util.ArrayList;
26e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
27e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato/**
28e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato * The list of currently displaying notifications.
29e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato */
30503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratopublic class NotificationData {
31e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public static final class Entry {
32e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        public IBinder key;
33e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        public StatusBarNotification notification;
3466b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        public StatusBarIconView icon;
359c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        public View row; // the outer expanded view
369c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        public View content; // takes the click events and sends the PendingIntent
379c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        public View expanded; // the inflated RemoteViews
38e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
39e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    private final ArrayList<Entry> mEntries = new ArrayList<Entry>();
40e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
41e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public int size() {
42e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return mEntries.size();
43e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
44e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
45e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public Entry getEntryAt(int index) {
46e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return mEntries.get(index);
47e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
48e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
490e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato    public int findEntry(IBinder key) {
500e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        final int N = mEntries.size();
510e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        for (int i=0; i<N; i++) {
520e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato            Entry entry = mEntries.get(i);
530e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato            if (entry.key == key) {
540e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato                return i;
550e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato            }
560e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        }
570e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        return -1;
580e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato    }
590e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato
609c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato    public int add(IBinder key, StatusBarNotification notification, View row, View content,
619c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato            View expanded, StatusBarIconView icon) {
62e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        Entry entry = new Entry();
63e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.key = key;
64e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.notification = notification;
659c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        entry.row = row;
669c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        entry.content = content;
67e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.expanded = expanded;
6866b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        entry.icon = icon;
69e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        final int index = chooseIndex(notification.notification.when);
70e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        mEntries.add(index, entry);
71e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return index;
72e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
73e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
7466b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato    public Entry remove(IBinder key) {
7566b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        final int N = mEntries.size();
7666b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        for (int i=0; i<N; i++) {
7766b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato            Entry entry = mEntries.get(i);
7866b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato            if (entry.key == key) {
7966b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato                mEntries.remove(i);
8066b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato                return entry;
8166b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato            }
8266b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        }
8366b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        return null;
8466b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato    }
8566b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato
86e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    private int chooseIndex(final long when) {
87e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        final int N = mEntries.size();
88e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        for (int i=0; i<N; i++) {
89e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato            Entry entry = mEntries.get(i);
90e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato            if (entry.notification.notification.when > when) {
91e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato                return i;
92e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato            }
93e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        }
94e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return N;
95503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
9620da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato
9720da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    /**
9820da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     * Return whether there are any visible items (i.e. items without an error).
9920da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     */
10020da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    public boolean hasVisibleItems() {
1019c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        final int N = mEntries.size();
1029c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        for (int i=0; i<N; i++) {
1039c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato            Entry entry = mEntries.get(i);
1049c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato            if (entry.expanded != null) { // the view successfully inflated
1059c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato                return true;
1069c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato            }
1079c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        }
1089c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato        return false;
10920da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    }
11020da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato
11120da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    /**
11220da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     * Return whether there are any clearable items (that aren't errors).
11320da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato     */
11420da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    public boolean hasClearableItems() {
11520da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato        final int N = mEntries.size();
11620da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato        for (int i=0; i<N; i++) {
11720da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato            Entry entry = mEntries.get(i);
1189c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato            if (entry.expanded != null) { // the view successfully inflated
1199c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato                if ((entry.notification.notification.flags & Notification.FLAG_NO_CLEAR) == 0) {
1209c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato                    return true;
1219c1d823465fa0bd782b2ea4afc518835b4bfecceJoe Onorato                }
12220da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato            }
12320da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato        }
12420da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato        return false;
12520da8f8ac9cfc8b845231c6b93f5b64a764ab39aJoe Onorato    }
126503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato}
127