package de.blau.android.dialogs; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; 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.R; import de.blau.android.util.ThemeUtils; /** * Display a dialog asking for confirmation before starting an activity that might result in data loss. * */ public class DataLossActivity extends DialogFragment { private static final String DEBUG_TAG = DataLossActivity.class.getSimpleName(); private static final String TAG = "fragment_dataloss_activity"; private Intent intent; private int requestCode; /** * Shows a dialog warning the user that he has unsaved changes that will be discarded. * @param activity Activity creating the dialog and starting the intent Activity if confirmed * @param intent intent for the activity to start * @param requestCode If the activity should return a result, a non-negative request code. * If no result is expected, set to -1. */ static public void showDialog(FragmentActivity activity, final Intent intent, final int requestCode) { dismissDialog(activity); FragmentManager fm = activity.getSupportFragmentManager(); DataLossActivity dataLossActivityFragment = newInstance(intent, requestCode); if (dataLossActivityFragment != null) { dataLossActivityFragment.show(fm, TAG); } else { Log.e(DEBUG_TAG,"Unable to create dataloss activity 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 DataLossActivity newInstance(final Intent intent, final int requestCode) { DataLossActivity f = new DataLossActivity(); Bundle args = new Bundle(); args.putParcelable("intent", intent); args.putInt("requestcode", requestCode); f.setArguments(args); f.setShowsDialog(true); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCancelable(true); intent = getArguments().getParcelable("intent"); requestCode = getArguments().getInt("requestcode"); } @NonNull @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.unsaved_data_title); builder.setMessage(R.string.unsaved_data_message); builder.setPositiveButton(R.string.unsaved_data_proceed, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { getActivity().startActivityForResult(intent, requestCode); } } ); builder.setNegativeButton(R.string.cancel, null); return builder.create(); } }