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 }
private static Action GetSendBackButtonPressedImpl(object page) { var activity = GetActivity(XamarinFormsAndroidToolkitExtensions.GetCurrentContext()); if (activity == null) { return(null); } return(activity.OnBackPressed); }
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)); }); }
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(); }