/// <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));
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
            }
        }