package com.marshalchen.common.uimodule.niftymodaldialogeffects;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.marshalchen.common.uimodule.animation.R;
import com.marshalchen.common.uimodule.niftymodaldialogeffects.effects.BaseEffects;
/**
* Created by lee on 2014/7/30.
*/
public class NiftyDialogBuilder extends Dialog implements DialogInterface {
private final String defTextColor="#FFFFFFFF";
private final String defDividerColor="#11000000";
private final String defMsgColor="#FFFFFFFF";
private final String defDialogColor="#FFE74C3C";
private Effectstype type=null;
private LinearLayout mLinearLayoutView;
private RelativeLayout mRelativeLayoutView;
private LinearLayout mLinearLayoutMsgView;
private LinearLayout mLinearLayoutTopView;
private FrameLayout mFrameLayoutCustomView;
private View mDialogView;
private View mDivider;
private TextView mTitle;
private TextView mMessage;
private ImageView mIcon;
private Button mButton1;
private Button mButton2;
private int mDuration = -1;
private static int mOrientation=1;
private boolean isCancelable=true;
private static NiftyDialogBuilder instance;
public NiftyDialogBuilder(Context context) {
super(context);
init(context);
}
public NiftyDialogBuilder(Context context,int theme) {
super(context, theme);
init(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WindowManager.LayoutParams params = getWindow().getAttributes();
params.height = ViewGroup.LayoutParams.MATCH_PARENT;
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
getWindow().setAttributes((WindowManager.LayoutParams) params);
}
public static NiftyDialogBuilder getInstance(Context context) {
instance = new NiftyDialogBuilder(context,R.style.dialog_untran);
return instance;
}
private void init(Context context) {
mDialogView = View.inflate(context, R.layout.nifty_dialog_layout, null);
mLinearLayoutView=(LinearLayout)mDialogView.findViewById(R.id.parentPanel);
mRelativeLayoutView=(RelativeLayout)mDialogView.findViewById(R.id.main);
mLinearLayoutTopView=(LinearLayout)mDialogView.findViewById(R.id.topPanel);
mLinearLayoutMsgView=(LinearLayout)mDialogView.findViewById(R.id.contentPanel);
mFrameLayoutCustomView=(FrameLayout)mDialogView.findViewById(R.id.customPanel);
mTitle = (TextView) mDialogView.findViewById(R.id.alertTitle);
mMessage = (TextView) mDialogView.findViewById(R.id.message);
mIcon = (ImageView) mDialogView.findViewById(R.id.icon);
mDivider = mDialogView.findViewById(R.id.titleDivider);
mButton1=(Button)mDialogView.findViewById(R.id.button1);
mButton2=(Button)mDialogView.findViewById(R.id.button2);
setContentView(mDialogView);
this.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialogInterface) {
mLinearLayoutView.setVisibility(View.VISIBLE);
if(type==null){
type=Effectstype.Slidetop;
}
start(type);
}
});
mRelativeLayoutView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isCancelable)dismiss();
}
});
}
public void toDefault(){
mTitle.setTextColor(Color.parseColor(defTextColor));
mDivider.setBackgroundColor(Color.parseColor(defDividerColor));
mMessage.setTextColor(Color.parseColor(defMsgColor));
mLinearLayoutView.setBackgroundColor(Color.parseColor(defDialogColor));
}
public NiftyDialogBuilder withDividerColor(String colorString) {
mDivider.setBackgroundColor(Color.parseColor(colorString));
return this;
}
public NiftyDialogBuilder withTitle(CharSequence title) {
toggleView(mLinearLayoutTopView,title);
mTitle.setText(title);
return this;
}
public NiftyDialogBuilder withTitleColor(String colorString) {
mTitle.setTextColor(Color.parseColor(colorString));
return this;
}
public NiftyDialogBuilder withMessage(int textResId) {
toggleView(mLinearLayoutMsgView,textResId);
mMessage.setText(textResId);
return this;
}
public NiftyDialogBuilder withMessage(CharSequence msg) {
toggleView(mLinearLayoutMsgView,msg);
mMessage.setText(msg);
return this;
}
public NiftyDialogBuilder withMessageColor(String colorString) {
mMessage.setTextColor(Color.parseColor(colorString));
return this;
}
public NiftyDialogBuilder withIcon(int drawableResId) {
mIcon.setImageResource(drawableResId);
return this;
}
public NiftyDialogBuilder withIcon(Drawable icon) {
mIcon.setImageDrawable(icon);
return this;
}
public NiftyDialogBuilder withDuration(int duration) {
this.mDuration=duration;
return this;
}
public NiftyDialogBuilder withEffect(Effectstype type) {
this.type=type;
return this;
}
public NiftyDialogBuilder withButtonDrawable(int resid) {
mButton1.setBackgroundResource(resid);
mButton2.setBackgroundResource(resid);
return this;
}
public NiftyDialogBuilder withButton1Text(CharSequence text) {
mButton1.setVisibility(View.VISIBLE);
mButton1.setText(text);
return this;
}
public NiftyDialogBuilder withButton2Text(CharSequence text) {
mButton2.setVisibility(View.VISIBLE);
mButton2.setText(text);
return this;
}
public NiftyDialogBuilder setButton1Click(View.OnClickListener click) {
mButton1.setOnClickListener(click);
return this;
}
public NiftyDialogBuilder setButton2Click(View.OnClickListener click) {
mButton2.setOnClickListener(click);
return this;
}
public NiftyDialogBuilder setCustomView(int resId, Context context) {
View customView = View.inflate(context, resId, null);
if (mFrameLayoutCustomView.getChildCount()>0){
mFrameLayoutCustomView.removeAllViews();
}
mFrameLayoutCustomView.addView(customView);
return this;
}
public NiftyDialogBuilder setCustomView(View view, Context context) {
if (mFrameLayoutCustomView.getChildCount()>0){
mFrameLayoutCustomView.removeAllViews();
}
mFrameLayoutCustomView.addView(view);
return this;
}
public NiftyDialogBuilder isCancelableOnTouchOutside(boolean cancelable) {
this.isCancelable=cancelable;
this.setCanceledOnTouchOutside(cancelable);
return this;
}
public NiftyDialogBuilder isCancelable(boolean cancelable) {
this.isCancelable=cancelable;
this.setCancelable(cancelable);
return this;
}
private void toggleView(View view,Object obj){
if (obj==null){
view.setVisibility(View.GONE);
}else {
view.setVisibility(View.VISIBLE);
}
}
@Override
public void show() {
super.show();
}
private void start(Effectstype type){
BaseEffects animator = type.getAnimator();
if(mDuration != -1){
animator.setDuration(Math.abs(mDuration));
}
animator.start(mRelativeLayoutView);
}
@Override
public void dismiss() {
super.dismiss();
mButton1.setVisibility(View.GONE);
mButton2.setVisibility(View.GONE);
}
}