Post_ButtomSection_Layout.xml ShareBottomDialogFragment.cs public class ShareBottomDialogFragment : BottomSheetDialogFragment, MaterialDialog.IListCallback, MaterialDialog.ISingleButtonCallback { private LinearLayout ShareTimelineLayout, ShareGroupLayout, ShareOptionsLayout, SharePageLayout; private PostDataObject DataPost; private PostModelType TypePost; private string TypeDialog; public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { try { Context contextThemeWrapper = AppSettings.SetTabDarkTheme ? new ContextThemeWrapper(Activity, Resource.Style.MyTheme_Dark_Base) : new ContextThemeWrapper(Activity, Resource.Style.MyTheme_Base); LayoutInflater localInflater = inflater.CloneInContext(contextThemeWrapper); View view = localInflater?.Inflate(Resource.Layout.NativeShareBottomDialog, container, false); return view; } catch (Exception exception) { Methods.DisplayReportResultTrack(exception); return null!; } } public override void OnViewCreated(View view, Bundle savedInstanceState) { try { base.OnViewCreated(view, savedInstanceState); DataPost = JsonConvert.DeserializeObject(Arguments?.GetString("ItemData") ?? ""); TypePost = JsonConvert.DeserializeObject(Arguments?.GetString("TypePost") ?? ""); InitComponent(view); AddOrRemoveEvent(true); } catch (Exception exception) { Methods.DisplayReportResultTrack(exception); } } public override void OnLowMemory() { try { GC.Collect(GC.MaxGeneration); base.OnLowMemory(); } catch (Exception exception) { Methods.DisplayReportResultTrack(exception); } } private void InitComponent(View view) { try { ShareTimelineLayout = view.FindViewById(Resource.Id.ShareTimelineLayout); ShareGroupLayout = view.FindViewById(Resource.Id.ShareGroupLayout); ShareOptionsLayout = view.FindViewById(Resource.Id.ShareOptionsLayout); SharePageLayout = view.FindViewById(Resource.Id.SharePageLayout); } catch (Exception e) { Methods.DisplayReportResultTrack(e); } } private void AddOrRemoveEvent(bool addEvent) { try { switch (addEvent) { case true: ShareTimelineLayout.Click += ShareTimelineLayoutOnClick; ShareGroupLayout.Click += ShareGroupLayoutOnClick; ShareOptionsLayout.Click += ShareOptionsLayoutOnClick; SharePageLayout.Click += SharePageLayoutOnClick; break; default: ShareTimelineLayout.Click -= ShareTimelineLayoutOnClick; ShareGroupLayout.Click -= ShareGroupLayoutOnClick; ShareOptionsLayout.Click -= ShareOptionsLayoutOnClick; SharePageLayout.Click -= SharePageLayoutOnClick; break; } } catch (Exception e) { Methods.DisplayReportResultTrack(e); } } private async void ShareOptionsLayoutOnClick(object sender, EventArgs e) { try { switch (CrossShare.IsSupported) { case false: return; } ShareFileImplementation.Activity = Activity; switch (TypePost) { case PostModelType.EventPost: { if (DataPost.Event?.EventClass != null) await CrossShare.Current.Share(new ShareMessage { Title = Methods.FunString.DecodeString(DataPost.Event.Value.EventClass.Name), Text = Methods.FunString.DecodeString(DataPost.Event.Value.EventClass.Description), Url = DataPost.Event.Value.EventClass.Url, }); break; } case PostModelType.ImagePost: case PostModelType.StickerPost: case PostModelType.MapPost: case PostModelType.MultiImage2: case PostModelType.MultiImage3: case PostModelType.MultiImage4: { var imagesList = DataPost.PhotoMulti ?? DataPost.PhotoAlbum; string urlImage = imagesList?.Count > 0 ? imagesList[0].Image : !string.IsNullOrEmpty(DataPost.PostSticker) ? DataPost.PostSticker : DataPost.PostFileFull; var fileName = urlImage?.Split('/').Last(); switch (AppSettings.AllowDownloadMedia) { case true: await ShareFileImplementation.ShareRemoteFile(urlImage, fileName, Context.GetText(Resource.String.Lbl_Send_to)); break; default: await CrossShare.Current.Share(new ShareMessage { Title = "", Text = urlImage, Url = DataPost.Url }); break; } break; } case PostModelType.LinkPost: { var linkUrl = DataPost.PostLink?.Replace("https://", "").Replace("http://", "").Split('/').FirstOrDefault(); ShareFileImplementation.ShareText(linkUrl, Context.GetText(Resource.String.Lbl_Send_to)); break; } case PostModelType.YoutubePost: { var linkUrl = DataPost.PostYoutube; ShareFileImplementation.ShareText(linkUrl, Context.GetText(Resource.String.Lbl_Send_to)); break; } case PostModelType.VideoPost: { var linkUrl = DataPost.PostFileFull; var fileName = linkUrl?.Split('/').Last(); switch (AppSettings.AllowDownloadMedia) { case true: await ShareFileImplementation.ShareRemoteFile(linkUrl, fileName, Context.GetText(Resource.String.Lbl_Send_to)); break; default: await CrossShare.Current.Share(new ShareMessage { Title = "", Text = linkUrl, Url = DataPost.Url }); break; } break; } case PostModelType.FilePost: { var linkUrl = DataPost.PostFileFull; var fileName = linkUrl?.Split('/').Last(); switch (AppSettings.AllowDownloadMedia) { case true: await ShareFileImplementation.ShareRemoteFile(linkUrl, fileName, Context.GetText(Resource.String.Lbl_Send_to)); break; default: await CrossShare.Current.Share(new ShareMessage { Title = "", Text = linkUrl, Url = DataPost.Url }); break; } break; } case PostModelType.ProductPost: { if (DataPost.Product != null) await CrossShare.Current.Share(new ShareMessage { Title = Methods.FunString.DecodeString(DataPost.Product.Value.ProductClass.Name), Text = Methods.FunString.DecodeString(DataPost.Product.Value.ProductClass.Description), Url = DataPost.Product.Value.ProductClass.Url, }); break; } case PostModelType.BlogPost: if (DataPost.Blog != null) { await CrossShare.Current.Share(new ShareMessage { Title = Methods.FunString.DecodeString(DataPost.Blog.Title), Text = Methods.FunString.DecodeString(DataPost.Blog.Description), Url = DataPost.Blog.Url, }); } break; default: { if (DataPost.Blog != null) { await CrossShare.Current.Share(new ShareMessage { Title = Methods.FunString.DecodeString(DataPost.Blog.Title), Text = Methods.FunString.DecodeString(DataPost.Blog.Description), Url = DataPost.Blog.Url, }); } else switch (string.IsNullOrEmpty(DataPost.PostSticker)) { case false: { var linkUrl = DataPost.PostSticker; var fileName = linkUrl?.Split('/').Last(); switch (AppSettings.AllowDownloadMedia) { case true: await ShareFileImplementation.ShareRemoteFile(linkUrl, fileName, Context.GetText(Resource.String.Lbl_Send_to)); break; default: await CrossShare.Current.Share(new ShareMessage { Title = "", Text = linkUrl, Url = DataPost.Url }); break; } break; } default: { switch (string.IsNullOrEmpty(DataPost.PostFileFull)) { case false: { var linkUrl = DataPost.PostFileFull; var fileName = linkUrl?.Split('/').Last(); var type = Methods.AttachmentFiles.Check_FileExtension(linkUrl); switch (type) { case "Image": case "File": await ShareFileImplementation.ShareRemoteFile(linkUrl, fileName, Context.GetText(Resource.String.Lbl_Send_to)); break; default: ShareFileImplementation.ShareText(linkUrl, Context.GetText(Resource.String.Lbl_Send_to)); break; } break; } default: await CrossShare.Current.Share(new ShareMessage { Title = "", Text = Methods.FunString.DecodeString(DataPost.PostText), Url = DataPost.Url }); break; } break; } } break; } } Dismiss(); } catch (Exception exception) { Methods.DisplayReportResultTrack(exception); } }