/*******************************************************************************
* Copyright (c) 2011-2012 Nokia Corporation
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Comarch team - initial API and implementation
*******************************************************************************/
package org.ned.client.view;
import com.sun.lwuit.Command;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.events.DataChangedListener;
import com.sun.lwuit.events.SelectionListener;
import com.sun.lwuit.layouts.BoxLayout;
import org.ned.client.NedMidlet;
import org.ned.client.NedResources;
import org.ned.client.command.BackDownloadCommand;
import org.ned.client.command.HelpCommand;
import org.ned.client.statistics.StatType;
import org.ned.client.statistics.StatisticsManager;
import org.ned.client.transfer.DownloadManager;
import org.ned.client.transfer.DownloadTask;
import org.ned.client.view.customComponents.DownloadList;
public class DownloadQueueScreen extends NedFormBase implements ActionListener, SelectionListener, DataChangedListener {
private final Command mStartCommnad = new Command( NedResources.START );
private final Command mPauseCommand = new Command( NedResources.PAUSE );
private final Command mRemoveCommand = new Command( NedResources.REMOVE );
private final Command mRemoveAllCommand = new Command( NedResources.REMOVEALL );
private DownloadList mTransfersList;
private Label mNoDowloadsLabel;
private Object invoker;
public DownloadQueueScreen() {
super();
setNedTitle( NedResources.MID_DOWNLOADS );
setLayout( new BoxLayout( BoxLayout.Y_AXIS ) );
mNoDowloadsLabel = new Label( NedResources.NO_DOWNLOADS );
mNoDowloadsLabel.setAlignment( CENTER );
DownloadManager downloadManager = NedMidlet.getInstance().
getDownloadManager();
mTransfersList = DownloadList.getDownloadList( downloadManager );
downloadManager.setObserver( mTransfersList );
addCommand( BackDownloadCommand.getInstance().getCommand() );
addCommand( HelpCommand.getInstance().getCommand() );
if ( mTransfersList.size() > 0 ) {
addComponent( mTransfersList );
addCommand( mRemoveCommand );
addCommand( mRemoveAllCommand );
} else {
addComponent( mNoDowloadsLabel );
}
addCommandListener( this );
mTransfersList.addActionListener( this );
mTransfersList.addSelectionListener( this );
mTransfersList.getModel().addDataChangedListener( this );
}
public DownloadQueueScreen( Object invoker ) {
this();
this.invoker = invoker;
}
public void actionPerformed( ActionEvent evt ) {
Object src = evt.getSource();
if ( src == BackDownloadCommand.getInstance().getCommand() ) {
NedMidlet.getInstance().getDownloadManager().setObserver( null );
BackDownloadCommand.getInstance().execute( invoker );
} else if ( src == mRemoveCommand ) {
if ( mTransfersList.getSelectedIndex() >= 0 ) {
if ( GeneralAlert.showQuestion( NedResources.TRA_REMOVE_DOWNLOAD_DIALOG )
== GeneralAlert.RESULT_YES ) {
DownloadTask tr = (DownloadTask)mTransfersList.getModel().
getItemAt( mTransfersList.getSelectedIndex() );
if ( tr != null ) {
tr.CancelAndRemove();
StatisticsManager.logEvent( StatType.DOWNLOAD_REMOVE, "Url="
+ tr.getUrlPath()
+ "Progress="
+ tr.getPercentDownloaded() + ";" );
}
}
}
} else if ( src == mRemoveAllCommand ) {
if ( GeneralAlert.showQuestion( NedResources.REMOVEALL_DOWNLOAD_DIALOG )
== GeneralAlert.RESULT_YES ) {
int size = mTransfersList.getModel().getSize();
for ( int i = size - 1; i >= 0; i-- ) {
DownloadTask tr = (DownloadTask)mTransfersList.getModel().
getItemAt( i );
if ( tr != null ) {
tr.CancelAndRemove();
StatisticsManager.logEvent( StatType.DOWNLOAD_REMOVE, "Url="
+ tr.getUrlPath()
+ "Progress="
+ tr.getPercentDownloaded() + ";" );
}
}
}
} else if ( src == mStartCommnad ) {
if ( mTransfersList.getSelectedIndex() >= 0 ) {
DownloadTask tr = (DownloadTask)mTransfersList.getModel().
getItemAt( mTransfersList.getSelectedIndex() );
if ( tr != null ) {
if ( tr.startDownload( false ) ) {
StatisticsManager.logEvent( StatType.DOWNLOAD_START, "Url="
+ tr.getUrlPath()
+ "Progress="
+ tr.getPercentDownloaded() + ";" );
} else {
GeneralAlert.show( NedResources.TOO_MANY_DOWNLOADS, GeneralAlert.INFO );
}
}
}
} else if ( src == mPauseCommand ) {
if ( mTransfersList.getSelectedIndex() >= 0 ) {
DownloadTask tr = (DownloadTask)mTransfersList.getModel().
getItemAt( mTransfersList.getSelectedIndex() );
if ( tr != null ) {
tr.stopDownload();
StatisticsManager.logEvent( StatType.DOWNLOAD_END, "Url="
+ tr.getUrlPath()
+ "Progress="
+ tr.getPercentDownloaded() + ";" );
}
}
} else if ( src instanceof List ) {
if ( mTransfersList.getSelectedIndex() >= 0 ) {
DownloadTask tr = (DownloadTask)mTransfersList.getModel().
getItemAt( mTransfersList.getSelectedIndex() );
if ( tr != null && tr.isDownloading() ) {
tr.stopDownload();
StatisticsManager.logEvent( StatType.DOWNLOAD_END, "Url="
+ tr.getUrlPath()
+ "Progress="
+ tr.getPercentDownloaded() + ";" );
} else {
if ( tr.startDownload( false ) ) {
StatisticsManager.logEvent( StatType.DOWNLOAD_START, "Url="
+ tr.getUrlPath()
+ "Progress="
+ tr.getPercentDownloaded() + ";" );
} else {
GeneralAlert.show( NedResources.TOO_MANY_DOWNLOADS, GeneralAlert.INFO );
}
}
}
} else if ( src == HelpCommand.getInstance().getCommand() ) {
HelpCommand.getInstance().execute( this.getClass() );
}
}
public void selectionChanged( int i, int i1 ) {
removeAllCommands();
addCommand( BackDownloadCommand.getInstance().getCommand() );
addCommand( HelpCommand.getInstance().getCommand() );
if ( mTransfersList.size() > 0 && mTransfersList.getSelectedIndex() >= 0 ) {
DownloadTask tr = (DownloadTask)mTransfersList.getModel().getItemAt( mTransfersList.getSelectedIndex() );
if ( tr != null && tr.isDownloading() ) {
addCommand( mRemoveCommand );
addCommand( mRemoveAllCommand );
addCommand( mPauseCommand );
} else {
addCommand( mRemoveCommand );
addCommand( mRemoveAllCommand );
addCommand( mStartCommnad );
}
} else if ( mTransfersList.size() == 0 ) {
removeComponent( mTransfersList );
if ( !contains( mNoDowloadsLabel ) ) {
addComponent( mNoDowloadsLabel );
}
}
}
public void dataChanged( int i, int i1 ) {
selectionChanged( i, i1 );//to refresh menu action list
}
}