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