package co.smartreceipts.android.sync.widget.backups; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; 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 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.sync.manual.ManualBackupAndRestoreTaskCache; import dagger.android.support.AndroidSupportInjection; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; public class ExportBackupWorkerProgressDialogFragment extends DialogFragment { @Inject PersistenceManager persistenceManager; @Inject Analytics analytics; private ManualBackupAndRestoreTaskCache manualBackupAndRestoreTaskCache; private Disposable disposable; @Override public void onAttach(Context context) { AndroidSupportInjection.inject(this); super.onAttach(context); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCancelable(false); } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { ProgressDialog dialog = new ProgressDialog(getActivity(), getTheme()); dialog.setMessage(getString(R.string.dialog_export_working)); 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.getManualBackupTask().backupData().observeOn(AndroidSchedulers.mainThread()) .subscribe(uri -> { if (uri != null) { final Intent sentIntent = new Intent(Intent.ACTION_SEND); sentIntent.setType("application/octet-stream"); sentIntent.putExtra(Intent.EXTRA_STREAM, uri); getActivity().startActivity(Intent.createChooser(sentIntent, getString(R.string.export))); } else { Toast.makeText(getContext(), getString(R.string.EXPORT_ERROR), Toast.LENGTH_LONG).show(); } }, throwable -> { analytics.record(new ErrorEvent(ExportBackupWorkerProgressDialogFragment.this, throwable)); Toast.makeText(getContext(), getString(R.string.EXPORT_ERROR), Toast.LENGTH_LONG).show(); dismiss(); }, this::dismiss); } @Override public void onPause() { disposable.dispose(); super.onPause(); } }