package eu.inmite.android.lib.dialogs; import android.content.Context; import android.content.DialogInterface; import android.content.res.TypedArray; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; // TODO: Auto-generated Javadoc /** * Simple progress dialog that shows indeterminate progress bar together with message and dialog title (optional).<br/> * <p> * To show the dialog, start with {@link #createBuilder(android.content.Context, android.support.v4.app.FragmentManager)}. * </p> * <p> * Dialog can be cancelable - to listen to cancellation, activity or target fragment must implement {@link ISimpleDialogCancelListener} * </p> * * @author Tomas Vondracek */ public class ProgressDialogFragment extends BaseDialogFragment { /** The arg message. */ protected static String ARG_MESSAGE = "message"; /** The arg title. */ protected static String ARG_TITLE = "title"; /** The m request code. */ protected int mRequestCode; /** * Creates the builder. * * @param context the context * @param fragmentManager the fragment manager * @return the progress dialog builder */ public static ProgressDialogBuilder createBuilder(Context context, FragmentManager fragmentManager) { return new ProgressDialogBuilder(context, fragmentManager); } /* (non-Javadoc) * @see eu.inmite.android.lib.dialogs.BaseDialogFragment#build(eu.inmite.android.lib.dialogs.BaseDialogFragment.Builder) */ @Override protected Builder build(Builder builder) { final int defaultMessageTextColor = getResources().getColor(R.color.sdl_message_text_dark); final TypedArray a = getActivity().getTheme().obtainStyledAttributes(null, R.styleable.DialogStyle, R.attr.sdlDialogStyle, 0); final int messageTextColor = a.getColor(R.styleable.DialogStyle_messageTextColor, defaultMessageTextColor); a.recycle(); final LayoutInflater inflater = builder.getLayoutInflater(); final View view = inflater.inflate(R.layout.dialog_part_progress, null, false); final TextView tvMessage = (TextView) view.findViewById(R.id.sdl__message); tvMessage.setText(getArguments().getString(ARG_MESSAGE)); tvMessage.setTextColor(messageTextColor); builder.setView(view); builder.setTitle(getArguments().getString(ARG_TITLE)); return builder; } /* (non-Javadoc) * @see android.support.v4.app.DialogFragment#onActivityCreated(android.os.Bundle) */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (getArguments() == null) { throw new IllegalArgumentException("use ProgressDialogBuilder to construct this dialog"); } final Fragment targetFragment = getTargetFragment(); mRequestCode = targetFragment != null ? getTargetRequestCode() : getArguments().getInt(BaseDialogBuilder.ARG_REQUEST_CODE, 0); } /* (non-Javadoc) * @see android.support.v4.app.DialogFragment#onCancel(android.content.DialogInterface) */ @Override public void onCancel(DialogInterface dialog) { super.onCancel(dialog); ISimpleDialogCancelListener listener = getCancelListener(); if (listener != null) { listener.onCancelled(mRequestCode); } } /** * Gets the cancel listener. * * @return the cancel listener */ protected ISimpleDialogCancelListener getCancelListener() { final Fragment targetFragment = getTargetFragment(); if (targetFragment != null) { if (targetFragment instanceof ISimpleDialogCancelListener) { return (ISimpleDialogCancelListener) targetFragment; } } else { if (getActivity() instanceof ISimpleDialogCancelListener) { return (ISimpleDialogCancelListener) getActivity(); } } return null; } /** * The Class ProgressDialogBuilder. */ public static class ProgressDialogBuilder extends BaseDialogBuilder<ProgressDialogBuilder> { /** The m title. */ private String mTitle; /** The m message. */ private String mMessage; /** * Instantiates a new progress dialog builder. * * @param context the context * @param fragmentManager the fragment manager */ protected ProgressDialogBuilder(Context context, FragmentManager fragmentManager) { super(context, fragmentManager, ProgressDialogFragment.class); } /* (non-Javadoc) * @see eu.inmite.android.lib.dialogs.BaseDialogBuilder#self() */ @Override protected ProgressDialogBuilder self() { return this; } /** * Sets the title. * * @param titleResourceId the title resource id * @return the progress dialog builder */ public ProgressDialogBuilder setTitle(int titleResourceId) { mTitle = mContext.getString(titleResourceId); return this; } /** * Sets the title. * * @param title the title * @return the progress dialog builder */ public ProgressDialogBuilder setTitle(String title) { mTitle = title; return this; } /** * Sets the message. * * @param messageResourceId the message resource id * @return the progress dialog builder */ public ProgressDialogBuilder setMessage(int messageResourceId) { mMessage = mContext.getString(messageResourceId); return this; } /** * Sets the message. * * @param message the message * @return the progress dialog builder */ public ProgressDialogBuilder setMessage(String message) { mMessage = message; return this; } /* (non-Javadoc) * @see eu.inmite.android.lib.dialogs.BaseDialogBuilder#prepareArguments() */ @Override protected Bundle prepareArguments() { Bundle args = new Bundle(); args.putString(SimpleDialogFragment.ARG_MESSAGE, mMessage); args.putString(SimpleDialogFragment.ARG_TITLE, mTitle); return args; } } }