package eu.inmite.android.lib.dialogs;
import com.partynetwork.iparty.R;
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;
/**
* 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 {
protected static String ARG_MESSAGE = "message";
protected static String ARG_TITLE = "title";
protected int mRequestCode;
public static ProgressDialogBuilder createBuilder(Context context, FragmentManager fragmentManager) {
return new ProgressDialogBuilder(context, fragmentManager);
}
@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;
}
@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);
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
ISimpleDialogCancelListener listener = getCancelListener();
if (listener != null) {
listener.onCancelled(mRequestCode);
}
}
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;
}
public static class ProgressDialogBuilder extends BaseDialogBuilder<ProgressDialogBuilder> {
private String mTitle;
private String mMessage;
protected ProgressDialogBuilder(Context context, FragmentManager fragmentManager) {
super(context, fragmentManager, ProgressDialogFragment.class);
}
@Override
protected ProgressDialogBuilder self() {
return this;
}
public ProgressDialogBuilder setTitle(int titleResourceId) {
mTitle = mContext.getString(titleResourceId);
return this;
}
public ProgressDialogBuilder setTitle(String title) {
mTitle = title;
return this;
}
public ProgressDialogBuilder setMessage(int messageResourceId) {
mMessage = mContext.getString(messageResourceId);
return this;
}
public ProgressDialogBuilder setMessage(String message) {
mMessage = message;
return this;
}
@Override
protected Bundle prepareArguments() {
Bundle args = new Bundle();
args.putString(SimpleDialogFragment.ARG_MESSAGE, mMessage);
args.putString(SimpleDialogFragment.ARG_TITLE, mTitle);
return args;
}
}
}