package com.code44.finance.ui.settings.data; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import com.code44.finance.R; import com.code44.finance.ui.BaseFragment; import com.code44.finance.ui.dialogs.ListDialogFragment; import com.squareup.otto.Subscribe; import java.util.ArrayList; import java.util.List; public class DataFragment extends BaseFragment implements View.OnClickListener { private static final int REQUEST_BACKUP_DESTINATION = 1; private static final int REQUEST_RESTORE_DESTINATION = 2; private static final int REQUEST_RESTORE_AND_MERGE_DESTINATION = 3; private static final int REQUEST_EXPORT_CSV_DESTINATION = 4; private static final String FRAGMENT_DESTINATION = "FRAGMENT_DESTINATION"; private static final String ARG_EXPORT_TYPE = "ARG_EXPORT_TYPE"; public static DataFragment newInstance() { return new DataFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_data, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Get views final Button backup_B = (Button) view.findViewById(R.id.backup_B); final Button restore_B = (Button) view.findViewById(R.id.restore_B); final Button restoreAndMerge_B = (Button) view.findViewById(R.id.restoreAndMerge_B); final Button exportCsv_B = (Button) view.findViewById(R.id.exportCsv_B); // Setup backup_B.setOnClickListener(this); restore_B.setOnClickListener(this); restoreAndMerge_B.setOnClickListener(this); exportCsv_B.setOnClickListener(this); } @Override public void onResume() { super.onResume(); getEventBus().register(this); } @Override public void onPause() { super.onPause(); getEventBus().unregister(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.backup_B: chooseSourceOrDestination(REQUEST_BACKUP_DESTINATION, R.string.create_backup); break; case R.id.restore_B: chooseSourceOrDestination(REQUEST_RESTORE_DESTINATION, R.string.clear_and_restore); break; case R.id.restoreAndMerge_B: chooseSourceOrDestination(REQUEST_RESTORE_AND_MERGE_DESTINATION, R.string.import_backup); break; case R.id.exportCsv_B: chooseSourceOrDestination(REQUEST_EXPORT_CSV_DESTINATION, R.string.export_csv); break; } } @Subscribe public void onBackupDestinationSelected(ListDialogFragment.ListDialogEvent event) { if ((event.getRequestCode() != REQUEST_BACKUP_DESTINATION && event.getRequestCode() != REQUEST_RESTORE_DESTINATION && event.getRequestCode() != REQUEST_RESTORE_AND_MERGE_DESTINATION && event.getRequestCode() != REQUEST_EXPORT_CSV_DESTINATION) || event.isActionButtonClicked()) { return; } event.dismiss(); if (event.getRequestCode() == REQUEST_BACKUP_DESTINATION) { final ExportActivity.Destination destination; if (event.getPosition() == 0) { destination = ExportActivity.Destination.GoogleDrive; } else { destination = ExportActivity.Destination.File; } ExportActivity.start(getActivity(), ExportActivity.ExportType.Backup, destination); } else if (event.getRequestCode() == REQUEST_RESTORE_DESTINATION) { final ImportActivity.Source source; if (event.getPosition() == 0) { source = ImportActivity.Source.GoogleDrive; } else { source = ImportActivity.Source.File; } ImportActivity.start(getActivity(), ImportActivity.ImportType.Backup, source); } else if (event.getRequestCode() == REQUEST_RESTORE_AND_MERGE_DESTINATION) { final ImportActivity.Source source; if (event.getPosition() == 0) { source = ImportActivity.Source.GoogleDrive; } else { source = ImportActivity.Source.File; } ImportActivity.start(getActivity(), ImportActivity.ImportType.MergeBackup, source); } else { final ExportActivity.Destination destination; if (event.getPosition() == 0) { destination = ExportActivity.Destination.GoogleDrive; } else { destination = ExportActivity.Destination.File; } ExportActivity.start(getActivity(), ExportActivity.ExportType.CSV, destination); } } private void chooseSourceOrDestination(int requestCode, int titleResId) { final List<ListDialogFragment.ListDialogItem> items = new ArrayList<>(); items.add(new ListDialogFragment.ListDialogItem(getString(R.string.google_drive))); items.add(new ListDialogFragment.ListDialogItem(getString(R.string.file))); final Bundle args = new Bundle(); args.putSerializable(ARG_EXPORT_TYPE, ExportActivity.ExportType.Backup); ListDialogFragment.build(requestCode) .setTitle(getString(titleResId)) .setArgs(args) .setNegativeButtonText(getString(R.string.cancel)) .setItems(items) .build() .show(getChildFragmentManager(), FRAGMENT_DESTINATION); } }