-/* ownCloud Android client application
- * Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program 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.owncloud.android.files.managers;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.owncloud.android.R;
-import com.owncloud.android.utils.DisplayUtils;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.widget.RemoteViews;
-
-
-public class OCNotificationManager {
-
- enum NotificationType {
- NOTIFICATION_SIMPLE,
- NOTIFICATION_PROGRESS
- }
-
- static public class NotificationData {
- private String mText, mSubtitle;
- private int mPercent;
- private boolean mOngoing;
-
- public NotificationData(String text, String subtitle, boolean ongoing) {
- this(text, subtitle, -1, ongoing);
- }
-
- public NotificationData(int percent, boolean ongoing) {
- this(null, null, percent, ongoing);
- }
-
- public NotificationData(String text, int percent, boolean ongoing) {
- this(text, null, percent, ongoing);
- }
-
- public NotificationData(String text, String subtitle, int percent, boolean ongoing) {
- mText = text;
- mPercent = percent;
- mSubtitle = subtitle;
- mOngoing = ongoing;
- }
-
- public String getText() { return mText; }
- public int getPercent() { return mPercent; }
- public String getSubtitle() { return mSubtitle; }
- public boolean getOngoing() { return mOngoing; }
- }
-
- static private OCNotificationManager mInstance = null;
-
- private class NotificationTypePair {
- public Notification mNotificaiton;
- public NotificationType mType;
- public NotificationTypePair(Notification n, NotificationType type) {
- mNotificaiton = n;
- mType = type;
- }
- }
-
- private Context mContext;
- private Map<Integer, NotificationTypePair> mNotificationMap;
- private int mNotificationCounter;
- NotificationManager mNM;
-
- static OCNotificationManager getInstance(Context context) {
- if (mInstance == null)
- mInstance = new OCNotificationManager(context);
- return mInstance;
- }
-
- OCNotificationManager(Context context) {
- mContext = context;
- mNotificationMap = new HashMap<Integer, NotificationTypePair>();
- mNM = (NotificationManager)mContext.getSystemService(Context.NOTIFICATION_SERVICE);
- mNotificationCounter = 0;
- }
-
- public int postNotification(NotificationType type, NotificationData data) {
- mNotificationCounter++;
- Notification notification = null;
-
- switch (type) {
- case NOTIFICATION_SIMPLE:
- notification = new Notification(DisplayUtils.getSeasonalIconId(), data.getText(), System.currentTimeMillis());
- break;
- case NOTIFICATION_PROGRESS:
- notification = new Notification();
- notification.contentView = new RemoteViews(mContext.getPackageName(), R.layout.progressbar_layout);
- notification.contentView.setTextViewText(R.id.status_text,
- data.getText());
- notification.contentView.setImageViewResource(R.id.status_icon,
- R.id.icon);
- notification.contentView.setProgressBar(R.id.status_progress,
- 100,
- data.getPercent(),
- false);
- break;
- default:
- return -1;
- }
- if (data.getOngoing()) {
- notification.flags |= notification.flags | Notification.FLAG_ONGOING_EVENT;
- }
-
- mNotificationMap.put(mNotificationCounter, new NotificationTypePair(notification, type));
- return mNotificationCounter;
- }
-
- public boolean updateNotification(int notification_id, NotificationData data) {
- if (!mNotificationMap.containsKey(notification_id)) {
- return false;
- }
- NotificationTypePair pair = mNotificationMap.get(notification_id);
- switch (pair.mType) {
- case NOTIFICATION_PROGRESS:
- pair.mNotificaiton.contentView.setProgressBar(R.id.status_text,
- 100,
- data.getPercent(),
- false);
- return true;
- case NOTIFICATION_SIMPLE:
- pair.mNotificaiton = new Notification(DisplayUtils.getSeasonalIconId(),
- data.getText(), System.currentTimeMillis());
- mNM.notify(notification_id, pair.mNotificaiton);
- return true;
- default:
- return false;
- }
- }
-
- public void discardNotification(int notification_id) {
- mNM.cancel(notification_id);
- mNotificationMap.remove(notification_id);
- }
-}