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