/** @file DataDownloader.java * * @author marco corvi * @date sept 2014 * * @brief TopoDroid survey shots data downloader (continuous mode) * * -------------------------------------------------------- * 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.content.Context; // import android.content.BroadcastReceiver; import android.content.Intent; import android.content.IntentFilter; import android.bluetooth.BluetoothDevice; import android.widget.Button; // import android.widget.Toast; import android.os.Bundle; import android.util.Log; class DataDownloader { private boolean mConnected = false; // whetehr it is "connected" private boolean mDownload = false; // whether it is "downloading" boolean isConnected() { return mConnected; } boolean isDownloading() { return mDownload; } boolean needReconnect() { return mDownload && ! mConnected; } void setConnected( boolean connected ) { mConnected = connected; } void setDownload( boolean download ) { mDownload = download; } // int mStatus = 0; // 0 disconnected, 1 connected, 2 connecting int getStatus() { if ( ! mDownload ) return 0; if ( ! mConnected ) { if ( TDSetting.mAutoReconnect ) return 2; return 0; } // setDownload( false ); return 1; } private Context mContext; private TopoDroidApp mApp; // private BroadcastReceiver mBTReceiver = null; DataDownloader( Context context, TopoDroidApp app ) { mContext = context; mApp = app; // mBTReceiver = null; } void toggleDownload() { mDownload = ! mDownload; } void doDataDownload() { if ( mDownload ) { startDownloadData(); } else { stopDownloadData(); } } /** called with mDownload == true */ private void startDownloadData( ) { // TDLog.Log( TDLog.LOG_COMM, "**** download data. status: " + mStatus ); if ( TDSetting.mConnectionMode == TDSetting.CONN_MODE_BATCH ) { tryDownloadData( ); } else if ( TDSetting.mConnectionMode == TDSetting.CONN_MODE_CONTINUOUS ) { if ( TDSetting.mAutoReconnect ) { new ReconnectTask( this ).execute(); } else { tryConnect(); } notifyConnectionStatus( mConnected ); } else if ( TDSetting.mConnectionMode == TDSetting.CONN_MODE_MULTI ) { tryDownloadData( ); } } void stopDownloadData() { // Log.v("DistoX", "stop Download Data() connected " + mConnected ); // if ( ! mConnected ) return; if ( TDSetting.isConnectionModeBatch() ) { mApp.disconnectComm(); notifyConnectionStatus( false ); } } // called also by ReconnectTask void tryConnect() { // Log.v("DistoX", "try Connect() download " + mDownload + " connected " + mConnected ); if ( mApp.mDevice != null && mApp.mBTAdapter.isEnabled() ) { mApp.disconnectComm(); if ( ! mDownload ) { mConnected = false; return; } if ( ! mConnected ) { mConnected = mApp.connectDevice( mApp.mDevice.mAddress ); // TDLog.Log( TDLog.LOG_COMM, "**** try Connect status 0 --> " + mStatus ); } else { mConnected = false; // TDLog.Log( TDLog.LOG_COMM, "**** try Connect status " + mStatus + " --> 0 " ); } } } void notifyConnectionStatus( boolean connected ) { mConnected = connected; mApp.notifyStatus( ); } // BATCH ON-DEMAND DOWNLOAD // non-private to allow the DistoX select dialog void tryDownloadData( ) { // mSecondLastShotId = mApp.lastShotId( ); if ( mApp.mDevice != null && mApp.mBTAdapter.isEnabled() ) { notifyConnectionStatus( true ); // TDLog.Log( TDLog.LOG_COMM, "shot menu DOWNLOAD" ); new DataDownloadTask( mApp, mApp.mListerSet ).execute(); } else { mDownload = false; notifyConnectionStatus( false ); TDLog.Error( "download data: no device selected" ); if ( mApp.mSID < 0 ) { TDLog.Error( "download data: no survey selected" ); } else { // DistoXDBlock last_blk = mApp.mData.selectLastLegShot( mApp.mSID ); // (new ShotNewDialog( mContext, mApp, lister, last_blk, -1L )).show(); } } } // static boolean mConnectedSave = false; void onStop() { // Log.v("DistoX", "DataDownloader onStop()"); mDownload = false; if ( mConnected ) { stopDownloadData(); mConnected = false; } } void onResume() { // Log.v("DistoX", "DataDownloader onResume()"); } }