/* @file DataDownloadTask.java
*
* @author marco corvi
* @date feb 2012
*
* @brief TopoDroid one-shot download distoX data
* --------------------------------------------------------
* Copyright This sowftare is distributed under GPL-3.0 or later
* See the file COPYING.
* --------------------------------------------------------
*/
package com.topodroid.DistoX;
import java.util.ArrayList;
import android.widget.Toast;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
public class DataDownloadTask extends AsyncTask< String, Integer, Integer >
{
private TopoDroidApp mApp;
private static DataDownloadTask running = null;
// private ILister mLister;
private ListerHandler mLister; // FIXME LISTER
DataDownloadTask( TopoDroidApp app, ListerHandler /* ILister */ lister ) // FIXME LISTER
{
// TDLog.Error( "DataDownloadTask cstr" );
mApp = app;
mLister = lister;
}
// -------------------------------------------------------------------
@Override
protected Integer doInBackground( String... statuses )
{
if ( ! lock() ) return null;
// long time = System.currentTimeMillis();
int nRead = mApp.downloadDataBatch( mLister );
// time = System.currentTimeMillis() - time;
// Log.v("DistoX", "READ " + nRead + " data in " + time + " msec");
// if ( nRead < 0 ) {
// Toast.makeText( mApp.getApplicationContext(), mApp.DistoXConnectionError[ -nRead ], Toast.LENGTH_SHORT ).show();
// TDLog.Error( "doInBackground read " + nRead );
return nRead;
}
// @Override
// protected void onProgressUpdate( Integer... values)
// {
// super.onProgressUpdate( values );
// // TDLog.Log( TDLog.LOG_COMM, "onProgressUpdate " + values );
// }
@Override
protected void onPostExecute( Integer res )
{
// TDLog.Log( TDLog.LOG_COMM, "onPostExecute res " + res );
if ( res != null ) {
int r = res.intValue();
mLister.refreshDisplay( r, true );
}
mApp.mDataDownloader.setDownload( false );
mApp.mDataDownloader.notifyConnectionStatus( false );
unlock();
}
private synchronized boolean lock()
{
if ( running != null ) return false;
running = this;
return true;
}
private synchronized void unlock()
{
if ( running == this ) running = null;
}
}