package de.blau.android.dialogs; import android.app.Dialog; 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.util.Log; /** * ProgressDialog can't be styled, this rolls its own. * * @author simon * */ public class Progress extends DialogFragment { private static final String DEBUG_TAG = Progress.class.getSimpleName(); public static final int PROGRESS_LOADING = 1; public static final int PROGRESS_DOWNLOAD = 2; public static final int PROGRESS_DELETING = 3; public static final int PROGRESS_SEARCHING = 4; public static final int PROGRESS_SAVING = 5; public static final int PROGRESS_OAUTH = 6; public static final int PROGRESS_UPLOADING = 7; public static final int PROGRESS_PRESET = 8; public static final int PROGRESS_RUNNING = 9; private int dialogType; static public void showDialog(FragmentActivity activity, int dialogType) { showDialog(activity, dialogType, null); } static public void showDialog(FragmentActivity activity, int dialogType, String tag) { dismissDialog(activity, dialogType, tag); FragmentManager fm = activity.getSupportFragmentManager(); Progress progressDialogFragment = newInstance(dialogType); try { tag = getTag(dialogType) + (tag != null?"-"+tag:""); if (progressDialogFragment != null) { progressDialogFragment.show(fm, tag); } else { Log.e(DEBUG_TAG,"Unable to create dialog for value " + dialogType); } } catch (IllegalStateException isex) { Log.e(DEBUG_TAG,"showDialog",isex); } } static public void dismissDialog(FragmentActivity activity, int dialogType) { dismissDialog(activity, dialogType,null); } static public void dismissDialog(FragmentActivity activity, int dialogType, String tag) { FragmentManager fm = activity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); tag = getTag(dialogType) + (tag != null?"-"+tag:""); Fragment fragment = fm.findFragmentByTag(tag); try { if (fragment != null) { ft.remove(fragment); ft.commit(); } } catch (IllegalStateException isex) { Log.e(DEBUG_TAG,"dismissDialog",isex); // this is in general harmless and there is no real way of avoiding this // except not to use progress dialogs at all, which however doesn't give // the user any reasonable amount of feed back } } /** * Dismiss all possible progress dialogs to stop them being recreated * @param activity */ static public void dismissAll(FragmentActivity activity) { dismissDialog(activity,PROGRESS_LOADING); dismissDialog(activity,PROGRESS_DOWNLOAD); dismissDialog(activity,PROGRESS_DELETING); dismissDialog(activity,PROGRESS_SEARCHING); dismissDialog(activity,PROGRESS_SAVING); dismissDialog(activity,PROGRESS_OAUTH); dismissDialog(activity,PROGRESS_UPLOADING); dismissDialog(activity,PROGRESS_PRESET); dismissDialog(activity,PROGRESS_RUNNING); } private static String getTag(int dialogType) { switch (dialogType) { case PROGRESS_LOADING: return "dialog_progress_loading"; case PROGRESS_DOWNLOAD: return "dialog_progress_download"; case PROGRESS_DELETING: return "dialog_progress_deleting"; case PROGRESS_SEARCHING: return "dialog_progress_searching"; case PROGRESS_SAVING: return "dialog_progress_saving"; case PROGRESS_OAUTH: return "dialog_progress_oauth"; case PROGRESS_UPLOADING: return "dialog_progress_uploading"; case PROGRESS_PRESET: return "dialog_progress_preset"; case PROGRESS_RUNNING: return "dialog_progress_running"; } return null; } static private Progress newInstance(final int dialogType) { Progress f = new Progress(); Bundle args = new Bundle(); args.putSerializable("type", dialogType); f.setArguments(args); f.setShowsDialog(true); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCancelable(true); dialogType = (Integer) getArguments().getSerializable("type"); } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return ProgressDialog.get(getActivity(), dialogType); } }