package aws.apps.usbDeviceEnumerator.ui.dbupdate;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Environment;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import aws.apps.usbDeviceEnumerator.R;
import aws.apps.usbDeviceEnumerator.data.DataProviderCompanyInfo;
import aws.apps.usbDeviceEnumerator.data.DataProviderCompanyLogo;
import aws.apps.usbDeviceEnumerator.data.DataProviderUsbInfo;
import aws.apps.usbDeviceEnumerator.ui.common.DialogFactory;
import aws.apps.usbDeviceEnumerator.ui.progress.ProgressDialogControl;
import aws.apps.usbDeviceEnumerator.util.NetworkUtils;
import aws.apps.usbDeviceEnumerator.util.NotifyUser;
public class DatabaseUpdater {
private static final String TAG = DatabaseUpdater.class.getSimpleName();
private final ProgressDialogControl progressDialogControl;
private final DataProviderCompanyInfo dbAccessCompany;
private final DataProviderUsbInfo dbAccessUsb;
private final DataProviderCompanyLogo zipAccessCompany;
public DatabaseUpdater(final ProgressDialogControl progressDialogControl,
final DataProviderCompanyInfo dbAccessCompany,
final DataProviderUsbInfo dbAccessUsb,
final DataProviderCompanyLogo zipAccessCompany) {
this.progressDialogControl = progressDialogControl;
this.dbAccessCompany = dbAccessCompany;
this.dbAccessUsb = dbAccessUsb;
this.zipAccessCompany = zipAccessCompany;
}
public void start(final Context context) {
if (validate(context)) {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
final List<FileDownloadTask.Downloadable> downloadables
= createDownloadables(context);
builder.setMessage(R.string.alert_update_db)
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@SuppressWarnings("unchecked")
@Override
public void onClick(DialogInterface dialog, int which) {
final FileDownloadTask.Downloadable[] array
= downloadables.toArray(new FileDownloadTask.Downloadable[downloadables.size()]);
new FileDownloadTask(context, progressDialogControl).execute(array);
}
});
builder.create().show();
}
}
private boolean validate(final Context context) {
final boolean valid;
if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
Log.d(TAG, "^ SD card not available.");
NotifyUser.notify(context, R.string.sd_not_available);
valid = false;
} else if (!NetworkUtils.isOnline(context)) { // If we are not online, cancel everything
DialogFactory.createOkDialog(
context,
R.string.text_device_offline,
R.string.text_device_offline_instructions)
.show();
valid = false;
} else {
valid = true;
}
return valid;
}
private List<FileDownloadTask.Downloadable> createDownloadables(final Context context) {
final List<FileDownloadTask.Downloadable> downloads = new ArrayList<FileDownloadTask.Downloadable>();
downloads.add(new FileDownloadTask.Downloadable(
dbAccessUsb.getUrl(),
dbAccessUsb.getDataFilePath()));
downloads.add(new FileDownloadTask.Downloadable(
dbAccessCompany.getUrl(),
dbAccessCompany.getDataFilePath()));
downloads.add(new FileDownloadTask.Downloadable(
zipAccessCompany.getUrl(),
zipAccessCompany.getDataFilePath()));
return downloads;
}
}