/// <summary> /// Builds the communication folder local. /// </summary> /// <returns>The communication folder local.</returns> /// <param name="selectedIconArgs">Selected icon arguments.</param> public IconImage BuildCommunicationFolderLocal(ArgsSelectedIcon selectedIconArgs) { var item = new Storage.CommunicationIcon() { Tag = IconRoles.GetRoleInt(IconRoles.Role.Folder), Text = selectedIconArgs.Name, Local = true, IsStoredInFolder = false, IsPinned = false, FolderContainingIcon = "", ResourceLocation = Constants.LanguageSettings.ResourcePrefixPng + selectedIconArgs.ImageSource + Constants.LanguageSettings.ResourceSuffixPng, Scale = 1f, X = -1, Y = -1 }; return(BuildCommunicationFolderLocal(item)); }
/// <summary> /// Add an icon from the camera /// </summary> async void AddIconPhoto() { await Xamarin.Forms.Application.Current.MainPage.Navigation.PopAllPopupAsync(); string[] base64 = await App.UserInputInstance.GetImageFromCameraCallAsync(); if (base64 == null) { return; } Storage.CommunicationIcon dynamicIcon = new Storage.CommunicationIcon() { Tag = IconRoles.GetRoleInt(IconRoles.Role.Communication), Text = base64[0], Local = false, IsStoredInFolder = false, FolderContainingIcon = "", Base64 = base64[1], Scale = 1f, X = -1, Y = -1 }; IconImage testImage = null; try { testImage = App.ImageBuilderInstance.BuildCommunicationIconDynamic(icon: dynamicIcon); } catch { return; } SaveCommunicationIconEvent(testImage); }
/// <summary> /// Adds an icon from storage /// </summary> async void AddIconStored() { await Xamarin.Forms.Application.Current.MainPage.Navigation.PopAllPopupAsync(); await Plugin.Media.CrossMedia.Current.Initialize(); var status = await Plugin.Permissions.CrossPermissions.Current.CheckPermissionStatusAsync(Plugin.Permissions.Abstractions.Permission.Photos); if (status != Plugin.Permissions.Abstractions.PermissionStatus.Granted) { if (await Plugin.Permissions.CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Plugin.Permissions.Abstractions.Permission.Photos)) { await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Need access to photos to make icon"); } var results = await Plugin.Permissions.CrossPermissions.Current.RequestPermissionsAsync(new[] { Plugin.Permissions.Abstractions.Permission.Photos }); status = results[Plugin.Permissions.Abstractions.Permission.Photos]; } if (status == Plugin.Permissions.Abstractions.PermissionStatus.Granted) { var userInput = await Acr.UserDialogs.UserDialogs.Instance.PromptAsync("Name the icon to add"); if (userInput == null || string.IsNullOrWhiteSpace(userInput.Text)) { return; } Plugin.Media.Abstractions.MediaFile file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions { CustomPhotoSize = 500, CompressionQuality = 80, RotateImage = true, }); if (file == null || file.Path == null) { return; } if (System.IO.File.Exists(@file.Path)) { byte[] imageArray = null; //if (Device.RuntimePlatform == Device.Android) //{ // imageArray = DependencyService.Get<InterfaceBitmapResize>().RotateImage(@file.Path); //} //else //{ imageArray = System.IO.File.ReadAllBytes(@file.Path); //} string base64ImageRepresentation = System.Convert.ToBase64String(imageArray); file.Dispose(); Storage.CommunicationIcon dynamicIcon = new Storage.CommunicationIcon() { Tag = IconRoles.GetRoleInt(IconRoles.Role.Communication), Text = userInput.Text, Local = false, IsStoredInFolder = false, FolderContainingIcon = "", Base64 = base64ImageRepresentation, Scale = 1f, X = -1, Y = -1 }; IconImage testImage = null; try { testImage = App.ImageBuilderInstance.BuildCommunicationIconDynamic(icon: dynamicIcon); } catch { return; } SaveCommunicationIconEvent(testImage); } } else if (status != Plugin.Permissions.Abstractions.PermissionStatus.Unknown) { await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Can not continue, try again"); } }
/// <summary> /// Amends the icon image. /// </summary> /// <returns>The icon image.</returns> /// <param name="element">Icon.</param> /// <param name="changeActions">Change actions.</param> public async System.Threading.Tasks.Task <Icon> AmendIconImage(Icon element, string changeActions) { float newScale = element.CurrentScale; string newText = element.Text; bool isPinned = element.IsPinnedToSpot; switch (changeActions) { case Constants.LanguageSettings.EditGrow: newScale = element.CurrentScale * 1.1f; break; case Constants.LanguageSettings.EditShrink: newScale = element.CurrentScale * 0.9f; break; case Constants.LanguageSettings.EditGrow2: newScale = element.CurrentScale * 1.5f; break; case Constants.LanguageSettings.EditShrink2: newScale = element.CurrentScale * 0.5f; break; case Constants.LanguageSettings.EditResetSize: newScale = 1.5f; break; case Constants.LanguageSettings.EditText: newText = await App.UserInputInstance.ModifyIconTextAsync(newText); if (element.Tag == IconRoles.GetRoleInt(IconRoles.Role.Folder) && canvasReference.Icons.Where(elem => elem.Text == newText).Any()) { await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Please select a different name for the folder.", title : "Cannot rename folder."); return(element); } break; case Constants.LanguageSettings.EditPinning: isPinned = !isPinned; break; case Constants.LanguageSettings.EditClose: return(element); default: return(element); } var icon = new Storage.CommunicationIcon() { Text = newText, X = element.Left, Y = element.Top, Tag = element.Tag, Local = element.LocalImage, TextVisible = true, IsPinned = isPinned, Base64 = (element.LocalImage) ? "" : element.ImageInformation, ResourceLocation = (element.LocalImage) ? element.ImageInformation : "", IsStoredInFolder = element.IsStoredInAFolder, FolderContainingIcon = element.StoredFolderTag, Scale = newScale, TextScale = 1f, HashCode = element.GetHashCode() }; if (element.Tag == IconRoles.GetRoleInt(IconRoles.Role.Communication) && icon.Local) { System.Diagnostics.Debug.WriteLineIf(App.OutputVerbose, "CanvasView.Role.Communication && icon.Local"); return(BuildCommunicationIconLocal(icon)); } else if (element.Tag == IconRoles.GetRoleInt(IconRoles.Role.Communication) && !icon.Local) { System.Diagnostics.Debug.WriteLineIf(App.OutputVerbose, "CanvasView.Role.Communication && !icon.Local"); return(BuildCommunicationIconDynamic(icon)); } else if (element.Tag == IconRoles.GetRoleInt(IconRoles.Role.Folder)) { System.Diagnostics.Debug.WriteLineIf(App.OutputVerbose, "CanvasView.Role.Folder"); return(BuildCommunicationFolderLocal(icon)); } else { return(null); } }
/// <summary> /// Builds the communication folder local. /// </summary> /// <returns>The communication folder local.</returns> /// <param name="icon">Icon.</param> public IconImage BuildCommunicationFolderLocal(Storage.CommunicationIcon icon) { IconImage image = null; SKSize loadedSize = Constants.DeviceLayout.GetSizeByGrid(canvasReference.CanvasSize, icon.Scale, icon.Scale); using (System.IO.Stream stream = App.MainAssembly.GetManifestResourceStream(icon.ResourceLocation)) { SKBitmap tempBitmapPre = SKBitmap.Decode(stream); SKBitmap tempBitmap = tempBitmapPre.Resize(new SKImageInfo((int)loadedSize.Width, (int)loadedSize.Width), SKBitmapResizeMethod.Lanczos3); SKBitmap returnBitmap = new SKBitmap((int)System.Math.Round(tempBitmap.Width * 1.5), (int)System.Math.Round(tempBitmap.Height * 1.5), tempBitmap.ColorType, tempBitmap.AlphaType); using (SKCanvas canvas2 = new SKCanvas(returnBitmap)) { canvas2.Clear(SKColors.Transparent); canvas2.DrawBitmap(tempBitmap, SKRect.Create(System.Convert.ToInt16(tempBitmap.Width * 0.15), System.Convert.ToInt16(tempBitmap.Height * 0.1), tempBitmap.Width * 1.3f, tempBitmap.Height * 1.3f)); using (SKPaint paint = new SKPaint()) { paint.TextSize = Constants.DeviceLayout.TextSizeDefault * App.DisplayScaleFactor * icon.Scale; paint.IsAntialias = true; paint.Color = SKColors.White; paint.TextAlign = SKTextAlign.Center; canvas2.DrawText(icon.Text, (System.Convert.ToSingle(tempBitmap.Width) * 1.5f) / 2f, (System.Convert.ToSingle(tempBitmap.Height) * 1.5f) - (System.Convert.ToSingle(tempBitmap.Height) * 1.5f) / 4f, paint); } canvas2.Flush(); } SKSize finalSize = Constants.DeviceLayout.GetSizeByGrid(canvasReference.CanvasSize, Constants.DeviceLayout.InterfaceDimensionDefault, Constants.DeviceLayout.InterfaceDimensionDefault); SKPoint settingsPoint; if ((int)icon.X == -1 || (int)icon.Y == -1) { settingsPoint = Constants.DeviceLayout.GetCenterPoint(canvasReference.CanvasSize); } else { settingsPoint = new SKPoint(icon.X, icon.Y); } image = new IconImage(returnBitmap) { Tag = icon.Tag, Text = icon.Text, ImageInformation = icon.ResourceLocation, LocalImage = true, IsInsertableIntoFolder = false, IsPinnedToSpot = icon.IsPinned, StoredFolderTag = icon.FolderContainingIcon, IsStoredInAFolder = icon.IsStoredInFolder, CurrentScale = icon.Scale, BorderColor = SKColors.Black, BorderWidth = 2f, Bounds = SKRect.Create(settingsPoint, loadedSize) }; return(image); } }