package de.blau.android.dialogs; import java.io.FileNotFoundException; import android.annotation.SuppressLint; import android.app.Activity; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog.Builder; import android.support.v7.app.AppCompatDialog; import android.util.Log; import de.blau.android.Main; import de.blau.android.R; import de.blau.android.util.Snack; import de.blau.android.util.ThemeUtils; /** * Display a dialog asking for a file name to save to * */ public class ImportTrack extends DialogFragment { private static final String DEBUG_TAG = ImportTrack.class.getSimpleName(); private static final String TAG = "fragment_import_track"; private Uri uri; /** */ static public void showDialog(FragmentActivity activity, Uri uri) { dismissDialog(activity); FragmentManager fm = activity.getSupportFragmentManager(); ImportTrack importTrackFragment = newInstance(uri); if (importTrackFragment != null) { importTrackFragment.show(fm, TAG); } else { Log.e(DEBUG_TAG,"Unable to create save file dialog "); } } private static void dismissDialog(FragmentActivity activity) { FragmentManager fm = activity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment fragment = fm.findFragmentByTag(TAG); if (fragment != null) { ft.remove(fragment); } ft.commit(); } /** */ static private ImportTrack newInstance(Uri uri) { ImportTrack f = new ImportTrack(); Bundle args = new Bundle(); args.putParcelable("uri", uri); f.setArguments(args); f.setShowsDialog(true); return f; } @Override public void onAttach(Activity activity) { super.onAttach(activity); Log.d(DEBUG_TAG, "onAttach"); if (!(activity instanceof Main)) { throw new ClassCastException(activity.toString() + " can ownly be called from Main"); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCancelable(true); uri = getArguments().getParcelable("uri"); } @NonNull @SuppressLint("InflateParams") @Override public AppCompatDialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setIcon(ThemeUtils.getResIdFromAttribute(getActivity(),R.attr.alert_dialog)); builder.setTitle(R.string.existing_track_title); builder.setMessage(R.string.existing_track_message); builder.setPositiveButton(R.string.replace, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Main main = (Main) getActivity(); if (main != null) { main.getTracker().stopTracking(true); try { main.getTracker().importGPXFile(main, uri); } catch (FileNotFoundException e) { try { Snack.barError(main, main.getResources().getString(R.string.toast_file_not_found, uri.toString())); } catch (Exception ex) { // protect against translation errors } } } } }); builder.setNeutralButton(R.string.keep, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Main main = (Main) getActivity(); if (main != null) { main.getTracker().stopTracking(false); try { main.getTracker().importGPXFile(main, uri); } catch (FileNotFoundException e) { try { Snack.barError(main, main.getResources().getString(R.string.toast_file_not_found, uri.toString())); } catch (Exception ex) { // protect against translation errors } } } } }); builder.setNegativeButton(R.string.cancel, null); return builder.create(); } }