예제 #1
0
        public IToast ShowAsync(object content, float duration, ToastPosition position = ToastPosition.Bottom, IDataContext context = null)
        {
            View holder          = null;
            var  currentActivity = PlatformExtensions.CurrentActivity;

            if (currentActivity != null)
            {
                var selector = currentActivity.GetBindingMemberValue(AttachedMembersDesign.Activity.SnackbarViewSelector);
                if (selector != null)
                {
                    holder = selector(content, position, context);
                }
                if (holder == null)
                {
                    holder = currentActivity.GetBindingMemberValue(AttachedMembersDesign.Activity.SnackbarView);
                }
            }
            if (holder == null)
            {
                return(_defaultPresenter.ShowAsync(content, duration, position, context));
            }
            var toastImpl = new ToastImpl();

            if (_threadManager.IsUiThread)
            {
                ShowInternal(currentActivity, holder, content, duration, toastImpl);
            }
            else
            {
                _threadManager.InvokeOnUiThreadAsync(() => ShowInternal(currentActivity, holder, content, duration, toastImpl), OperationPriority.High);
            }
            return(toastImpl);
        }
예제 #2
0
        public IToast ShowAsync(object content, float duration, ToastPosition position = ToastPosition.Bottom, IDataContext context = null)
        {
            var toastImpl = new ToastImpl();

            if (_threadManager.IsUiThread)
            {
                toastImpl.CloseAction = ShowInternal(content, duration, position, context, toastImpl.Tcs);
            }
            else
            {
                _threadManager.InvokeOnUiThreadAsync(() => toastImpl.CloseAction = ShowInternal(content, duration, position, context, toastImpl.Tcs));
            }
            return(toastImpl);
        }
예제 #3
0
        public IToast ShowAsync(object content, float duration, ToastPosition position = ToastPosition.Bottom,
                                IDataContext context = null)
        {
            var toast = new ToastImpl();

            if (_threadManager.IsUiThread)
            {
                Show(content, duration, position, context, toast);
            }
            else
            {
                _threadManager.InvokeOnUiThreadAsync(() => Show(content, duration, position, context, toast));
            }
            return(toast);
        }
예제 #4
0
        private void ShowInternal(ToastImpl toast, IDataTemplateSelector selector, View snackbarHolderView, object content, float duration, ToastPosition position, IDataContext context)
        {
            Snackbar snackbar;

            if (selector == null)
            {
                snackbar = Snackbar.Make(snackbarHolderView, content.ToStringSafe("(null)"), (int)duration);
            }
            else
            {
                snackbar = (Snackbar)selector.SelectTemplate(content, snackbarHolderView);
            }
            if (snackbar == null)
            {
                toast.FromToast(_defaultPresenter.ShowAsync(content, duration, position, context));
            }
            else
            {
                toast.Show(snackbar, duration);
            }
        }
예제 #5
0
        private void Show(object content, float duration, ToastPosition position, IDataContext context, ToastImpl toastImpl)
        {
            UIView owner = GetOwner() ?? UIApplication.SharedApplication.KeyWindow;

            toastImpl.Toast = CreateToast(content, owner, duration, position, context ?? DataContext.Empty, toastImpl.Tcs);
            ServiceProvider.AttachedValueProvider.AddOrUpdate(owner, Key, toastImpl.Toast,
                                                              (item, value, currentValue, state) =>
            {
                currentValue.Hide();
                return(value);
            }).Show();
        }
예제 #6
0
 public IToast ShowAsync(object content, float duration, ToastPosition position = ToastPosition.Bottom, IDataContext context = null)
 {
     var toastImpl = new ToastImpl();
     if (_threadManager.IsUiThread)
         toastImpl.Control = ShowInternal(content, duration, position, context, toastImpl.Tcs);
     else
         _threadManager.InvokeOnUiThreadAsync(() => toastImpl.Control = ShowInternal(content, duration, position, context, toastImpl.Tcs));
     return toastImpl;
 }
        public IToast ShowAsync(object content, float duration, ToastPosition position = ToastPosition.Bottom, IDataContext context = null)
        {
            View holder = null;
            var currentActivity = PlatformExtensions.CurrentActivity;
            if (currentActivity != null)
            {
                var selector = currentActivity.GetBindingMemberValue(AttachedMembersDesign.Activity.SnackbarViewSelector);
                holder = selector == null
                    ? currentActivity.GetBindingMemberValue(AttachedMembersDesign.Activity.SnackbarView)
                    : selector(content, position, context);
            }
            if (holder == null)
                return _defaultPresenter.ShowAsync(content, duration, position, context);

            var templateSelector = currentActivity.GetBindingMemberValue(AttachedMembersDesign.Activity.SnackbarTemplateSelector);
            var toastImpl = new ToastImpl();
            if (_threadManager.IsUiThread)
                ShowInternal(toastImpl, templateSelector, holder, content, duration, position, context);
            else
                _threadManager.InvokeOnUiThreadAsync(() => ShowInternal(toastImpl, templateSelector, holder, content, duration, position, context), OperationPriority.High);
            return toastImpl;
        }
 private void ShowInternal(ToastImpl toast, IDataTemplateSelector selector, View snackbarHolderView, object content, float duration, ToastPosition position, IDataContext context)
 {
     Snackbar snackbar;
     if (selector == null)
         snackbar = Snackbar.Make(snackbarHolderView, content.ToStringSafe("(null)"), (int)duration);
     else
         snackbar = (Snackbar)selector.SelectTemplate(content, snackbarHolderView);
     if (snackbar == null)
         toast.FromToast(_defaultPresenter.ShowAsync(content, duration, position, context));
     else
         toast.Show(snackbar, duration);
 }
 private static void ShowInternal(Activity activity, View snackbarHolderView, object content, float duration, ToastImpl toast)
 {
     Snackbar snackbar = null;
     var selector = activity.GetBindingMemberValue(AttachedMembersDesign.Activity.SnackbarTemplateSelector);
     if (selector != null)
         snackbar = (Snackbar) selector.SelectTemplate(content, snackbarHolderView);
     if (snackbar == null)
         snackbar = Snackbar.Make(snackbarHolderView, content.ToStringSafe("(null)"), (int) duration);
     toast.Show(snackbar, duration);
 }
예제 #10
0
        private static void ShowInternal(Activity activity, View snackbarHolderView, object content, float duration, ToastImpl toast)
        {
            Snackbar snackbar = null;
            var      selector = activity.GetBindingMemberValue(AttachedMembersDesign.Activity.SnackbarTemplateSelector);

            if (selector != null)
            {
                snackbar = (Snackbar)selector.SelectTemplate(content, snackbarHolderView);
            }
            if (snackbar == null)
            {
                snackbar = Snackbar.Make(snackbarHolderView, content.ToStringSafe("(null)"), (int)duration);
            }
            toast.Show(snackbar, duration);
        }
예제 #11
0
 private void Show(object content, float duration, ToastPosition position, IDataContext context, ToastImpl toastImpl)
 {
     UIView owner = GetOwner() ?? UIApplication.SharedApplication.KeyWindow;
     toastImpl.Toast = CreateToast(content, owner, duration, position, context ?? DataContext.Empty, toastImpl.Tcs);
     ServiceProvider.AttachedValueProvider.AddOrUpdate(owner, Key, toastImpl.Toast,
         (item, value, currentValue, state) =>
         {
             currentValue.Hide();
             return value;
         }).Show();
 }
예제 #12
0
 public IToast ShowAsync(object content, float duration, ToastPosition position = ToastPosition.Bottom,
     IDataContext context = null)
 {
     var toast = new ToastImpl();
     if (_threadManager.IsUiThread)
         Show(content, duration, position, context, toast);
     else
         _threadManager.InvokeOnUiThreadAsync(() => Show(content, duration, position, context, toast));
     return toast;
 }
 /// <summary>
 /// 尝试添加使用 <see cref="ToastService"/> 实现的 <see cref="IToast"/>
 /// </summary>
 /// <param name="services"></param>
 /// <returns></returns>
 public static IServiceCollection TryAddToast(this IServiceCollection services)
 => ToastImpl.TryAddToast(services);