public void OnInput(MaterialDialog dialog, string input)
 {
     if (Input != null)
     {
         Input(dialog, input);
     }
 }
 public static int GetInflateLayout(MaterialDialog.Builder builder)
 {
     if (builder.CustomView != null)
     {
         return Resource.Layout.sino_droid_md_dialog_custom;
     }
     else if (builder.Items != null && builder.Items.Length > 0 || builder.Adapter != null)
     {
         return Resource.Layout.sino_droid_md_dialog_list;
     }
     else if (builder.Progress > -2)
     {
         return Resource.Layout.sino_droid_md_dialog_progress;
     }
     else if (builder.IndeterminateProgress)
     {
         if (builder.IndeterminateIsHorizontalProgress)
             return Resource.Layout.sino_droid_md_dialog_progress_indeterminate_horizontal;
         return Resource.Layout.sino_droid_md_dialog_progress_indeterminate;
     }
     else if (builder.InputCallback != null)
     {
         return Resource.Layout.sino_droid_md_dialog_input;
     }
     else
     {
         return Resource.Layout.sino_droid_md_dialog_basic;
     }
 }
 public void OnSelection(MaterialDialog dialog, View itemView, int which, string text)
 {
     if(Selection != null)
     {
         Selection(dialog, itemView, which, text);
     }
 }
 public virtual void OnNeutral(MaterialDialog dialog)
 {
     if (Neutral != null)
     {
         Neutral(dialog);
     }
 }
 public virtual void OnNegative(MaterialDialog dialog)
 {
     if (Negative != null)
     {
         Negative(dialog);
     }
 }
 public virtual void OnPositive(MaterialDialog dialog)
 {
     if (Positive != null)
     {
         Positive(dialog);
     }
 }
 public virtual void OnAny(MaterialDialog dialog)
 {
     if (Any != null)
     {
         Any(dialog);
     }
 }
 public bool OnSelection(MaterialDialog dialog, View itemView, int which, string text)
 {
     if(Selection != null)
     {
         return Selection(dialog, itemView, which, text);
     }
     return false;
 }
 public bool OnSelection(MaterialDialog dialog, int[] which, string[] text)
 {
     if(Selection != null)
     {
         return Selection(dialog, which, text);
     }
     return false;
 }
        public static void Init(MaterialDialog dialog)
        {
            MaterialDialog.Builder builder = dialog.MBuilder;

            dialog.SetCancelable(builder.Cancelable);
            dialog.SetCanceledOnTouchOutside(builder.Cancelable);
            if (builder.BackgroundColor == 0)
                builder.BackgroundColor = DialogUtils.ResolveColor(builder.Context, Resource.Attribute.sino_droid_md_background_color);

            if (builder.BackgroundColor != 0)
            {
                GradientDrawable drawable = new GradientDrawable();
                drawable.SetCornerRadius(builder.Context.Resources.GetDimension(Resource.Dimension.sino_droid_md_bg_corner_radius));
                drawable.SetColor(builder.BackgroundColor);
                DialogUtils.SetBackgroundCompat(dialog.GetView(), drawable);
            }

            if (!builder.PositiveColorSet)
                builder.PositiveColor = DialogUtils.ResolveActionTextColorStateList(builder.Context, Resource.Attribute.sino_droid_md_positive_color, builder.PositiveColor);
            if (!builder.NeutralColorSet)
                builder.NeutralColor = DialogUtils.ResolveActionTextColorStateList(builder.Context, Resource.Attribute.sino_droid_md_neutral_color, builder.NeutralColor);
            if (!builder.NegativeColorSet)
                builder.NegativeColor = DialogUtils.ResolveActionTextColorStateList(builder.Context, Resource.Attribute.sino_droid_md_negative_color, builder.NegativeColor);
            if (!builder.WidgetColorSet)
                builder.WidgetColor = DialogUtils.ResolveColor(builder.Context, Resource.Attribute.sino_droid_md_widget_color, builder.WidgetColor);

            if (!builder.TitleColorSet)
            {
                int titleColorFallback = DialogUtils.ResolveColor(dialog.Context, Android.Resource.Attribute.TextColorPrimary);
                builder.TitleColor = DialogUtils.ResolveColor(builder.Context, Resource.Attribute.sino_droid_md_title_color, titleColorFallback);
            }

            if (!builder.ContentColorSet)
            {
                int contentColorFallback = DialogUtils.ResolveColor(dialog.Context, Android.Resource.Attribute.TextColorSecondary);
                builder.ContentColor = DialogUtils.ResolveColor(builder.Context, Resource.Attribute.sino_droid_md_content_color, contentColorFallback);
            }
            if (!builder.ItemColorSet)
                builder.ItemColor = DialogUtils.ResolveColor(builder.Context, Resource.Attribute.sino_droid_md_item_color, builder.ContentColor);

            dialog.Title = dialog.GetView().FindViewById<TextView>(Resource.Id.title);
            dialog.Icon = dialog.GetView().FindViewById<ImageView>(Resource.Id.icon);
            dialog.TitleFrame = dialog.GetView().FindViewById(Resource.Id.titleFrame);
            dialog.Content = dialog.GetView().FindViewById<TextView>(Resource.Id.content);
            dialog.ListView = dialog.GetView().FindViewById<ListView>(Resource.Id.contentListView);

            dialog.PositiveButton = dialog.GetView().FindViewById<MDButton>(Resource.Id.buttonDefaultPositive);
            dialog.NeutralButton = dialog.GetView().FindViewById<MDButton>(Resource.Id.buttonDefaultNeutral);
            dialog.NegativeButton = dialog.GetView().FindViewById<MDButton>(Resource.Id.buttonDefaultNegative);

            if (builder.InputCallback != null && builder.PositiveText == null)
                builder.PositiveText = builder.Context.GetText(Android.Resource.String.Ok);

            dialog.PositiveButton.Visibility = builder.PositiveText != null ? ViewStates.Visible : ViewStates.Gone;
            dialog.NeutralButton.Visibility = builder.NeutralText != null ? ViewStates.Visible : ViewStates.Gone;
            dialog.NegativeButton.Visibility = builder.NegativeText != null ? ViewStates.Visible : ViewStates.Gone;

            if (builder.Icon != null)
            {
                dialog.Icon.Visibility = ViewStates.Visible;
                dialog.Icon.SetImageDrawable(builder.Icon);
            }
            else
            {
                Drawable d = DialogUtils.ResolveDrawable(builder.Context, Resource.Attribute.sino_droid_md_icon);
                if (d != null)
                {
                    dialog.Icon.Visibility = ViewStates.Visible;
                    dialog.Icon.SetImageDrawable(d);
                }
                else
                {
                    dialog.Icon.Visibility = ViewStates.Gone;
                }
            }

            int maxIconSize = builder.MaxIconSize;
            if (maxIconSize == -1)
                maxIconSize = DialogUtils.ResolveDimension(builder.Context, Resource.Attribute.sino_droid_md_icon_max_size);
            if (builder.LimitIconToDefaultSize || DialogUtils.ResolveBoolean(builder.Context, Resource.Attribute.sino_droid_md_icon_limit_icon_to_default_size))
                maxIconSize = builder.Context.Resources.GetDimensionPixelSize(Resource.Dimension.sino_droid_md_icon_max_size);
            if (maxIconSize > -1)
            {
                dialog.Icon.SetAdjustViewBounds(true);
                dialog.Icon.SetMaxHeight(maxIconSize);
                dialog.Icon.SetMaxWidth(maxIconSize);
                dialog.Icon.RequestLayout();
            }

            if (!builder.DividerColorSet)
            {
                int dividerFallback = DialogUtils.ResolveColor(dialog.Context, Resource.Attribute.sino_droid_md_divider);
                builder.DividerColor = DialogUtils.ResolveColor(builder.Context, Resource.Attribute.sino_droid_md_divider_color, dividerFallback);
            }
            dialog.GetView().SetDividerColor(new Color(builder.DividerColor));

            if (dialog.Title != null)
            {
                dialog.SetTypeface(dialog.Title, builder.MediumFont);
                dialog.Title.SetTextColor(builder.TitleColor);
                dialog.Title.Gravity = GravityExt.GetGravity(builder.TitleGravity);
                if (Build.VERSION.SdkInt >= BuildVersionCodes.JellyBeanMr1)
                {
                    dialog.Title.TextAlignment = GravityExt.GetTextAlignment(builder.TitleGravity);
                }

                if (builder.Title == null)
                {
                    dialog.TitleFrame.Visibility = ViewStates.Gone;
                }
                else
                {
                    dialog.Title.Text = builder.Title;
                    dialog.TitleFrame.Visibility = ViewStates.Visible;
                }
            }

            if (dialog.Content != null)
            {
                dialog.Content.MovementMethod = new LinkMovementMethod();
                dialog.SetTypeface(dialog.Content, builder.RegularFont);
                dialog.Content.SetLineSpacing(0f, builder.ContentLineSpacingMultiplier);
                if (builder.PositiveColor == null)
                    dialog.Content.SetLinkTextColor(DialogUtils.ResolveColor(dialog.Context, Android.Resource.Attribute.TextColorPrimary));
                else
                    dialog.Content.SetLinkTextColor(builder.PositiveColor);
                dialog.Content.SetTextColor(builder.ContentColor);
                dialog.Content.Gravity = GravityExt.GetGravity(builder.ContentGravity);
                if (Build.VERSION.SdkInt >= BuildVersionCodes.JellyBeanMr1)
                {
                    dialog.Content.TextAlignment = GravityExt.GetTextAlignment(builder.ContentGravity);
                }

                if (builder.Content != null)
                {
                    dialog.Content.Text = builder.Content;
                    dialog.Content.Visibility = ViewStates.Visible;
                }
                else
                {
                    dialog.Content.Visibility = ViewStates.Gone;
                }
            }

            dialog.GetView().SetButtonGravity(builder.ButtonsGravity);
            dialog.GetView().SetButtonStackedGravity(builder.BtnStackedGravity);
            dialog.GetView().SetForceStack(builder.ForceStacking);
            bool textAllCaps;
            if (Build.VERSION.SdkInt >= BuildVersionCodes.IceCreamSandwich)
            {
                textAllCaps = DialogUtils.ResolveBoolean(builder.Context, Android.Resource.Attribute.TextAllCaps, true);
                if (textAllCaps)
                    textAllCaps = DialogUtils.ResolveBoolean(builder.Context, Resource.Attribute.textAllCaps, true);
            }
            else
            {
                textAllCaps = DialogUtils.ResolveBoolean(builder.Context, Resource.Attribute.textAllCaps, true);
            }

            MDButton positiveTextView = dialog.PositiveButton;
            dialog.SetTypeface(positiveTextView, builder.MediumFont);
            positiveTextView.SetAllCapsCompat(textAllCaps);
            positiveTextView.Text = builder.PositiveText;
            positiveTextView.SetTextColor(builder.PositiveColor);
            dialog.PositiveButton.SetStackedSelector(dialog.GetButtonSelector(DialogAction.Positive, true));
            dialog.PositiveButton.SetDefaultSelector(dialog.GetButtonSelector(DialogAction.Positive, false));
            dialog.PositiveButton.Tag = (int)DialogAction.Positive;
            dialog.PositiveButton.SetOnClickListener(dialog);
            dialog.PositiveButton.Visibility = ViewStates.Visible;

            MDButton negativeTextView = dialog.NegativeButton;
            dialog.SetTypeface(negativeTextView, builder.MediumFont);
            negativeTextView.SetAllCapsCompat(textAllCaps);
            negativeTextView.Text = builder.NegativeText;
            negativeTextView.SetTextColor(builder.NegativeColor);
            dialog.NegativeButton.SetStackedSelector(dialog.GetButtonSelector(DialogAction.Negative, true));
            dialog.NegativeButton.SetDefaultSelector(dialog.GetButtonSelector(DialogAction.Negative, false));
            dialog.NegativeButton.Tag = (int)DialogAction.Negative;
            dialog.NegativeButton.SetOnClickListener(dialog);
            dialog.NegativeButton.Visibility = ViewStates.Visible;

            MDButton neutralTextView = dialog.NeutralButton;
            dialog.SetTypeface(neutralTextView, builder.MediumFont);
            neutralTextView.SetAllCapsCompat(textAllCaps);
            neutralTextView.Text = builder.NeutralText;
            neutralTextView.SetTextColor(builder.NeutralColor);
            dialog.NeutralButton.SetStackedSelector(dialog.GetButtonSelector(DialogAction.Neutral, true));
            dialog.NeutralButton.SetDefaultSelector(dialog.GetButtonSelector(DialogAction.Neutral, false));
            dialog.NeutralButton.Tag = (int)DialogAction.Neutral;
            dialog.NeutralButton.SetOnClickListener(dialog);
            dialog.NeutralButton.Visibility = ViewStates.Visible;

            if (builder.ListCallbackMultiChoice != null)
                dialog.SelectedIndicesList = new List<int>();
            if (dialog.ListView != null && (builder.Items != null && builder.Items.Length > 0 || builder.Adapter != null))
            {
                dialog.ListView.Selector = dialog.GetListSelector();

                if (builder.Adapter == null)
                {
                    if (builder.ListCallbackSingleChoice != null)
                    {
                        dialog.ListType = ListType.Single;
                    }
                    else if (builder.ListCallbackMultiChoice != null)
                    {
                        dialog.ListType = ListType.Multi;
                        if (builder.SelectedIndices != null)
                            dialog.SelectedIndicesList = builder.SelectedIndices.ToList();
                    }
                    else
                    {
                        dialog.ListType = ListType.Regular;
                    }
                    builder.Adapter = new MaterialDialogAdapter(dialog, ListTypeExt.GetLayoutForType(dialog.ListType));
                }
                else if (builder.Adapter is MaterialSimpleListAdapter)
                {
                    ((MaterialSimpleListAdapter)builder.Adapter).SetDialog(dialog, false);
                }
            }
            SetupProgressDialog(dialog);

            SetupInputDialog(dialog);
            if (builder.CustomView != null)
            {
                dialog.GetView().FindViewById<MDRootLayout>(Resource.Id.root).NoTitleNoPadding();
                FrameLayout frame = dialog.GetView().FindViewById<FrameLayout>(Resource.Id.customViewFrame);
                dialog.CustomViewFrame = frame;
                View innerView = builder.CustomView;
                if (builder.WrapCustomViewInScroll)
                {
                    var r = dialog.Context.Resources;
                    int framePadding = r.GetDimensionPixelSize(Resource.Dimension.sino_droid_md_dialog_frame_margin);
                    ScrollView sv = new ScrollView(dialog.Context);
                    int paddingTop = r.GetDimensionPixelSize(Resource.Dimension.sino_droid_md_content_padding_top);
                    int paddingBottom = r.GetDimensionPixelSize(Resource.Dimension.sino_droid_md_content_padding_bottom);
                    sv.SetClipToPadding(false);
                    if (innerView is EditText)
                    {
                        sv.SetPadding(framePadding, paddingTop, framePadding, paddingBottom);
                    }
                    else
                    {
                        sv.SetPadding(0, paddingTop, 0, paddingBottom);
                        innerView.SetPadding(framePadding, 0, framePadding, 0);
                    }
                    sv.AddView(innerView, new ScrollView.LayoutParams(
                        ViewGroup.LayoutParams.MatchParent,
                        ViewGroup.LayoutParams.WrapContent));
                    innerView = sv;
                }
                frame.AddView(innerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent,
                    ViewGroup.LayoutParams.WrapContent));
            }
            if (builder.ShowListener != null)
                dialog.SetOnShowListener(builder.ShowListener);
            if (builder.CancelListener != null)
                dialog.SetOnCancelListener(builder.CancelListener);
            if (builder.DismissListener != null)
                dialog.SetOnDismissListener(builder.DismissListener);
            if (builder.KeyListener != null)
                dialog.SetOnKeyListener(builder.KeyListener);

            dialog.SetOnShowListenerInternal();

            dialog.InvalidateList();
            dialog.SetViewInternal(dialog.GetView());
            dialog.CheckIfListInitScroll();
        }
        private static void SetupInputDialog(MaterialDialog dialog)
        {
            MaterialDialog.Builder builder = dialog.MBuilder;
            dialog.Input = dialog.GetView().FindViewById<EditText>(Android.Resource.Id.Input);
            if (dialog.Input == null) return;
            dialog.SetTypeface(dialog.Input, builder.RegularFont);
            if (builder.InputPrefill != null)
                dialog.Input.Text = builder.InputPrefill;
            dialog.SetInternalInputCallback();
            dialog.Input.Hint = builder.InputHint;
            dialog.Input.SetSingleLine();
            dialog.Input.SetTextColor(builder.ContentColor);
            dialog.Input.SetHintTextColor(DialogUtils.AdjustAlpha(builder.ContentColor, 0.3f));
            MDTintHelper.SetTint(dialog.Input, dialog.MBuilder.WidgetColor);

            if (builder.InputType != Android.Text.InputTypes.Null)
            {
                dialog.Input.InputType = builder.InputType;
                if ((builder.InputType & Android.Text.InputTypes.TextVariationPassword) == Android.Text.InputTypes.TextVariationPassword)
                {
                    dialog.Input.TransformationMethod = PasswordTransformationMethod.Instance;
                }
            }

            dialog.InputMinMax = dialog.GetView().FindViewById<TextView>(Resource.Id.minMax);
            if (builder.InputMaxLength > -1)
            {
                dialog.InvalidateInputMinMaxIndicator(dialog.Input.Text.Length,
                        !builder.InputAllowEmpty);
            }
            else
            {
                dialog.InputMinMax.Visibility = ViewStates.Gone;
                dialog.InputMinMax = null;
            }
        }
        private static void SetupProgressDialog(MaterialDialog dialog)
        {
            MaterialDialog.Builder builder = dialog.MBuilder;
            if (builder.IndeterminateProgress || builder.Progress > -2)
            {
                dialog.Progress = dialog.GetView().FindViewById<ProgressBar>(Android.Resource.Id.Progress);
                if (dialog.Progress == null) return;

                if (builder.IndeterminateProgress && !builder.IndeterminateIsHorizontalProgress &&
                        Build.VERSION.SdkInt >= BuildVersionCodes.IceCreamSandwich &&
                        Build.VERSION.SdkInt < BuildVersionCodes.Lollipop)
                {
                    dialog.Progress.IndeterminateDrawable = new CircularProgressDrawable(
                            builder.WidgetColor, builder.Context.Resources.GetDimension(Resource.Dimension.circular_progress_border));
                    MDTintHelper.SetTint(dialog.Progress, builder.WidgetColor, true);
                }
                else
                {
                    MDTintHelper.SetTint(dialog.Progress, builder.WidgetColor);
                }

                if (!builder.IndeterminateProgress || builder.IndeterminateIsHorizontalProgress)
                {
                    dialog.Progress.Indeterminate = builder.IndeterminateIsHorizontalProgress;
                    dialog.Progress.Progress = 0;
                    dialog.Progress.Max = builder.ProgressMax;
                    dialog.ProgressLabel = dialog.GetView().FindViewById<TextView>(Resource.Id.label);
                    if (dialog.ProgressLabel != null)
                    {
                        dialog.ProgressLabel.SetTextColor(builder.ContentColor);
                        dialog.SetTypeface(dialog.ProgressLabel, builder.MediumFont);
                        dialog.ProgressLabel.Text = String.Format(builder.ProgressPercentFormat, 0);
                    }
                    dialog.ProgressMinMax = dialog.GetView().FindViewById<TextView>(Resource.Id.minMax);
                    if (dialog.ProgressMinMax != null)
                    {
                        dialog.ProgressMinMax.SetTextColor(builder.ContentColor);
                        dialog.SetTypeface(dialog.ProgressMinMax, builder.RegularFont);

                        if (builder.ShowMinMax)
                        {
                            dialog.ProgressMinMax.Visibility = ViewStates.Visible;
                            dialog.ProgressMinMax.Text = String.Format(builder.ProgressNumberFormat,
                                    0, builder.ProgressMax);
                            ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams)dialog.Progress.LayoutParameters;
                            lp.LeftMargin = 0;
                            lp.RightMargin = 0;
                        }
                        else
                        {
                            dialog.ProgressMinMax.Visibility = ViewStates.Gone;
                        }
                    }
                    else
                    {
                        builder.ShowMinMax = false;
                    }
                }
            }
        }
 public static int GetTheme(MaterialDialog.Builder builder)
 {
     bool darkTheme = DialogUtils.ResolveBoolean(builder.Context, Resource.Attribute.sino_droid_md_dark_theme, builder.Theme == Theme.Dark);
     builder.SetTheme(darkTheme ? Theme.Dark : Theme.Light);
     return darkTheme ? Resource.Style.sino_droid_md_Dark : Resource.Style.sino_droid_md_Light;
 }
 public MaterialDialogAdapter(MaterialDialog dialog, int layout)
 {
     this.dialog = dialog;
     this.layout = layout;
     this.itemGravity = dialog.MBuilder.ItemsGravity;
 }