NotificationData.java revision 0e26dffd6cfcb09b08a94a857b891fdef7fe2b1e
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
19e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport android.os.IBinder;
20e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport android.view.View;
21503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
22e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport com.android.internal.statusbar.StatusBarNotification;
23e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
24e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onoratoimport java.util.ArrayList;
25e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
26e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato/**
27e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato * The list of currently displaying notifications.
28e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato */
29503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratopublic class NotificationData {
30e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public static final class Entry {
31e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        public IBinder key;
32e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        public StatusBarNotification notification;
3366b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        public StatusBarIconView icon;
340e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        public View expanded; // the outer expanded view
350e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        public View contents; // the inflated RemoteViews
36e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
37e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    private final ArrayList<Entry> mEntries = new ArrayList<Entry>();
38e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
39e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public int size() {
40e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return mEntries.size();
41e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
42e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
43e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    public Entry getEntryAt(int index) {
44e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return mEntries.get(index);
45e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
46e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
470e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato    public int findEntry(IBinder key) {
480e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        final int N = mEntries.size();
490e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        for (int i=0; i<N; i++) {
500e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato            Entry entry = mEntries.get(i);
510e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato            if (entry.key == key) {
520e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato                return i;
530e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato            }
540e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        }
550e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        return -1;
560e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato    }
570e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato
5866b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato    public int add(IBinder key, StatusBarNotification notification, View expanded,
5966b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato            StatusBarIconView icon) {
60e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        Entry entry = new Entry();
61e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.key = key;
62e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.notification = notification;
63e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        entry.expanded = expanded;
6466b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        entry.icon = icon;
65e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        final int index = chooseIndex(notification.notification.when);
66e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        mEntries.add(index, entry);
67e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return index;
68e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    }
69e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato
7066b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato    public Entry remove(IBinder key) {
7166b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        final int N = mEntries.size();
7266b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        for (int i=0; i<N; i++) {
7366b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato            Entry entry = mEntries.get(i);
7466b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato            if (entry.key == key) {
7566b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato                mEntries.remove(i);
7666b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato                return entry;
7766b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato            }
7866b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        }
7966b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato        return null;
8066b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato    }
8166b4c5bb36f57a9d83bb7f34288235b82f9be407Joe Onorato
82e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato    private int chooseIndex(final long when) {
83e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        final int N = mEntries.size();
84e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        for (int i=0; i<N; i++) {
85e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato            Entry entry = mEntries.get(i);
86e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato            if (entry.notification.notification.when > when) {
87e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato                return i;
88e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato            }
89e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        }
90e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato        return N;
91503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
92503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato}
93