/**
* This file is part of Picasa Photo Uploader.
*
* Picasa Photo Uploader is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Picasa Photo Uploader 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 Picasa Photo Uploader. If not, see <http://www.gnu.org/licenses/>.
*/
package com.ettrema.android.photouploader;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
/**
* Class to maintain upload notification
*
* @author Jan Peter Hooiveld
*/
public class UploadNotification extends Notification {
/**
* Unique notificaion id
*/
private int id;
/**
* Filesize used as maximum value for progressbar
*/
private int max;
/**
* Current upload progress of file
*/
private int progress = 0;
/**
* Name of file being uploaded
*/
private String filename;
/**
* Manager that deals with notifications
*/
private NotificationManager manager;
/**
* Constructor, creates new status notification for file being uploaded
*
* @param context Application context
* @param id Unique notification id
* @param max Filesize used as maximum value for progressbar
* @param filename Name of file being uploaded
*/
@SuppressWarnings( "static-access" )
public UploadNotification( Context context, int id, int max, String filename ) {
// call parent
super();
// set class vars
this.id = id;
this.max = max;
this.filename = filename;
try {
// set manager, etra info, the custom view and intent
manager = (NotificationManager) context.getSystemService( Context.NOTIFICATION_SERVICE );
icon = android.R.drawable.stat_sys_upload;
tickerText = "Uploading: " + filename;
flags |= super.FLAG_ONGOING_EVENT;
contentView = new RemoteViews( context.getPackageName(), R.layout.upload );
Intent intent = new Intent( context, this.getClass() );
contentIntent = PendingIntent.getActivity( context, 0, intent, 0 );
// set fields in the custom view
contentView.setImageViewResource( R.id.uploadImage, android.R.drawable.stat_sys_upload );
contentView.setTextViewText( R.id.uploadText, "Uploading: " + filename );
contentView.setProgressBar( R.id.uploadBar, max, progress, false );
// show notification to user
manager.notify( id, this );
} catch( Exception e ) {
}
}
/**
* Update status notificaion with the new progress
*
* @param progress Progress of file upload
*/
public void update( int progress ) {
// update file upload progress
this.progress += progress;
try {
// set fields in the custom view
icon = android.R.drawable.stat_sys_upload;
contentView.setTextViewText( R.id.uploadText, "Uploading: " + filename );
contentView.setProgressBar( R.id.uploadBar, max, this.progress, false );
// change notification for user
manager.notify( id, this );
} catch( Exception e ) {
}
}
/**
* Update status notification that file upload has finished
*/
public void finished() {
try {
// change flags and icon
flags = ~Notification.FLAG_ONGOING_EVENT;
flags += Notification.FLAG_AUTO_CANCEL;
icon = android.R.drawable.stat_sys_upload_done;
// set fields in the custom view
contentView.setImageViewResource( R.id.uploadImage, android.R.drawable.stat_sys_upload_done );
contentView.setTextViewText( R.id.uploadText, "Uploaded: " + filename );
contentView.setProgressBar( R.id.uploadBar, max, max, false );
// change notification for user
manager.notify( id, this );
} catch( Exception e ) {
}
}
/**
* Update status notification that file upload has failed
*/
public void failed() {
try {
// change flags and icon
flags = ~Notification.FLAG_ONGOING_EVENT;
flags += Notification.FLAG_AUTO_CANCEL;
icon = android.R.drawable.stat_sys_warning;
// set fields in the custom view
contentView.setImageViewResource( R.id.uploadImage, android.R.drawable.stat_sys_warning );
contentView.setTextViewText( R.id.uploadText, "Upload failed: " + filename );
contentView.setProgressBar( R.id.uploadBar, max, 0, false );
// change notification for user
manager.notify( id, this );
} catch( Exception e ) {
}
}
/**
* Remove status notification
*/
public void remove() {
try {
// remove notification for user
manager.cancel( id );
} catch( Exception e ) {
}
}
}