package com.code44.finance.data.backup; import android.content.Context; import com.code44.finance.data.db.DBHelper; import com.code44.finance.ui.settings.data.ImportActivity; import com.code44.finance.utils.EventBus; import com.code44.finance.utils.errors.ImportError; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.drive.Contents; import com.google.android.gms.drive.Drive; import com.google.android.gms.drive.DriveApi; import com.google.android.gms.drive.DriveFile; import com.google.android.gms.drive.DriveId; public class DriveDataImporterRunnable implements Runnable { private final GoogleApiClient googleApiClient; private final DriveId driveId; private final ImportActivity.ImportType importType; private final Context context; private final DBHelper dbHelper; private final EventBus eventBus; public DriveDataImporterRunnable(GoogleApiClient googleApiClient, DriveId driveId, ImportActivity.ImportType importType, Context context, DBHelper dbHelper, EventBus eventBus) { this.googleApiClient = googleApiClient; this.driveId = driveId; this.importType = importType; this.context = context; this.dbHelper = dbHelper; this.eventBus = eventBus; } @Override public void run() { final DriveFile driveFile = Drive.DriveApi.getFile(googleApiClient, driveId); final DriveApi.ContentsResult result = driveFile.openContents(googleApiClient, DriveFile.MODE_READ_ONLY, null).await(); if (!result.getStatus().isSuccess()) { throw new ImportError("Import failed."); } final Contents contents = result.getContents(); final DataImporterRunnable dataImporterRunnable = new DataImporterRunnable(eventBus, importType.getDataImporter(contents.getInputStream(), context, dbHelper)); dataImporterRunnable.run(); driveFile.discardContents(googleApiClient, contents); } }