package com.myMinistry.fragments; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Locale; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.Toast; import com.myMinistry.FragmentActivityStatus; import com.myMinistry.Helper; import com.myMinistry.R; import com.myMinistry.adapters.ItemAdapter; import com.myMinistry.model.NavDrawerMenuItem; import com.myMinistry.provider.MinistryDatabase; import com.myMinistry.provider.MinistryService; import com.myMinistry.util.FileUtils; public class DBBackupsListFragment extends ListFragment { private String[] fileList; private ItemAdapter adapter; private final int REF_RESTORE = 0; private final int REF_EMAIL = 1; private final int REF_DELETE = 2; private FragmentActivityStatus fragmentActivityStatus; public DBBackupsListFragment newInstance() { return new DBBackupsListFragment(); } @Override public void onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = fragmentActivityStatus.isDrawerOpen(); if(menu.findItem(R.id.create_bu) != null) menu.findItem(R.id.create_bu).setVisible(!drawerOpen); if(menu.findItem(R.id.cleanup_bu) != null) menu.findItem(R.id.cleanup_bu).setVisible(!drawerOpen); super.onPrepareOptionsMenu(menu); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.db_backups, menu); } @Override public void onAttach(Activity activity) { super.onAttach(activity); fragmentActivityStatus = (FragmentActivityStatus)activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.db_backups_list, container, false); setHasOptionsMenu(true); view.findViewById(R.id.tv_add_item).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { createBackup(); } }); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); adapter = new ItemAdapter(getActivity().getApplicationContext()); loadAdapter(); setListAdapter(adapter); } @Override public void onListItemClick(ListView l, View v, final int position, long id) { final File file = FileUtils.getExternalDBFile(getActivity(), fileList[position].toString()); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(fileList[position].toString()); builder.setItems(getResources().getStringArray(R.array.db_backups_list_item_options), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { if(item == REF_RESTORE) { MinistryService database = new MinistryService(getActivity().getApplicationContext()); database.openWritable(); try { if(database.importDatabase(file, getActivity().getApplicationContext().getDatabasePath(MinistryDatabase.DATABASE_NAME))) { Toast.makeText(getActivity(), getActivity().getApplicationContext().getString(R.string.toast_import_text), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), getActivity().getApplicationContext().getString(R.string.toast_import_text_error), Toast.LENGTH_SHORT).show(); } } catch (IOException e) { Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show(); } } else if(item == REF_EMAIL) { Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("application/image"); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getActivity().getApplicationContext().getResources().getString(R.string.app_name) + ": " + getActivity().getApplicationContext().getResources().getString(R.string.pref_backup_title)); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + file.getAbsolutePath().toString())); startActivity(Intent.createChooser(emailIntent, getResources().getString(R.string.menu_share))); } else if(item == REF_DELETE) { file.delete(); reloadAdapter(); } } }); AlertDialog alert = builder.create(); alert.show(); } private void createBackup() { SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss-aaa", Locale.getDefault()); Calendar now = Calendar.getInstance(); String date = dateFormatter.format(now.getTime()).toString(); File intDB = getActivity().getApplicationContext().getDatabasePath(MinistryDatabase.DATABASE_NAME); File extDB = FileUtils.getExternalDBFile(getActivity().getApplicationContext(), date + ".db"); try { if(extDB != null) { if(!extDB.exists()) extDB.createNewFile(); FileUtils.copyFile(intDB, extDB); reloadAdapter(); Toast.makeText(getActivity(), getActivity().getApplicationContext().getString(R.string.toast_export_text), Toast.LENGTH_SHORT).show(); } } catch (IOException e) { Toast.makeText(getActivity(), getActivity().getApplicationContext().getString(R.string.toast_export_text_error), Toast.LENGTH_SHORT).show(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.create_bu: createBackup(); return true; case R.id.cleanup_bu: int FLAG = Helper.clearBackups(getActivity().getApplicationContext()); if(FLAG == 1) Toast.makeText(getActivity(), getActivity().getApplicationContext().getString(R.string.toast_cleaned_backups), Toast.LENGTH_SHORT).show(); else if(FLAG == 2) Toast.makeText(getActivity(), getActivity().getApplicationContext().getString(R.string.toast_cleaned_backups_only_one), Toast.LENGTH_SHORT).show(); else if(FLAG == 0) Toast.makeText(getActivity(), getActivity().getApplicationContext().getString(R.string.toast_cleaned_backups_error), Toast.LENGTH_SHORT).show(); reloadAdapter(); return true; default: return super.onOptionsItemSelected(item); } } private String[] loadFileList() { return FileUtils.getExternalDBFile(getActivity().getApplicationContext(), "").list(); } private void loadAdapter() { fileList = loadFileList(); if(fileList != null) Arrays.sort(fileList); else fileList = new String[0]; for(String filename : fileList) adapter.addItem(new NavDrawerMenuItem(filename, R.drawable.ic_drawer_db, 1)); } public void reloadAdapter() { adapter.clear(); loadAdapter(); adapter.notifyDataSetChanged(); } }