コード例 #1
0
        private static PlatformIdiom GetIdiom()
        {
#if ANDROID
            var context    = XamarinFormsAndroidToolkitExtensions.GetContext();
            int minWidthDp = context.Resources.Configuration.SmallestScreenWidthDp;
            return(minWidthDp >= 600 ? PlatformIdiom.Tablet : PlatformIdiom.Phone);
#elif TOUCH
            return(XamarinFormsTouchToolkitExtensions.GetIdiom());
#elif WINDOWS_UWP
            switch (AnalyticsInfo.VersionInfo.DeviceFamily)
            {
            case "Windows.Mobile":
                return(PlatformIdiom.Phone);

            case "Windows.Desktop":
                return(UIViewSettings.GetForCurrentView().UserInteractionMode == UserInteractionMode.Mouse
                        ? PlatformIdiom.Desktop
                        : PlatformIdiom.Tablet);

            default:
                return(PlatformIdiom.Unknown);
            }
#else
            return(PlatformIdiom.Unknown);
#endif
        }
コード例 #2
0
        private static Action GetSendBackButtonPressedImpl(object page)
        {
            var activity = GetActivity(XamarinFormsAndroidToolkitExtensions.GetCurrentContext());

            if (activity == null)
            {
                return(null);
            }
            return(activity.OnBackPressed);
        }
コード例 #3
0
        protected virtual void ShowInternal(object content, float duration, ToastPosition position, IDataContext context, ToastWrapper wrapper)
        {
#if XAMARIN_FORMS
            var ctx = XamarinFormsAndroidToolkitExtensions.GetCurrentContext();
#else
            var ctx = AndroidToolkitExtensions.CurrentActivity;
#endif
            if (ctx == null)
            {
                wrapper.Cancel();
                return;
            }
            Toast toast = null;
#if !XAMARIN_FORMS
            var selector = ctx.GetBindingMemberValue(AttachedMembers.Activity.ToastTemplateSelector);
            if (selector != null)
            {
                toast = (Toast)selector.SelectTemplate(content, ctx);
            }
#endif
            if (toast == null)
            {
                View view = GetView(content, ctx);
                toast = view == null
                    ? Toast.MakeText(ctx, content?.ToString() ?? "(null)", ToastLength.Long)
                    : new Toast(ctx)
                {
                    View = view
                };
            }

            ServiceProvider
            .AttachedValueProvider
            .AddOrUpdate(ctx, ToastWrapperMember, (c, o) =>
            {
                wrapper.Show(toast, duration, position);
                return(wrapper);
            }, (item, value, oldValue, state) =>
            {
                oldValue.Close();
                return(value(item, state));
            });
        }
コード例 #4
0
        private void ShowMessage(string messageBoxText, string caption, MessageButton button, MessageImage icon,
                                 MessageResult defaultResult,
                                 TaskCompletionSource <MessageResult> tcs)
        {
#if XAMARIN_FORMS
            var context = XamarinFormsAndroidToolkitExtensions.GetCurrentContext();
#else
            Context context = AndroidToolkitExtensions.CurrentActivity;
#endif
            var act = context as Activity;
            if (act != null && act.IsFinishing)
            {
                context = Application.Context;
            }

            if (context == null)
            {
                Tracer.Error($"{nameof(MessagePresenter)}: The current top activity is null.");
                tcs.TrySetResult(defaultResult);
                return;
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(context)
                                          .SetTitle(caption)
                                          .SetMessage(messageBoxText)
                                          .SetCancelable(false);
            switch (button)
            {
            case MessageButton.Ok:
                builder.SetPositiveButton(GetButtonText(MessageResult.Ok),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Ok));
                break;

            case MessageButton.OkCancel:
                builder.SetPositiveButton(GetButtonText(MessageResult.Ok),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Ok));
                builder.SetNegativeButton(GetButtonText(MessageResult.Cancel),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Cancel));
                break;

            case MessageButton.YesNo:
                builder.SetPositiveButton(GetButtonText(MessageResult.Yes),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Yes));
                builder.SetNegativeButton(GetButtonText(MessageResult.No),
                                          (sender, args) => tcs.TrySetResult(MessageResult.No));
                break;

            case MessageButton.YesNoCancel:
                builder.SetPositiveButton(GetButtonText(MessageResult.Yes),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Yes));
                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    builder.SetNegativeButton(GetButtonText(MessageResult.No),
                                              (sender, args) => tcs.TrySetResult(MessageResult.No));
                    builder.SetNeutralButton(GetButtonText(MessageResult.Cancel),
                                             (sender, args) => tcs.TrySetResult(MessageResult.Cancel));
                }
                else
                {
                    builder.SetNeutralButton(GetButtonText(MessageResult.No),
                                             (sender, args) => tcs.TrySetResult(MessageResult.No));
                    builder.SetNegativeButton(GetButtonText(MessageResult.Cancel),
                                              (sender, args) => tcs.TrySetResult(MessageResult.Cancel));
                }
                break;

            case MessageButton.AbortRetryIgnore:
                builder.SetPositiveButton(GetButtonText(MessageResult.Abort),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Abort));
                builder.SetNeutralButton(GetButtonText(MessageResult.Retry),
                                         (sender, args) => tcs.TrySetResult(MessageResult.Retry));
                builder.SetNegativeButton(GetButtonText(MessageResult.Ignore),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Ignore));
                break;

            case MessageButton.RetryCancel:
                builder.SetPositiveButton(GetButtonText(MessageResult.Retry),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Retry));
                builder.SetNegativeButton(GetButtonText(MessageResult.Cancel),
                                          (sender, args) => tcs.TrySetResult(MessageResult.Cancel));
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(button));
            }
            int?drawable = GetIconResource(icon);
            if (drawable != null)
            {
                builder.SetIcon(drawable.Value);
            }
            AlertDialog dialog = builder.Create();
#if !XAMARIN_FORMS
            var activityView = context as IActivityView;
            if (activityView != null)
            {
                EventHandler <Activity, EventArgs> handler = null;
                handler = (sender, args) =>
                {
                    ((IActivityView)sender).Mediator.Destroyed -= handler;
                    tcs.TrySetResult(defaultResult);
                };
                activityView.Mediator.Destroyed += handler;
            }
#endif
            dialog.Show();
        }