package com.ronakmanglani.watchlist.ui.fragment; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.preference.Preference; import android.preference.PreferenceFragment; import android.widget.Toast; import com.nononsenseapps.filepicker.FilePickerActivity; import com.ronakmanglani.watchlist.R; import com.ronakmanglani.watchlist.WatchlistApp; import com.ronakmanglani.watchlist.util.FileUtil; import java.io.File; public class BackupFragment extends PreferenceFragment { private static final String DATABASE_NAME = "movieDatabase.db"; private static final int BACKUP_CODE = 42; private static final int RESTORE_CODE = 43; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); getPreferenceManager().setSharedPreferencesName(WatchlistApp.TABLE_USER); addPreferencesFromResource(R.xml.pref_backup); Preference backupPreference = findPreference(getString(R.string.pref_key_backup)); backupPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Intent i = new Intent(getActivity(), FilePickerActivity.class); i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false); i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true); i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR); i.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().getPath()); startActivityForResult(i, BACKUP_CODE); Toast.makeText(getActivity(), R.string.backup_select, Toast.LENGTH_SHORT).show(); return true; } }); Preference restorePreference = findPreference(getString(R.string.pref_key_restore)); restorePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Intent i = new Intent(getActivity(), FilePickerActivity.class); i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false); i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, false); i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_FILE); i.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().getPath()); startActivityForResult(i, RESTORE_CODE); Toast.makeText(getActivity(), R.string.restore_select, Toast.LENGTH_SHORT).show(); return true; } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == BACKUP_CODE && resultCode == Activity.RESULT_OK) { try { File srcFile = getActivity().getDatabasePath(DATABASE_NAME); File dstFile = new File(data.getData().getPath() + File.separator + "Watchlist-" + (System.currentTimeMillis()/1000) + ".bak"); FileUtil.copyFile(srcFile, dstFile); Toast.makeText(getActivity(), R.string.backup_complete, Toast.LENGTH_SHORT).show(); } catch (Exception e) { Toast.makeText(getActivity(), R.string.backup_failed, Toast.LENGTH_SHORT).show(); } } else if (requestCode == RESTORE_CODE && resultCode == Activity.RESULT_OK) { File srcFile = new File(data.getData().getPath()); if (FileUtil.isValidDbFile(srcFile)) { try { File dstFile = getActivity().getDatabasePath(DATABASE_NAME); FileUtil.copyFile(srcFile, dstFile); Toast.makeText(getActivity(), R.string.restore_complete, Toast.LENGTH_SHORT).show(); } catch (Exception e) { Toast.makeText(getActivity(), R.string.restore_failed, Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(getActivity(), R.string.restore_invalid, Toast.LENGTH_SHORT).show(); } } } }