/** * Copyright (c) 2013, Redsolution LTD. All rights reserved. * * This file is part of Xabber project; you can redistribute it and/or * modify it under the terms of the GNU General Public License, Version 3. * * Xabber is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License, * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.xabber.android.data.notification; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import com.xabber.android.data.SettingsManager; import android.media.AudioManager; import android.net.Uri; /** * Base provider for the notifications to be displayed. * * @param <T> * @author alexander.ivanov */ public class BaseNotificationProvider<T extends NotificationItem> implements NotificationProvider<T> { protected final Collection<T> items; private final int icon; private boolean canClearNotifications; public BaseNotificationProvider(int icon) { super(); this.items = new ArrayList<T>(); this.icon = icon; canClearNotifications = true; } /** * Adds new or update existed notification item and update notification bar. * * @param item * @param notify <code>null</code> if notification ticker should be shown only * if such notification does exists yet. */ public void add(T item, Boolean notify) { boolean exists = items.remove(item); if (notify == null) notify = !exists; items.add(item); NotificationManager.getInstance().updateNotifications(this, notify ? item : null); } /** * Removes notification and update notification bar. * * @param item * @return */ public boolean remove(T item) { boolean result = items.remove(item); if (result) NotificationManager.getInstance().updateNotifications(this, null); return result; } public void setCanClearNotifications(boolean canClearNotifications) { this.canClearNotifications = canClearNotifications; } @Override public Collection<T> getNotifications() { return Collections.unmodifiableCollection(items); } @Override public boolean canClearNotifications() { return canClearNotifications; } @Override public void clearNotifications() { items.clear(); } @Override public Uri getSound() { return SettingsManager.eventsSound(); } @Override public int getStreamType() { return AudioManager.STREAM_NOTIFICATION; } @Override public int getIcon() { return icon; } }