package co.smartreceipts.android.sync.widget.backups;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.widget.Toast;
import com.google.common.base.Preconditions;
import javax.inject.Inject;
import co.smartreceipts.android.R;
import co.smartreceipts.android.analytics.Analytics;
import co.smartreceipts.android.analytics.events.ErrorEvent;
import co.smartreceipts.android.persistence.PersistenceManager;
import co.smartreceipts.android.persistence.database.controllers.impl.TripTableController;
import co.smartreceipts.android.persistence.database.tables.Table;
import co.smartreceipts.android.sync.manual.ManualBackupAndRestoreTaskCache;
import dagger.android.support.AndroidSupportInjection;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
public class ImportLocalBackupWorkerProgressDialogFragment extends DialogFragment {
private static final String ARG_SMR_URI = "arg_smr_uri";
private static final String ARG_OVERWRITE = "arg_overwrite";
@Inject
PersistenceManager persistenceManager;
@Inject
Analytics analytics;
@Inject
TripTableController tripTableController;
private ManualBackupAndRestoreTaskCache manualBackupAndRestoreTaskCache;
private Disposable disposable;
private Uri uri;
private boolean overwrite;
public static ImportLocalBackupWorkerProgressDialogFragment newInstance(@NonNull Uri uri, boolean overwrite) {
final ImportLocalBackupWorkerProgressDialogFragment fragment = new ImportLocalBackupWorkerProgressDialogFragment();
final Bundle args = new Bundle();
args.putParcelable(ARG_SMR_URI, uri);
args.putBoolean(ARG_OVERWRITE, overwrite);
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Context context) {
AndroidSupportInjection.inject(this);
super.onAttach(context);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCancelable(false);
uri = getArguments().getParcelable(ARG_SMR_URI);
overwrite = getArguments().getBoolean(ARG_OVERWRITE);
Preconditions.checkNotNull(uri, "ImportBackupDialogFragment requires a valid SMR Uri");
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
ProgressDialog dialog = new ProgressDialog(getActivity(), getTheme());
dialog.setMessage(getString(R.string.progress_import));
dialog.setIndeterminate(true);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
return dialog;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
manualBackupAndRestoreTaskCache = new ManualBackupAndRestoreTaskCache(getFragmentManager(), persistenceManager, getContext());
}
@Override
public void onResume() {
super.onResume();
disposable = manualBackupAndRestoreTaskCache.getManualRestoreTask().restoreData(uri, overwrite).observeOn(AndroidSchedulers.mainThread())
.subscribe(success -> {
if (success != null && success) {
Toast.makeText(getActivity(), R.string.toast_import_complete, Toast.LENGTH_LONG).show();
for (final Table table : persistenceManager.getDatabase().getTables()) {
table.clearCache();
}
tripTableController.get();
getActivity().finishAffinity(); // TODO: Fix this hack (for the settings import)
} else {
Toast.makeText(getActivity(), getString(R.string.IMPORT_ERROR), Toast.LENGTH_LONG).show();
}
}, throwable -> {
analytics.record(new ErrorEvent(ImportLocalBackupWorkerProgressDialogFragment.this, throwable));
Toast.makeText(getActivity(), getString(R.string.IMPORT_ERROR), Toast.LENGTH_LONG).show();
dismiss();
}, this::dismiss);
}
@Override
public void onPause() {
disposable.dispose();
super.onPause();
}
}